From 4ef6f71622135c8a2be6248fdceef6cde762a469 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Sat, 3 Sep 2016 22:05:12 -0400 Subject: [PATCH 001/193] Less Blurry Character Preferences images. Ported from VG https://github.com/d3athrow/vgstation13/pull/11149 --- code/modules/client/preference/preferences.dm | 2 +- html/browser/common.css | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index c39a34d969a..4f487933227 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -236,7 +236,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts switch(current_tab) if(TAB_CHAR) // Character Settings - dat += "
" + dat += "
" dat += "
" dat += "Name: " dat += "[real_name]" diff --git a/html/browser/common.css b/html/browser/common.css index 8c0a0253599..23b675f7fa2 100644 --- a/html/browser/common.css +++ b/html/browser/common.css @@ -339,4 +339,10 @@ div.notice { width: 100%; clear: both; +} +.charPreview +{ + -ms-interpolation-mode: nearest-neighbor; + width: 64px; + height:64px; } \ No newline at end of file From 6f20e343f6cbc506874816e9c86ec89c09fbe495 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sun, 16 Oct 2016 20:28:02 -0400 Subject: [PATCH 002/193] No more human jetpacks --- code/modules/mob/living/carbon/human/human_movement.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index cf66c1d2c15..884a89ace95 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -68,6 +68,8 @@ if(..()) return 1 + if(pulling && istype(pulling, /mob/living/carbon/human)) + stop_pulling() //Do we have a working jetpack? var/obj/item/weapon/tank/jetpack/thrust if(istype(back,/obj/item/weapon/tank/jetpack)) From 8bd79007ef51d9dd5337eccb37023df093606b30 Mon Sep 17 00:00:00 2001 From: Markolie Date: Mon, 17 Oct 2016 17:43:03 +0200 Subject: [PATCH 003/193] Fix holodeck ready device and ghosts accessing tray lights --- code/game/machinery/computer/HolodeckControl.dm | 4 ++-- code/modules/hydroponics/trays/tray.dm | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index eafdbe893ab..aa834941d78 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -553,8 +553,8 @@ to_chat(user, "The device is a solid button, there's nothing you can do with it!") /obj/machinery/readybutton/attack_hand(mob/user as mob) - if(user.stat || stat & (NOPOWER|BROKEN)) - to_chat(user, "This device is not powered.") + if(user.stat || stat & (BROKEN)) + to_chat(user, "This device is not functioning.") return currentarea = get_area(src.loc) diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index e9c63ed8794..b7e9c9ac4d8 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -380,10 +380,12 @@ //--FalseIncarnate /obj/machinery/portable_atmospherics/hydroponics/verb/remove_label() - set name = "Remove Label" set category = "Object" set src in view(1) + + if(usr.stat || usr.restrained()) + return if(labelled) to_chat(usr, "You remove the label.") @@ -397,6 +399,9 @@ set name = "Set Light" set category = "Object" set src in view(1) + + if(usr.stat || usr.restrained()) + return var/new_light = input("Specify a light level.") as null|anything in list(0,1,2,3,4,5,6,7,8,9,10) if(new_light) From cf31814e80de0c0ea512705b2d638a640dfb83c6 Mon Sep 17 00:00:00 2001 From: Markolie Date: Mon, 17 Oct 2016 18:51:49 +0200 Subject: [PATCH 004/193] Exploit fixes --- code/game/dna/genes/goon_powers.dm | 4 ++++ code/game/machinery/Sleeper.dm | 8 ++++++-- code/game/machinery/cryo.dm | 13 ++++++++----- code/game/machinery/programmable_unloader.dm | 1 + code/game/mecha/equipment/tools/medical_tools.dm | 2 +- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm index f9e9c2678a5..1ada7c0f5ac 100644 --- a/code/game/dna/genes/goon_powers.dm +++ b/code/game/dna/genes/goon_powers.dm @@ -288,6 +288,10 @@ if((O in user) && is_type_in_list(O,own_blacklist)) continue if(is_type_in_list(O,types_allowed)) + if(isanimal(O)) + var/mob/living/simple_animal/SA = O + if(!SA.gold_core_spawnable) + continue possible_targets += O targets += input("Choose the target of your hunger.", "Targeting") as null|anything in possible_targets diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 60e650691e5..65668b9104c 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -454,8 +454,10 @@ set name = "Eject Sleeper" set category = "Object" set src in oview(1) - if(usr.stat != 0) + + if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other return + src.icon_state = "[base_icon]-open" src.go_out() add_fingerprint(usr) @@ -465,8 +467,10 @@ set name = "Remove Beaker" set category = "Object" set src in oview(1) - if(usr.stat != 0) + + if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other return + if(beaker) filtering = 0 beaker.forceMove(usr.loc) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 94bc3f5b90b..c4a1968a18f 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -457,16 +457,15 @@ set name = "Eject occupant" set category = "Object" set src in oview(1) + if(usr == occupant)//If the user is inside the tube... - if(usr.stat == 2)//and he's not dead.... - return - to_chat(usr, "\blue Release sequence activated. This will take two minutes.") + to_chat(usr, "Release sequence activated. This will take two minutes.") sleep(600) if(!src || !usr || !occupant || (occupant != usr)) //Check if someone's released/replaced/bombed him already return go_out()//and release him from the eternal prison. else - if(usr.stat != 0) + if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other return go_out() add_fingerprint(usr) @@ -476,14 +475,18 @@ set name = "Move Inside" set category = "Object" set src in oview(1) + for(var/mob/living/carbon/slime/M in range(1,usr)) if(M.Victim == usr) to_chat(usr, "You're too busy getting your life sucked out of you.") return - if(usr.stat != 0 || stat & (NOPOWER|BROKEN)) + + if(stat & (NOPOWER|BROKEN)) return + if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other return + put_mob(usr) return diff --git a/code/game/machinery/programmable_unloader.dm b/code/game/machinery/programmable_unloader.dm index 4cd09d6f8a4..3bed121322b 100644 --- a/code/game/machinery/programmable_unloader.dm +++ b/code/game/machinery/programmable_unloader.dm @@ -254,6 +254,7 @@ src.overrides = null P.emag_overrides = src.emag_overrides src.emag_overrides = null + default_deconstruction_crowbar(I, 1) return else ..(I,user) diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 23271355206..29158e083e5 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -488,7 +488,7 @@ return 1 /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/add_known_reagent(r_id,r_name) - if(!(r_id in known_reagents)) + if(!(r_id in known_reagents) && (r_id in standard_medicines)) known_reagents += r_id known_reagents[r_id] = r_name return 1 From db0a2ec3eff12b9aae4674e705d77f1ff32fc4a6 Mon Sep 17 00:00:00 2001 From: Markolie Date: Mon, 17 Oct 2016 18:56:04 +0200 Subject: [PATCH 005/193] Cryo occupant death fix --- code/game/machinery/cryo.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index c4a1968a18f..f2fad7fa81a 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -459,6 +459,8 @@ set src in oview(1) if(usr == occupant)//If the user is inside the tube... + if(usr.stat == DEAD) + return to_chat(usr, "Release sequence activated. This will take two minutes.") sleep(600) if(!src || !usr || !occupant || (occupant != usr)) //Check if someone's released/replaced/bombed him already From 80591de9b1bc34e0641f02d8580d20da7f6b5393 Mon Sep 17 00:00:00 2001 From: Markolie Date: Tue, 18 Oct 2016 16:30:20 +0200 Subject: [PATCH 006/193] Use incapacitated() checks --- code/game/machinery/Sleeper.dm | 4 ++-- code/game/machinery/cryo.dm | 4 ++-- code/modules/hydroponics/trays/tray.dm | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 65668b9104c..7adf9114aa1 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -455,7 +455,7 @@ set category = "Object" set src in oview(1) - if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other + if(usr.incapacitated()) //are you cuffed, dying, lying, stunned or other return src.icon_state = "[base_icon]-open" @@ -468,7 +468,7 @@ set category = "Object" set src in oview(1) - if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other + if(usr.incapacitated()) //are you cuffed, dying, lying, stunned or other return if(beaker) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index f2fad7fa81a..240f225abc1 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -467,7 +467,7 @@ return go_out()//and release him from the eternal prison. else - if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other + if(usr.incapacitated()) //are you cuffed, dying, lying, stunned or other return go_out() add_fingerprint(usr) @@ -486,7 +486,7 @@ if(stat & (NOPOWER|BROKEN)) return - if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other + if(usr.incapacitated()) //are you cuffed, dying, lying, stunned or other return put_mob(usr) diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index b7e9c9ac4d8..72bf80c58de 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -384,7 +384,7 @@ set category = "Object" set src in view(1) - if(usr.stat || usr.restrained()) + if(usr.incapacitated()) return if(labelled) @@ -400,7 +400,7 @@ set category = "Object" set src in view(1) - if(usr.stat || usr.restrained()) + if(usr.incapacitated()) return var/new_light = input("Specify a light level.") as null|anything in list(0,1,2,3,4,5,6,7,8,9,10) From d12cf4b298bf33ca997b2e80ae405cc304a6dd59 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 20 Oct 2016 23:24:08 -0400 Subject: [PATCH 007/193] Revert "No more human jetpacks" This reverts commit 6f20e343f6cbc506874816e9c86ec89c09fbe495. --- code/modules/mob/living/carbon/human/human_movement.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 884a89ace95..cf66c1d2c15 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -68,8 +68,6 @@ if(..()) return 1 - if(pulling && istype(pulling, /mob/living/carbon/human)) - stop_pulling() //Do we have a working jetpack? var/obj/item/weapon/tank/jetpack/thrust if(istype(back,/obj/item/weapon/tank/jetpack)) From 0e3f9e63341fea32a9a2462ab25777bce857ae58 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 21 Oct 2016 21:25:40 -0400 Subject: [PATCH 008/193] Breaking the bond of love ...Coderchat is fun --- code/game/atoms_movable.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 0dd6c109170..7f4b0574450 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -179,7 +179,7 @@ if(has_gravity(src)) return 1 - if(pulledby) + if(pulledby && !pulledby.pulling) return 1 if(locate(/obj/structure/lattice) in range(1, get_turf(src))) //Not realistic but makes pushing things in space easier From 97736cb0793c0f34ff6a1bfa658f97871b7bce58 Mon Sep 17 00:00:00 2001 From: Twinmold Date: Sat, 29 Oct 2016 21:50:57 -0500 Subject: [PATCH 009/193] Fixes Arcade Runtime From Lack of People to Remove The specific runtime is: Runtime in arcade.dm,933: pick() from empty list This adds in a check to make sure the list safe2remove actually has at least one 'settler' in it before attempting to call pick(), causing the runtime. :cl:Twinmold Fixes: Runtime caused by lack of settlers in the Orion arcade game. /:cl: --- code/game/machinery/computer/arcade.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 65a1730bacd..9fc84056bc9 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -930,7 +930,8 @@ if(specific && specific != dont_remove) safe2remove = list(specific) else - removed = pick(safe2remove) + if(safe2remove.len >= 1) //need to make sure we even have anyone to remove + removed = pick(safe2remove) if(removed) if(lings_aboard && prob(40*lings_aboard)) //if there are 2 lings you're twice as likely to get one, obviously From de920a0ae52aff78b59a1d0a2e1bed125d106fb2 Mon Sep 17 00:00:00 2001 From: Twinmold Date: Tue, 1 Nov 2016 02:01:51 -0500 Subject: [PATCH 010/193] Fixes Missing Scrubber Pipe Behind Medical So... Why was there a missing pipe in the scrubber line? Fixes #5830 :cl:Twinmold Fix: Scrubber pipe missing segment behind the operating theatres. /:cl: --- _maps/map_files/cyberiad/cyberiad.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 233cb1d7e74..2b2233d0180 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -9210,7 +9210,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSedobctvdocctvdoBcuBdodcuCcuDcuEcuFcuGcuHcuIcuJcuKcuLcuMcuNcuOcuPcuQdoeceAcuSceAcuNcuTcuNcuNcuNcuNcuNcuNcuNcuNcuNcuNcuUctEcuVcuWcuXcuYcuZcvacvbcvccvdcvecvfcvgcvhcvicvjcvkcsLceJcvlcvmcvncqKcqJcqKcqKdqYcpFdqZcqKcqKcqNcqKcyGcwrbikbikbikdbFdbRdbQdbTdbSdbVdbUdbXdbWcoGbGychCcyHcuscoAbikbikbikbikbikaabckPckPckPckPckPckPckPckPckPcvucxScvwcwAcxOcxOcyIckPaabcnCcnCcvAcnCcvBcvCcvDcnCcyKcyJcvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdogdofcrjcrjcrjcrjdnQcwUcwUcwUcwUdnXcwUcvFcvGcvGcvHctBdlXcwUcCmcvJcvKcvKcvLcvKcvMcvKcvKcvNcvOcvKcvKcvOcvOcvOcvKcvKcvKcvKcvPcvQcvRcvScvTcvUcvVcvWcvXcvWcvWcvWcvWcvZcwacwbcwccwdcsObGycvrcwecwfcAzcwhdradrcdrbcpFdrdcEMdrecqNcqKcwocpMbikbikbikdbFdbZdbYdcadbIdccdcbdbUczRcoGcyObVibVicuscoAbikbikbikbikbikbikckPcwtcwucwvcwwcwxcwycwzcwAcwBczScwDcwAcxOcBZcyPckPaabaabcwGcwHcwIcwJcwKcwLcwGbxXbxXcvzczfbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGacGafxafxacGafxafxaabagiaabaqZbikaqZaqZdoidoCdojdojdojdoldokcwUcwOcwPcwQcwRcwScwTcwUcwVcwWcvOcwYcwZcxacxbcxccxdcxecxfcxgcvKcxfcxhcxicxjcxjcxkcvKcxlcxmcxncxocbkcxpcxqcxrcxscxtcxucxtcxvcxwcxxcxycxzcxAcsOcsOcvrcwecpFcpFcxBcpFcpFcwecrvcuccuccuccxFcuccsEcpMbikbikbikdbFdbFdbFdbFdbFdbydcedcgcBbcoGbGybGyczhcuscoAbikbikbikbikbikbikckPcxOcxPcxOcxQcxRcqUcxScwAcxTczicxTcwAcxOcxOcMpckPaabbikcwGcxWcxXcwJcwJcxYcwGczjbxXcvzbzNczMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikaabaabbikaabaabbikbikaabaabaabaabaabdoidoidohdoidoidoncEBcwUcwUcwUcwUcwUcwUcwUcwUdoicwWcvOcyccydcyecyfcyfcyfcyfcygcyhcyicxjcyjcxjcxjcykcxjcylcymcyncyocxocbkcypcyqcDucxscyscytcyucxscyvcywcyxcyycyzcyAcyBcyCcyDcyEcyEcAaczUcAdcAccAeczTbGyceJcAhbGycAMcoAcoAcoAcoAcoAbikbikbikbikdcidchdckdcjcoGdclbVibVicuscoAcoAcoAcoAcoAbikbikckPcxOcxOcxOcyZczaczbczcczdcAicAOcFRcwAcAVcAYcAWckPbikbikcwGczkcwJczlcwJczmcwGbxXbxXcvzczMbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikaabaabbikaabaabbikbikaabaabaabaabaabdoidoidohdoidoidoncEBcwUcwUcwUcwUcwUcwUcwUcwUdoicwWcvOcyccydcyecyfcyfcyfcyfcygcyhcyicxjcyjcxjcxjcykcxjcylcymcyncyocxocbkcypcyqcDucxscyscytcyucxscyvcywcyxcyycyzcyAcyBcyCcyDcyEcyEcAaczUcAdcAccAeczTceJceJcAhbGycAMcoAcoAcoAcoAcoAbikbikbikbikdcidchdckdcjcoGdclbVibVicuscoAcoAcoAcoAcoAbikbikckPcxOcxOcxOcyZczaczbczcczdcAicAOcFRcwAcAVcAYcAWckPbikbikcwGczkcwJczlcwJczmcwGbxXbxXcvzczMbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdoDbikacGbikczoczpczqbikczoczpczqbikczoczpczqbikbikdoidoocfRdopdoidoqcGKdojdojdojdojdojdojdojdojdojcEycvOcztcxjcykczucxjcxjcxjczvcxjcztcztcxjcxjcxjcxjczwczxcymczyctEczzcoacyqcyqczAcxsczBczCczDcxsczEctWczFczGczHczIczJczKbGyczLcdcczLbGycBacAZcBccBccBccBccBPcBNcBNcBNcBNcBNcBQcoAbikbikbikbikdcidchdckdcmcTabGyckObVicusbGybGybGycgmcoAbikbikckPcwAcwAcwAcwAczWcqUczXczYczZcCfcAbcwAcCGcCYcCIckPbikbikcwGcAfcAgcDLcwJcDNcwGcEdbxXcvzbwoaabaabaabaabbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikczocAkczqbikczocAkczqbikczocAkczqbikaqZdoicfRcfRcfRdoidoidorczsdoidoiczsczsdoidoiczsczscwWcvOcztcAlcxjcAmcAncAocAocyjcxjcztcApcxjcxjcxjcxjcAqcArcAscAtbZNcAucAPcAwcAxcAycxsczBdlYcAAcxscABctWcsOcACcsLcADcAEcAFcAGcAHcAIcAJcAGcAKcAGcAGcAGcoAcoAcoAcoAcoAcoAcoAcoAcEhcoAbikbikbikbikdcicBTdcqcBUcoGcgmcFdbVicFmcFlcFlcFnbGycoAbikbikckPcwtcwucwvcAQcARczbcAScATcAUcFrcIScAXcGscIScGtckPbikbikcwGcwGcGIcCrcBdcwGcwGbwobxXcGycyJcyJcyJbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikaqZaabczocAkczqbikczocAkczqaabczocAkczqbikaabdoidondosdoqdoibikaabbikbikbikbikbikaabbikbikczscwWcvKcBecxjcBfcBgcBhcBicBjcBicBkcBicBlcBmcxfcBncztcztczxcBocBpcBqcBrcBscBtcBucBvcFbcBxcBycBzcBAcBBcBCcBDcBDcBEcBFcBGcBHcBIcBJcBKcBLcBMcALcBOcHucHtcDPcDPcDPcDPcDPcDPcHvcoAcEhclUclUclUclUclUclUcjmbEJcjmcFfclUclUcoAcoAcoAcoAcusbGycoAbikbikckPcxOcBZcxOcCacxRcqUcCbcCccCdcCecqUcqUcCgcqUcChckPbikaabaabcwGcwGcCscwGcwGbikbwobxXcvzcyJcHycHxbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik From fc22354185bd62a5a97f1b38a2de8ead2916b807 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 1 Nov 2016 03:23:40 -0400 Subject: [PATCH 011/193] Automatic changelog generation for PR #5831 --- html/changelogs/AutoChangeLog-pr-5831.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5831.yml diff --git a/html/changelogs/AutoChangeLog-pr-5831.yml b/html/changelogs/AutoChangeLog-pr-5831.yml new file mode 100644 index 00000000000..deea7aa729e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5831.yml @@ -0,0 +1,4 @@ +author: Twinmold93 +delete-after: True +changes: + - bugfix: "Scrubber pipe missing segment behind the operating theatres." From 670eaf68886b42f2f206ec9fa1140a67426c458f Mon Sep 17 00:00:00 2001 From: Twinmold Date: Tue, 1 Nov 2016 03:35:36 -0500 Subject: [PATCH 012/193] Fixes Wire to Firing Range APC Simple fix... Would have fixed it with the other PR had I been aware of the issue. If there are other mapping issues as well, I can include them to this PR just so we have fewer PRs filling up the space for mapping fixes. :cl:Twinmold Fix: Wiring to brig firing range now a node instead of a curved wire. /:cl: --- _maps/map_files/cyberiad/cyberiad.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 2b2233d0180..5dd0e1fd4f8 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -531,7 +531,7 @@ "akk" = (/obj/structure/filingcabinet/chestdrawer,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera{c_tag = "Brig Warden's Office"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "akl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "akm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/closet/secure_closet/warden,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) -"akn" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/table/reinforced,/obj/machinery/syndicatebomb/training,/obj/machinery/requests_console{department = "Security"; departmentType = 3; name = "Security Requests Console"; pixel_x = 30},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/range) +"akn" = (/obj/structure/table/reinforced,/obj/machinery/syndicatebomb/training,/obj/machinery/requests_console{department = "Security"; departmentType = 3; name = "Security Requests Console"; pixel_x = 30},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/range) "ako" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) "akp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/book/manual/sop_legal,/turf/simulated/floor/plasteel,/area/security/main) "akq" = (/obj/structure/reagent_dispensers/peppertank{pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/seceqstorage) From 5d8a10815b1867ab8966d24c335055bc0dbe3266 Mon Sep 17 00:00:00 2001 From: Twinmold Date: Wed, 2 Nov 2016 02:36:53 -0500 Subject: [PATCH 013/193] Paramedic Vent & Scrubber + Missing Medbay Wire Adds a vent and scrubber to the paramedic's room, as it seems to be the only small room on the station missing either/both of these. Also adds the missing wire underneath the recovery ward door just above the surgery rooms. :cl:Twinmold Add: Vent and scrubber to paramedic's room. Fixes: Missing medical wire under recovery ward door. /:cl: --- _maps/map_files/cyberiad/cyberiad.dmm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 5dd0e1fd4f8..36910edbffe 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -5332,11 +5332,11 @@ "bYB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/janitor) "bYC" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/janitor) "bYD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"bYE" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/paramedic) -"bYF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/stool/bed/amb_trolley,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/paramedic) +"bYE" = (/obj/structure/stool/bed/amb_trolley,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/paramedic) +"bYF" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/paramedic) "bYG" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/paramedic) -"bYH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/paramedic) -"bYI" = (/obj/structure/closet/secure_closet/paramedic,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/paramedic) +"bYH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/paramedic) +"bYI" = (/obj/structure/closet/secure_closet/paramedic,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/paramedic) "bYJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "acute2"; name = "Acute 2 Privacy Shutters"; opacity = 0},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/sleeper) "bYK" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay2) "bYL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) @@ -5940,7 +5940,7 @@ "ckl" = (/turf/simulated/wall,/area/medical/ward) "ckm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/medical/ward) "ckn" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Recovery Ward"; req_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) -"cko" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Recovery Ward"; req_access_txt = "0"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"cko" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Recovery Ward"; req_access_txt = "0"},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "ckp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/medical/ward) "ckq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/wall,/area/medical/ward) "ckr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/medical/ward) @@ -9190,7 +9190,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdkDdkDdkDdkDdkDdkEdjHdjHdjFdjydjydjydjydjydjydjBbikbikbikbikbikbikbikbikbikbikbikdeRdeSdeSdeSdeTbikbikbikbikbikbikbikbOUbOTbQebOTbQfbikbikbikbOVbOVbOVbTjbTkbRObTlbNybTmbQnbTnbTobNzbDXbTpbTqbTrbTsbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTCbTDbTEbTEbTEbTEbTEbTEbTFbTGbTHbTNbTMbTPbTOdlidjmdlkdljdllbPlbTQbQUbQVbTRbSpbJkbSqbSrbTSbTTbTUbTVbTWbTXbJsbTYbTZbLbbLbbUabUabLbbSDbLdbUbbUcbLgbUdbUebUfbUgbUhbLgbPNbUibUjbUkbUlbUmbUnbUobPPbUpbRAbSTbSTbZkbUqbUrbUsbUtbXNbUvbUwbUxbUybVObNabOMbUAbUBbUAbUCbUDbUCbUCbUCbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkhdjYdkDdkDdkDdkFdkGdjFdjHdjHdjFdjHdjHdjHdkHdjHdkIdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbTfbTibThbTgbUIbUIbUIbOVbUJdpmbUKbULbUMbUNbUObUPbUQbUQbURbNzbUSbUTbUUbUVbUVbUWbUXbUYbUVbUZbUZbVabVbbONbUZbUZbVdbQMbQMbVebVfbVfbVfbVgbVhbVfbVfbVibVjbVkbVkbVlbVkbVmbVnbVkbVobVpbVqbPlbVrbVsbSqbVtbVubVvbVwbVxbYybVubJkbSybVzbVAbVBbVCbVDbVEbVFbVGbVHbVIbVJbVKbVLbVMbVNbPMbLhbPNbPNbVPbVQbVRbVSbVRbVTbPPbVUbVVbVWbVWbZkbVXbVYbVZbNabNabNabNabNabNabNabNabOMbUAbWabWbbWcbWdbWdbWebUCbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikaabbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjyddZdkDdkDdkLdkMdjFdjHdjHdkNdjHdjHdjHdkOdjHdkPdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUEbUFbUEbQebUIbWmbWlbOVbWnbTkbWpbWqbWrbWsbNzbWtbWubWvbWwbNzbUTbUTbWxbUVbWybWzbWAbWBcabbUZdmbbWEbWFbWGcbnbUZbWIbWJbWKbVfbWLbWMbWObWNbWPbWQbWRceLbWTbWUbWVbWWbWXbWYbWZbXabXbbXcbXdbXebXfbXgbXhbSrbXibXjbXkbXlbXmbXnbJsbXobXpbXqbXrbVDbXsbXsbXtbXubLgbXvbXwbXxbXybXzbXAdoEbLhcbObXDbXEbXFbXEbXEbXGbXHbXIbXJbXKbXLbXMbZkccCbXObPXbEXbxXbXPbXQbXRbXRbXQbXRbXSbUAbXTbXUbWcbWdbXWbXVbUCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbXXbXYbXXbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkQdkDdkDdkRdjFdjHdjHdjFdkSdjHdjHdkUdkTdjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbUGbUEbUEdeycOWbTkbTkdeAbZAbTkbTkbWqbYhbYibNzbNzbNzbNzbNzbNzbYjbUTbYkbYlbYmbYnbYnbYnbYobUZbYpbYqbYqbYqbYrbYsbYtbYubYvbYwcdIbYxbYzbYAbYBbYCbVfbVibYDbVkbYEbYFbYGbYHbYIbVkbSmbQVbSnbQVbYJbYKbYLbYMbYNbYObYPbYQbYRbVubYSbYTbYUbYVbYWbYXbYYbYZbZabZbbLgbLgbLgbLgbLgbZcbZdbZebLhbZfbXEbXEbZgbZhbXEbZibZjbZkbZlbRAbZmbZmbZkbPVbZnbPXbEXbUAbZobUAbUAbUAbUAbUAbUAbUAbZpbZqbUCbZrbZtbZsbUCaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacbZubXXbXXbZvbWhbWhbXZbXZbZwbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkQdkDdkDdkRdjFdjHdjHdjFdkSdjHdjHdkUdkTdjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbUGbUEbUEdeycOWbTkbTkdeAbZAbTkbTkbWqbYhbYibNzbNzbNzbNzbNzbNzbYjbUTbYkbYlbYmbYnbYnbYnbYobUZbYpbYqbYqbYqbYrbYsbYtbYubYvbYwcdIbYxbYzbYAbYBbYCbVfbVibYDbVkbYFbYEbYGbYHbYIbVkbSmbQVbSnbQVbYJbYKbYLbYMbYNbYObYPbYQbYRbVubYSbYTbYUbYVbYWbYXbYYbYZbZabZbbLgbLgbLgbLgbLgbZcbZdbZebLhbZfbXEbXEbZgbZhbXEbZibZjbZkbZlbRAbZmbZmbZkbPVbZnbPXbEXbUAbZobUAbUAbUAbUAbUAbUAbUAbZpbZqbUCbZrbZtbZsbUCaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacbZubXXbXXbZvbWhbWhbXZbXZbZwbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkWdkVdkXdjFdjHdkYdjFdkZdladjHdjydjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUFbUFbUFbQebUIbYfbYebZzbZAbTkbTkbZBbZCbZDbZEbZFbZFbZFbZGbUTbUTbUTbWxbUVbZHbYnbZIbYnbZJbUZbYpbYqbZKbYqbZLbUZbZMbZNbZObVfbZQbZPbZSbZRbZTbZUbZVbZWbZXbZYbZZcaachdcaccadbVkbTQbQVbQVcaebYJbYKcafcagcahbXjcaicajcElcalcamcancaocapcaqcarcIfcasbXscatbVAcaucavcawcaxcaycazcaAbZjbZfcaBbXEbXEbXEcaCcaDbZjbZkcaEbRAbZmbZmbZkcaFcaGbPXbEXcaHcaIcaJbUAcaKcaLcaMcaNcaOcaPcaQbUCcaRcaScaTbUCbUAbUAbUAbUAbUAbUAbUAbUAbikbikbikbikbikaabbikbikbikbikbikbikbikcaUbWhbZubWhbWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydjydjydjydjydjydjydjydjydjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaacbUTcjMcjMbUTcjMcjMbUTbikbikbTgbWjbYbbWkbTgbUIbUIbUIbOVcaYdpncaZcaZcaZbOVbOVbUTcbbcbaccAcbcbUTcbdcbebUVbZHbYnbYnbYncbfbUZbYpbYqbYqcbgcbhcbicbjcbkcblbVfbVfbVfbVfbVfcbmbVfbVfciFcbobVkbVkcbpbVkbVnbVkbVkbPlcbqcbqbPlccicbrcbscbtcbucbvcbwcbxcbycbzcbAcbBcaocapcbCcbDcbEcbFcbGcbHbVAcbIcbJcbKcbLcbMcbNciHcbPcbQcbPcbRcbRcbRcbPcbScbPcbPcbTcbUbZmbZmbZkcbVbZnbPXcbWcbXcbYcbZccaccbccccccccdcceccfccgcckccjcdqcclcfeccmccnccoccpccqccrccscctaabaabaabaabaabaabaabaabbikbikbikbikbikbWgbWhccuccvccvbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbUTccBcqsbUTccBcqsbUTbikbikbYcbOTbYgbOTbZxbikaabbikbOVbOVbOVbOVbOVbOVbOVclabUTcuRcsucjbccDbZFccEccFbUVccGccHdmcbYnccJccKccLccMccNccOccPbUZccQccRccSccTccUccUccUccUccVccWccXccYccYccZccZcdacdbcdcbVibPlcddcdecdfcdgcdhbYKcdicbtcdjcdkcdlcdmbSwcdncdocdpcffcdrcdrcdscdrcdrcdrcdtbVAcducdvcdwcdxcdycdzcdAcdCcdBcdCcdDcdEcdFcdCcdGcdHcbPcjfcdJbRBbZkbZkcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdUcdVcdWcdXcdYcdZceacebceaceccebcebcebcedceecefcegcehaabbikbikbikbikaabbikbikbikbikbikbikbikbWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik From 5727515c0bea692c6f6fd46570c24db5595817e3 Mon Sep 17 00:00:00 2001 From: Twinmold Date: Wed, 2 Nov 2016 05:56:13 -0500 Subject: [PATCH 014/193] Adds Missing HoS Skirt Drask Icon Adds the missing drask skirt icon that the Head of Security's jumpskirt should have. https://i.imgur.com/mhINUbM.png :cl:Twinmold Add: Drask Head of Security jumpskirt icon. /:cl: --- icons/mob/species/drask/uniform.dmi | Bin 314602 -> 315980 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/species/drask/uniform.dmi b/icons/mob/species/drask/uniform.dmi index 66c5851122e426c58d08faadb271ad46cdbab2a5..9bfe9f9c21af5939cd5f9297fd30beae7810b92a 100644 GIT binary patch delta 214693 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 delta 213385 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�M8Ky1GFy92}rF>&kyr~-yg?iPFO?ylTkH;{2qw3 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�sMWXy$~A;tfEy*&Wp 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%0D*9JOohQ(bOr=e!>tdPx<~Omj%h=~mvX z%Qga~qUZ~tjP-7TU*ZT8Iz#Q=STT##)z5i}e5Ti8b*4nztunMZ=1<@qvGuQj<^r-93eI0lc}l z6_q9US1=3)a(%k5lpc>_E?1>VYLuaud9zXfU6(y|e}V+TTnIYQV37fAQ6#L|Dbi(X zNng8!!|$xSQ9XF-IY+F+!4@d0q^#DNqUO!Xu#g3HCvVFOgfeVDs>pBB+V$(s3!}7Z~lh9?Yyy z{vbqub?~7-G^)#Ngh;574k?sQsrj&?_uX$K;35NOw1XXd4tU9~3748xENhsX zbd3*)`eqzWg(9d*U(J)*yIyzfrZ>eH6!%R|&2RK{!)c_P(BI160}s3NtoVqYTs5~( zvRgNMtCPEDZU9Og{_-LBFPP@&$Lf7vYy%fhD3v0+$|vL!wjaz4^ytXA?S@|>cBKf; zOXVZ-+f6;?rDex^ufE0za=b2l++KJe=891TkgFY!zzomUG;Mggs^%LZMH5TZSSf-P zIzxOaOy~6B!>17|TCc`=d!KQ~a@M~^+>>Kb+7k`$A#BbublB{B8UHK1EpU%Qcgcfz zq61}TPw^~yP8pAtS|^6VlY#2Plkr~vSewGnXP0IF?vN>_(jqMb!CcP zUbYJpc9Tx`sbN-kiHeFgOC~pgF>@K(ny0_Wad;5Qc_>>LpO~Nm>X!#l z_u5yi|;&>VL2g(4sC zufMhw+E#2|XeH`=QSCjqc4&O|m#}OFnE{vx(g&;vFn{Y&|1kygP3jvplN~`iU|Z@H zbGr1yB@jc$V*J=AD`KiMWb?o03M2ds1)vV=oM*tx4V-UWvI2a&(@;GTl00Ke@u8nR zOPkk4Fe@|0EAR8b{eJ>3J2QA2gQ*hJLFoAc0~T1qoxi)n-}hP~!c<_a1>X>y;~A0Y zpR_zGB5?RtDnVnY((^m_36I&TTHvOqY$CfR6A5l1jVQfzX<3zkNz%UQU2W(39~tKI z(TdRS-%=5y!%EEv<>wHrM8fgGjKqh4k6i>2VYkPB zAFUq<`FYv}#>A(~0hZnD_h`jDYllaCrmybxh8nwlm}}C!qod&(g7-u5#EH?JCv;L1 zUCq@5zH!+6k&NA5ax)aL2UM9RV#S$Y^a0V%jq=G_$a`d{uCC6})z$7ykS@QdD4@Q+ zzH?_|W24CWnx&Z?gY-HPlfjc2xDMH+rKJ*OQ|tKIs;O8H_ghH`?e7tSL`-kQiwQmU{Wfo9_~lIC={cqj3k7leTP19s_i+`VgqvRX3|Bpq6{>MV2@k zr1Oe!62igxM#}Vafl{zVYK-$7>yzM|abt(G;tER3vrzV*Tq3qAi|?XRy3mP@2xf&! zmDq1mr>{oey(2=UO+I(nMIvMOB#(kc5g=+eOrLi?QLZ*&WpzPdh4EWi3%wAXNB&s| zA;P>ZmAdl($r0M6V^1s!8fpa!axeG9TIXK-CqPSIZWcOUa0)KTn%T{zK#m$PyB?mL?8uPq z<(4Fjmm<(KFXURB_hlej;4MBbt6RNhz03BUd?Og7m%xhc6;aFI)b04h6N(J#KTSVO zk}HnH_7r|hu4b2(mF@SbTfMk+?&X%Q<;~CWg=fCR-LI=2$`L_9Qp5;XOz~R)K>;)4 zd6h29^eaCkQEVA0Q2U!>^6vP5fFFb$<50~~JK^2+z5jpYDM6IgIO!wCgk+lmaVU|T zYUbFM^1F8tkkBk{ma3IEW_Mu>&imV-k*wGhW>QGYeEWWS<;FjAb1V=0$&)8IxVXkg z`dK5Ce0)ShoZ}GPg=%<{0{;C+oC_Q)ZW81!R8DoGBk1xyGaHK}Xj@f$mB-KL90shD zGvsU$1n4`BjncQIMN>OR#~o>ez)TuQ20rQCi7C`Z$70=9mFqyGw-)yE!fR43OM5IS zZS;b9WA{So$M_VHy}dm#pFJ6pJ1->Y8Khn_}Y*a%>{iF*^Y*949p+S)hdy|*Hmb5S5{2P;T8@Jd7ng#EN`Ff z%zlc3Z@jdI=654+6z=Aq4SUhNLWPG$!{lSlbAAR|G{Q`3A{BG8k^T(uE&Su8S?GNX zqUP&f>=C9JW2w8wOkI;!6aI<9o)t0Qpl@$B&odS5W^GPM0O|%LrkL(6XtS>kQUuSw zSIx}?sxP3kG(8=l3_fbuZwy5iLd~33hdz-YNGB`G+%R5`$z#G`37di#R8ckY-VtuQ zUE}@;%$1Iy)HQZ%pAP|6Grrfp{kKHE8o|hQPZRkuLdNgJq;whEUQrYhQn@|oNFZRz zIrzMhT&Kvb1!zmWwQ`s52(!ot*yhS6vK{k0og|76n02M^ z|HQsrS+MzwmOle0q-VX<;rFFN^y88#=D${9~$V22zaFN*xO7sRIWL+=S4r~Sdb4U(^`*hF*ONujS&3ZZH5+~MenfZBn`BoOP&a6j|K%H!vnZSDAQtg5t&Hn!WuyrRk z`NWI1diGsdZjbfA?M>~1jI;ug03y{MH0EdZmEm)Z8dBFZMhYYQa&RJ#{6Yj-#UHWE zqt(@lDJZU+a_W2gOH}I?GCRSKM8XH1dOSZK(=9YL$%%q@TFt!rcjm)oveo#1Jg={2 zH>w&~_cWR%#bPf)IQe}+&Dm1N)<)*DxMig1S;oO@;@yt0DUi#ZAp*_()Cf}Q(!8^OP{IUs`D z9Ya=e@FVd3N0b*m@(JTyXE1-I3r)@m=w$N6hw{wF`ud$5&C`@51}ggc$~p@X;g|{@ z-bz%J#DaS1$F~WNh%kNq`j)8y+&ZGp2z;KZwd>;>O^Jo6srbu3oJJLul_i`;FI9AU z_bm^tNAiBv)d46YB|SYVpwt4%V!P+vcNYuMySugkcb3uAWFXj8fn6F0vOvC1C?Jvh zsnN^4oE+S%<3X3V7JopPBVocYb|?P(=WrW<0ew$52}A|guki&3fFOd%=v`3`X6PNx zQ)<8Ik_l_^ou+qDxXv?Q6P-UqjuOH6`3?4&TrsR2-$)C%gk8Nh&44agq61tpxNmZj z0FV`vs18@6(pdXv{-i#T^Xn)+U^Ingo0h!Hqgra4mS_mPOzMt?8!Q*jFth`g6a zqa=hs-ysfv`Oz1_NEW(2P>_K)K9+V)&ata@bSFHV!$vK>>4J%I8#mpw!rU#-WT_`M z-{vK`tw<%k4u#q@XT4@-uo247W+q|y^wZ_s9wWG!97Bj(wt%eE zAtC^L-~HMJH8)8lzJ#S&i@cQ=0w}$QAA941hiE^SKeu{-hgA4v?Ij9`q%K?=hEGHn4bFCZ^wQ|RZdY@IaXxUx3|6- zsK7GHq%l`LN8|aZ4dO!1Ai)#f2d7D4PtlN2q#i6FrGDPAg?eg0^SljrqoWB%n8Vlq zJ`K%#io@`JhEP{EDxh&d5^as6pmpS*1@pgQO0ofsynTFgXfskDhn(_$He-f$2?2}P zD@zbN6E;lKlj7-i?87hnaw7E_8AkVAf!}jpm_V8wk179195dQeZ>ZoJUR!xq<~ryH zrv(%?<-TkBp`SmCgJ%T|m|L@2^Fi0wUMY9?z0K7kuy6YY%$>@rs??ns!Mtn0vXQ+o z1bcH3v}GShFx~N&2Gr0`tH4EoO4QG+KE36O>kAb_!)ViLTN_oE8W9-2pt%eOn4mHo z`I!m=n)PzO;eg|L>t07u6!E{#_UKv>d@zv2FJ-{X!*f6xe8Et%9oySmcc58L(LkL| z3`iHUiN}X?edc#r<{*G$hFsvH>}h_q48R$FuyM6nE^M){s%WgekdcvPbU3Uj4c~8e ze8zjh!lI#&tg5SP&9PRPRYakJ&$Qv7ej%`!L_5v#h|Oa@967oG+}Y+DHlvm|Q^sFr zo^Ihs$>cd|0N$n_g;OYC!n#}}A7*rWgl{QXXW5l@1(2_B%t3ebn=;P~{q)SS&PyeN z#Onww1!aSlz63pPSBd|+(XQfDkU4hB#L5Gx9IRgt#0>rb*Id#|;RXi8GY-k_5g)V; zey3p@1H12G7l?vu^!jhf`-=7ZXL49o>oTHNa~W;k*;MOp-B0xR7Zex25z`QT5FhSx z{y6;$a-u;jyw0qsQ2maPFgT9Zfk8|Xpjq_YL|F(ac)l5I?Hfj7BmiY2d1iq~z-MQ2 zc(hOsV7U*w;9U()BSAF^94;d(4BZmVF!4PMVlOz@`VCcc8u3FEg16;4ELk~R1M!2C znl{@L;8Fw){q~!-NE4F7qa5vpj*U$%u1wqL;nANPSBgh?wd8^fwWjPf%-?Tf7fn5J znJC!9MAIGrw3II$wDj~mWe(dC&2ple^m$VG#;#w)77v-hpR4H|@=}{SgTtdWKEJpLX{Nm1`m~BFH6WLAxN}a&2y0o<% znYp%}xU>o%+zz?;6N#w5)jfaFTq*J#J~$jVHgnfsr(eo-NUOCn^*ng+$&Uu10NSh|!hf&+x*#460{xXztik@c zOusf8R?n6_xA&rRF+qvB2d2U|Vzciet-9^|<6CPie%~mhsy>RhE_(ac8AWz`Y}VE^ zDC(Pd-olhcGRdy}AaWD}xua>*bqtHh`^&P!h(7s>J8e!F<(osx(t;w|>BNa~3sR=A zmk}=tA@-V?T+{-~?T=j2i}NU#+-G05SKtbN>6T(unpUS4qG2%ZrfoCxhD*89!}SuC zj!AsVYU_%J-JcfLO4QNPnEC=*efTeSe*YJ^{f|tjZoV&h;tZTwUS94lkgSfO#V^KoeA0ScnX2zL$4)(1|Q9za>x7fy!c| zzf`!mxX3v1w}}3%`oE1@)s&WUv!o@ER1k zjIXb((3r3MZ$wf1lJ?j>qs;$>B0T_(Qu+eQ(*MNAxFK*tS8}B6To(O{D7OC#hXlZo zXSe2<2|(i`W_VaxLm{F0(^92b@0TJGss9auD&@JaKaveZ`P%D@&bRUU3-}FyE%pO!EqU^u+b`ten5h8rz5{?9WPrA=kkJ3Xlk~r< zHnQ{5yuu#Zl_AyLyZx1=LVUIR+aPfwhiPz-pL^{-tOLSGu&%XUzXt8fD6_P?R948T z68z*!cC1}$@&9xn((M^L_gHqcB}Gc1fcZs(NSg2PR1w=2WCL{~BELb(F4Ho69ZBT* z4&O`uy|48>P`(HtgRk)yoBkSic?>%6v|1sd$-wt>*;h87-+>h1v(XG zpG}+|*Dfdymyp8zi*;xkOW7ULtj<$Jv5%YK96M-r_wh8+vU?Xf*+-&sz#bf^NfPl;aa0w-spiWn}@e$bwIXF$gg33PR8dUfOPyfMf@@f9deE<>xUfej4}MJBg2G&FBbO=(!) z{c7P(!#2e4$*?jSuCfN$A6Z@a(0pBpv`X3?TqxQ0i-H>;E!7My*;6YSMDdp-A3yz7 z$3@29D`O$w+$t%nBD7Y~)hlO-JX2OGsitIUI`_3h`Tkc^{0;8+N?PRCNK|Olv}6@C zDV6oT^xlw{AJi{W$(1}uOM4<;ES$dcmq}=-fA?a3W_NJc{ouwgMUjCK9`bl?qUBEM zsRc(d^d`mtu3=-gGK6wa=9Q8vvi5OJ%H&y5`w-j+F5ht9d{>@0t$TNQXTdOg0>56s z>rX*|QJ&aiq`|TMUNo_;5l|M98@b;b!p#nEo1x{U#V`dWS@+(;kePJ&l!#bNB0|M> z=1|8DTQQWBG4kZN;~=rClGYouSH1@c)}UVZdh~a#5gvkn*FMQ^J`|;cA;;xM)p#HN zz1cZWY54POtCXcs%A=0!u;*J?($)ck>QD){EAM)Tgt8FHPQPI z3echRxwmx3&|2dBA>rP<+| z$JTxw(w#`K!W50LVr=U{m{@cf8fGb~M&)ZzT`NWAO*Z<$N4)_bX=4BAOlId~e=tB7 z%$#H?dynB2SZKFNgdc|BtJEYQd8{o6y-LmKevT9E8(%9I7L+7SGl6H{sBz1XNHSbl z_-UnjD*G(AeqXg1DWmXN#;`lTKRVH2`)9nIGqyA#vn@&z1kNzb`f7^dA z9@WmvRspsL46_?I@m~ibh+i3h{U{9UJ&B8mKC0~eh)(BddskXDU$qOz-+{SCLNR{V zzR$$^^ja}h9nefl`cDbUk^6~0`yWv;8z@zAn&oR|YmZNQcNtOpQDFs*IKlim9oRH^ z)4xwT$RuZL=g~A4l2DC%Fh)cHUDv0=(<21J4lHl+jdmu{PUm3L&p7@Ilc#dx@#8zd z-|#pz9RO(9)oJ!)aiF)^wMn zgf@S#=NK^Cgu4bKk zUxyhgX*RtU>=c9*l5&7?EZ#-hft}dDss2q+- ztQm|k5r!ZB*Q>UaD3lGgCxwocFAh=f0L$;5ZPrA!IQ&DAO`!6Mxyj=30>S$60uF$` zG8o)*ahU)%xvg?UiV~VOmSkj3G6@SA2(^ETvq=h!{YKf!+^9Wu~v^x_eKcX_^@RX1zvO=Zv+%cJl5Q6-6t!)1{FSZ%Eskq27s3L*I& z`-tZg2q8S<5K4A0{DOdYSy4vpeRnqHG_^k9*l-ka701?{>OTMMclt}n!ryVH zWObJU9tynQN7%2BVU$Xum_Re4Od8~4f2G>$18OMxyG`lBWZVxYL0vyTtjRWb?34AJ z?-jn~#`zi7UVc{paR2j?A-Zmy5nxFdy5PPYwqKd zh}Jin*^;dXPYgCG+&Z(`rb50CSe8@SJ+*k#X%a)ZvyM= zs^K|0I(lqeT=4q3MXyh0M_1R6@^Tddyuj^{th_ulkm53)D#&32ASuFdNs`JL+wnkg zAnAQloZx@;$!VoaylmgjPT)20vr)I>@`}fPx!fxad0@NH))AN) z+&#eP{?_!Mx)C*`7UdxA>eYS^P?6H?|I%N*8u=ISre7hv36oU7Tc12beAfKrkkVrx zx}Z49D0s(h9B0Qt%T2m=RyjR1f zC^aQci-Rn=a)V*dsveg$9LNR~iT~m5>6l&HKX!4TN7-;$y#!*a6O=SVvG??Q?s{3;FS|0~=?-O)Iy&z==LLN@% zA)?)&8*BF z|LUB}!OQ~In831=@#|AzN>dB76G<9mD&xb*aUg+{<|{U#>ok+_cx;&=!zTP)S^?qj znwL3Os@0kilH|!@mqGkNfFscv<5dDK0qLX<0<2jMtr-VxlD5N2^fLvIu%NREe z@5VPZi3I7iKS@=*nMx-icdLI6{s_ZSyc)?tj6uS|fzA1De%>JH>h(%YcURI*93s~V z?ud^HUMiL`fPKoyMEH2NZyN@Xkki#SdK`Zy_i>OUV>WfYgw`&`oUT*SBl9E1Hg2Ds zto1T@DOb!Eg(~PTe_KZffM_nuKt4nNmUCbT1O;;R^IU^SQ-!;KH#tr`7nczjy2Bb1 zobgi{6E6qi!JDSB-CYTYD+FN7hFdk|zok7vfh}iY74wJE`1Ym4hWH2$X&|^@)*LLybU9^ zGfxAEXKVsr4-j22h>R27u=`2kFLU|l3?&Y0`ff1*GHVI@Htt^}j(1uO+Vf|^s$~LH zkwND&DoEDXm*+Q*_mL-udl!t8V;r9J5lPU4bo}dV)ih>_xN#zeDvI#GK0AZ_Zv!l7 zgG>QJ3wNav->T+;p6~u@2wF~u-{w{A4+4dtVsL#QjqVa%PorUz zlR4f1_f3`~?QVrax>ytkxF~@$wq3_-edPf4<8xLs8&mQT;p;0W>L#yQI|zWqp2x8n zVpYyWfP!Mq5mmGF6hk(PCgmR+ONpdj-`B%0jDAw|1#0|BW3k=|kubkQDDcKsy;8cy zpxm&yRJ%^j1lYjDC#(OMtr1NyTn{)#ynwMHDsu*d@d{))P80O=CYWxDk7tRhC9s9) zA5E{~D=CA+FT83nw9+AqX0UcIInK7^6}8(57EttuRpsOEV0Wa62w7bXsW&1>mRqcD zP8+(eZkj0L+jOZndK|qU*(%Q)8kAyU2+7VxRZGbNPVbS2n4Dt`kiCOB*1bFQ5DxQI zQ&S^&r59YJRB1>;N=lbS_0+9ie;W;G#0Z$&wPth!U%15<;-z7Yx{DtK{0j*K7Q`5+ zk{HY}mdy=^RS8$G>+Bg96+NYln|2rI?a^QtqWH}EB%kjK(?c(&MA69paU7nbxg%e< z;uuXRNtKG?P<;O_-UmIQmtG0h;Yi?&ZKUEi|AEEVA12;vR_>c+UW`TYy@JE9bN4G+ zM-WRh5trc$NX?;xt5F2Zs7Y`dQsR8_rKoI-!n$ zE`?=Y9j0&peaTsi(QX5T72vH#q6tSu4_D``9;O@i%?%}{5hl~y?1JRi!X;$|LEl*& zh`KhrGg>ELFe`x%DCAYX=$IkR{-|0=U7M29zq_ZhWC@=PTy7q_WrFQry^r;!SNeyB zw9ZhbXByNvc~+g2O$+;GgLayiHPlpFk4raVc{bF7MhLuwS2+q1cnn{6`!Aw+SWQ0W zF&_W4O#$-Z$$Sp`7t;^XWvIcE3+uUH_H-K0F&o1P5wq9^r6JCE#+ZHgEed*DR||%< zwf1+07Qhq4RGYP9uHd9G<^CM$y74LMMB~GlXNur{%K}!iSP(d-Q6YRo`+2!5^ds5IBbgt zOCV8rYg~BydRexyb?vV0%s{f}!rUHv1sJ|rU z@9m5D=e0}!rJ?LAnN7tBENks0ut`#_%c^QG=D`U2H*k0J|$8>a~fl` z61ihzjCMl9wr}GRCw7kA80|l_mF%3lympTrV0)VBHGa5t>SD6cEs>;ctu1VILwN2> zhG{K}=^{V=$s$!4D1Ra1%*Vu%vbxl_R%iqlVT*0wJhj)cyK{VquKb>!1A~k!HM0XD zlxV(x`H@dSyjOBh(<+ndJQ_5usNri!gTtgdL@TKCkDgb8%rcWgRxN0`Jj-`ip;qQa z)vKG1Y4!COxm(q@mV7_@{EyEltmuqtBd0?Vu^uyZ`RSEKF#DX0 zR?p&>y63wmS?vYr3jtE-tABIskqU*kEhT^xb53yN)p!?y8qf+W)4GL@0R)0uo}Qz8A>Z7Uio_I?qC8?3ki7N#9?KZjS3AomQ_TXc;{Uz8 zxLatf)$c`#9B6RxdW1hKK81Igg|39{5$oUcr7I_~iwyPn?UEku;@aoZ=vu$YoFT5d zklVy~OY>1=&?u36Jo__#z3$K515SL!=W;O-X)^hObZ!o8O;-mH(%PEGVJjL!s6`*B znSyBBbAT=Byxy;pz-i;Qk8ClBETxM_Aq94Xa3hdf+UEn?atPX?g(cQf3>HGYV!+=|?f9XcNC`=%O z$J>wl_b#IB`RDXX`9Covq@BqrP|f+_>>tn*KIS|6BYI02IL!E5EnKR|18I?QHuBed zl*6Qcu^FL5hC-h^0#xY7TW-B44&pA-LSB7t;Y`Hes04&d99^nkcD=*(+x#9KGV8!U z-8k^m`@4gg=wtZxe_bRj2Xrz;4y29jMzX{sflzVbKlRbnQvV-WZyguK8~%F_E!~ZT zNGRPQse}lUiimV~NaxTXUD743sB}m-BHhv@DIwkLbMyT@=XuWSoPQQ}cV>5X=AJvQ z>wSGb28)RgVL9&H#w%7cW*uDedWTWYLZ33$XWQk-Ck)ffO}0icyQ-e1$%wn387+6f z+(W%gr1(E)NwPNU2Gs`*d4(hQkugR08X|W0N+VjM9YhnDb=P#@bX?f$zWQ{WcY`9n zv4bs?k}j6)>?z9QGvYi<%i>(WmheOctZrZ&ylOh5(O^%ow2`634({fclSHre{YDOZ zW!f@I%%Fg-@dNua&6fB)%R9&L8`?W%<$IYQAMo)JgT@=DP6Qf5l0*)> z2iBYI{3Ku2yG2bYK8>o_?Y{5X6XYWIG)IqrZ zSM4u_;`H^szFBD-nvZ=@L8`w+d*~}5JbA)J&wyK|AK93#eW}J{R7%b;d^25>bG*Ob6c*4jv^Z6tJ&Eom_!rHF zS4$C)?X+LF!c8X1k5{(n0K0#$McB}K-V>f7XgemXmNmS4uqQ-wT4l3+Cae}f z+vD{sjyN3!a=4@^{#z2L97gLPDZnjTbee9uSx(t-j~-59$b8>8^i|;8+~#$2_7t;XS{Xv*kD` zCH(|fdTy1GuAZRn{3RKFas5v=?Xj%s(<1lpyH4<`QPpYXfllP)ry7-uV3mQbqR^+> zX(9Vwl%S6U4p*ZCs|Pauk!sYy0U=Dou;jI!%OiI&+T&x^vBhV`#-Zc6g;|;!9eIat(*cKQ`B6j;u+pNK`0h1PG z)82dLocqe?)s`4ip2S=1w-AIR9aD-zDlV@&;)L4Mpty8gBi+brpt4Ca6eaGmN%ZRZ zS)EKhDjSv8Hi@y7vZOc|ciM;;5g1H*AKayqJcK zsc#Vro1|rU3GC0vzyhv7JstEwCYQNeKY2}f{sy+sEEyt2q(}l0Fz?H)BB(QB-?T4j z8F(a1JMratFB04y#K1X)h3L4rxIcgWQopX&Vh1#P!i$euWgrvkOXon&rPB%*W&4H$ z#>4V37!>}Y16Kr8sI#m4^c@|iTy@Iq2^H_kS*uYwJqHJ_tZZLwjk!=-db(ldw83r# zvMT)8~I@AoZtWJ*WMG7668@A_{~5ECo>{6eKc-)7ORLrGiX zL3MD1EuWL)L&j&GH_4==hOmmZ_P>)_?E^l|6=3z@L$atkHMOY`1R1U@INS1tFT{2@e)#AR3k zKRa1pPN}3Kh)7-Cf7dXNS2`7Oe(wH|xq?etNl8gYMJ2|W`bDG_e9+ze8-wI zP|PXoBI2x)2;<)jutRCS-I2KQ&qlN@?EkiN7oY&>Ukyr(oE%aqLVY-Ue9e2NaFnV4dJls565U%?X{{l_51beWCF_Clr{ z6>&u7v;9>%$_(dR6tM;NTp@xp5FMSxWSOgY9ROXcyPZuS^S*iV%_b_Wrk9S<*l(&O z>RvMage z)^x{*iqV2`WQ4o9ETW%E{=nt=bCn*72(*Y$ z#~Yy>B*vlZ9B~8ID%3|L9{BN}%%XA7L>Y6el|)v-fg z%2;g)KbcB8C2TzQb&UWkgNG82_0mpQ!6RWzqdaazDm^HXau|Clq_95N7Km|>x$iAM z`WK!e)i)($*P`E2yYV;*7^81F{Kckp^6U{OC-WO!AA!5j4CMYNPCmuDe%{XJH$B;X z+l5BTuCA`2f~^M|sw=vX0&*Jt!edV8C*~aV(3N{i@=ptH3e<`(!?fc+r2mi;Me0Fb zw-+G+St-j;FZGPLpV&Dj;*&g+*DeZJ+_2&OSmf45{PvZTyAL$C^x){G!PooqO7iBx zC{jK~(i6;C{ZDq1n*K}^{-3#HXxe?WTz{YQUr#3GSMHkl9-Q3)a zO`4sVL7&le0bHhnkx}j|qRuY|r5WG9b6R#YHR;`PnC+v^almmsH1?sjlj|M#JudS}1yz;#==JVM6JCY)<-*|crLhDeA z(HF|GQ+8jMY~cpgUOO&d7;JKfWs5jZP5D23TR#@eCp9Q@fDYY{^CJF|2V>*SpSoCz zSPgNWhX<_vc7K;S?G_RaBIf}tbV+6p+x4@|;9C_QND`MMGr0-H@Mi44)7al7;x~Xp z4N?0M!?VO%3F!2=#*J^4PBaF+(Y82*!ltOr{RS5ppG(3{QB`xx23IIjtctu-@r`v} zJY&8Bswj<9r&L-9l*HQ~_(Db3&;s$mdPa`^iueDt*z=2ZE!;rD)jT5A6&vbntgaUbg=agcp z=c>;-J;;o58-6U#q>Yr1Aj&tzY~ir^`rqxXZL5o7V4u}XFwA{KOfIjNM(iWL+e#>< zJcw>NE5y_O$RJiW_Z(UR5khszq!!p_+ceGR>BR-zPP;v9!@T&8ki}{ruRBixb2Jx$ zwNQFVkm70VkgEJ|5(6@K^Kd125VByWVvOzJA8$ zG2)H{S&K+{HOpE%UElC9Z)zjZTiE_tA6=XbQxYxH@p-^Y_g~9QO`*YU_tVn35`CGK z@N!B_7NL~)znPTJ)RzCEAfK(t;V4F;x;MS_n`be53c}TGG^9~BFUMtR=<5Uo)trEI z;9?Muu@~Ld4mMV1ny9EK6^Jzd>K+a#E@tHy5>ia%2Gvtx(a~}`IvGIqp-S-XFe8)r zxRG+<17v7zqK)SVVFyt{TTIK%+fdG;a~H20C#hVu(B9SRbiBC*lsUcpCXhNdZ-)R7 zo>Yw0U#Fo*NRvR#gL9Bhl;dSAeyxk=XfT#A%#^m2-7k3cH2QlV65@WXH4y!4PvzF; zhYDYbcCn8GWW!R)uCwf+-1AoXQ`^lWQ5Xq&GFwY8I1~2A;&e@)M99%7&GOUwIyTdI z5K@i;ia|Ic%%Y0_Bg&RPUDF?MB8-UqP6wn^md=u}|N5UlG*GHxK7^n*$#@zq%XH-z z$T*`xZXj>bzCBT*P#5xjYSApBZV?Cu{{%0*?v?t4Yf3&>39W9#$PXl?mCeEvHlN$h zFILN!ve2|@Y*HUrLTVt2|G3NGF>hOW520&=e>A2wU^-HoE$WZ2Cw|>x%7bJGXcTu| zy=`Wd!I>YzNCEsEe<1x5s41^2fS+rSG;x_sCmx=XLNQSFh=+%VRnn8+Mk&pJgZw3i z^^cnRks~1BmqvTblK>0w`9ZDOMC@G|SupGZWsw~vi!<|DsBm|NUWc}}udu`srCw1;4Pdpmwj*@Wd(!VIB zQZ(9dat-)@d)+WZ8~$w~=5REljK}h+2ings7^uORd1zB}k5f5JCOTFw;P+$>1K-ku zm$K8?=Ck!~{rNen3;DHWce!~iA1vwy-ai?_d`~Qg{XH`KQ7Xsm*BDGFmPQ=uP500^ zdkD$R!>wk4N*D{zKEiB<1SD)H`@ev1lGYIUw}&GB%;S8VpTgX zp6l;Plca)(i;_}*8)`O&pc zN$@xnV=Hjp7Qfdt{Nng{C2vJ-?d#LYEcTuEyGDoCu*l8l&)+9awzr;pH@b1Hpp2Ej zuQK->m3GhgmRGp%SYrhK&loSn5M&8jO~4vnDEfxPRMb?e!f$9b7^#hu%qNkJZ&w?V ziosAfzo*875P7gxAY!pUzTjO@<>raZ9NEoDf#GM-?5Lb)rbh7R^83xG@6E}jE{{~*S-=B zBqK#K;8A%hjG2hT$SFN%I6xDLXDmAPzcyt4=|71ML@Bc#kjM+2U($$^n5s-_vHN%P^QB5!-8afCy$ z-=;{7Xx!=>rtU$8!rrCdvb-;5j*@1xKqP;PE&*fB!xjE8Y%5T?be zR!$~Y1yOu5l7cWAB<1;Ahz>s(XeCw!oWhjbbu%>knEFRV;G4R&$|)Or7E68z0>Ie< zZ5P2i?l^J6sIx9lWv=k_i*toZe`5C(^IJmZkVr!~RMEM;fU-^!BmBkF8KxZi&= z$-!Pt$(9#Gk9r<4RFOpHb~%Fhw)<8=GKsORt?f-WTs4j_REW0Ue8mYJAZzuZHztB< ziViE7#lSbSi}}JSt2U_0LU z@`(tpbYLuGN%v@t$lOb7+>`F9GEm9BUo0Gry2%grNNf>J5B?~JJ^k8|1~M1{3bE`N zBk=P3AN;9Ey}Pb?O-(+-Jl{6)Oz5KJxM*g=YTtF>{4CTo*zj)yANiYo0iAj*Am+t9 z^f;EFXk_OZL*q49(ZAOBj2`y2zXQ8?HBnIN%heij1-q466u=+wt9)3KZYfs(JKV(( z1YuA$er&>%&cCWAW;l(3Si)l8is3Dr`_7T1uJ(L8gX`dka|S&KT-N+(4}MRz`<{MM z#j9;(1``7=5rRz=lW=9z@6*O;gIXAL#=&`n#g;VQO4!?ONGHW|k(lQe^Z%&+A^S=F z{5MbizeBphG=obP*|h`zJ7F8@l-l+meVp9-1SR&)p_Ty{0h>&IeH*kO_k=9kl?3bQ z@2MxFb()uX1Lgvp|MPhnLsTPHVm|>pHEN6|p)HRpK+8qc^+@so8jl79>DMlBSvI8} z0F}TOXO>^BuNW&SXoVyn=$hQVX-Brah8x@z&gjY|2ahSB*0kSi51&16Q}NU{_%1+_ z71fXpYbj7?{hjUSr(G^gzn7ca8C)l9u%nezO}e>D+T$$|i!Wh77Wh<>Ch~;TF(^J3 zI-Go$b}f1Dj+mXFx6e3nDl(H-S0`G45k3mm%k9DWV0{At{r+Fcis`6H%e?I<2_uY?TVQqJkfIZ+R+FQBkSt>JEq{J(Z?6%}01JkJgd# zSlCKfTeXvQrYw3gRLg}_MnJ3GMIc!|L<%=P+v?1J?fnau-e`1gMU z0FM_w=fHXJu}CfJg`K50Nc?Wy3jQ?)zRllN8j@3THOli2J`8nk48+6z)t$?>ZO!Y+ z62u1%64_tt1!9zX`H>*s>kZy5co%<>>mlS&KjMEfYn^g~|Gi#7#S<}9&nrvCCBDEs z-}1`GKUT5Dwca#AYT>PP5Op{jQ8posxoJB|(RCQq`mtOC3F^7}QdYREV0q*87N2br zNp&LZk@5xMhtm|t*ZnX#5=5qp<9bRPH^~*=fG*fV4LS7R*t?&&n#mCe=(CQWy9@65 z{(lr>mczUYs-vUSdtL)xB)rh`+UnQ*hMN@~NL95cO-=MyXC-9vGB*w|(ujkg()MQKNg-Ag8 zg@w5V1!!`4grBpBwW!Y|-E+@cMsiz_@Akki#;kOd!VkR z6_%7lw$9w|b2cwulgMxMbb0=~Ptk3K5|Tvw*9077E-E(> zI0~`;P4qmIJoPV%)XM8x!c0dRy_*S@IL|Q?F_fkKJcDlUX9Pc0kgB{L&=A zE<3wJO-Q^mmwDeV-bVT#U6?7HQXxaDQDaCDc?QctcdwD<&Hb^dNB^DdxA9FOGAESW z3*0DBEM;c6dQa%+<=aB)kxkN}E0|n|^j}wf3Z?Xa#HcXHUwBi0khqJTBf3pd0}oOvnH%?zepq_#s}XnXg--W<&o=>c5bg*o(QSXq6Z z6kyaQ=~RlF9I^dunU{16GqJalpOAU0*-LxABD!TWL~17CyN~!-25qS+jMgJwXytqX zo{jEvCD|PFyg?*iKj0PuByrA}IBq3J=-2P^T%LA{<S77!R{5T`gfI&9 z@5I>vKvs2Nj7s@S9pAkyWIv%G^lVgk{gOZAyRrT1Aaa1c#AT#2PUOXub(+6%e@oV| zF=9YIyDbw9Rkvrs>~apt;N&$-`|kkb9m2!-(0@S7v&CsV>uB^U(*!)rV;cH_0~{)w zLgq{^MC~fP?`ser@(3`{rDA&20X!B03}nq!(*8u?rYK=4DkU2XPWoxbZz1JJI(vl%2~ z!}};3ho9=|QbY31}{ z)lox@&n{b%7A=7&^c&oZuJo=NPcfU%KaH!pOQKHl0Er;EI){7kK`J*G6jUk94GT$k zdE|A-=}2#}J(TP({jQ>dyiR~`7KV?Y*tYK*UWssx{b#s?Jn%@OMxYa`aufczx5xMm zC*Gw^`0rOtoXY)=G0lBDyHDxH{&wxIuKWfNlI4oEie!W-MSQoR&TVp>O)sT43;MN<^&{6Ei6@U|p15Xr z4b>!BeGy^0!RmF+=|*Xiyl6F3QfLYId}}@cVTscouC@oL-sgxG2_=33$j#m$0PjEZ zkDEsryvjx@AM7mq3z)c@ZX>XGa$$b(r4%750N07EaY9laXKL5;rvWD3>{-{)jM&Z) znr&9)9k~glVfJgtRTq3-5mJZd32K(SuGi=0P~$Z$G)YtC=HS_J{d)XJHxu0V^HMq$ zND1-#@~6o39RE_uvysO4sob-dpH`|sOQcswi6=ApF2Rmu55+PHxb=T|+PZi70*B03 zy-)8(gST0{C_GJD=Zkx~tVcQ&4p+QGXaEa4Or%t*Fkq#-j1EXbD2(s^a^TYh~j~-!y0!j!f8pF&Rxd(_iFhoEv#tJ|o9o6B_J78h^kIEYI@WKY7Ut{w)AfrK)s;VZW&YxlRCwMwAeDCGFvKhyYQ?A#Qrp70 zEhVKWZGEF@3bXbnzu3U^Ht-^bz@@kwE9SV>*dP6#Zbk!XJdC+pcaa)6X)oXl={z8IFgfJ^r{i7JhJtVH_eYVO4VOr%y49lDjt#hOs>R z9|3$8h%Dtqg}rsSK6mV@Xj+GTgiFpaPt(pY=Awg}OI9Du*t(1kOgP5!PuL&L8-{;>>94T2arty;Lk^}9x)rx!g`ZA60zx9LU}Cy7N*y@yG+ZS} zu)3fRGAP#yshWSz>KIXoo;m+>`>#xza^sRBQD=QA|2&1354h5szE)1Z^h>!#Y1EpO zoI?V1u5yM#G;TdlWVbuHC_xF%$X3KLlO#8%?VC5`z6}Weo3`OmcS@$+U%!5p4d_05 zNe&f%|4wGX98Q%F7Z$!4Fr@~QZ&g*l_NV2?o5Ra05EL97%*x8@H)4@kGgg6v>6gpD zeUy&|fq|Ojd*k7YyAtbwO3&=!@_pI1w@qM&iwf^2lb2EUk`Ly!{`MKyfqYJIs{CzG zk*DCw6gli~?mQc-Ur8r_d(2YJ)bak03jEY}z*j5}o(<90zeda2o(=<>qf$|qFn7-C zabxXo^tXODKRdfRgij}wcRXDs7lu-il5h=&bQ)-i(v^cIB*9(%`GWXS)|r#pbDm6} zYGSs<%)XtAQg65KQZC9unXOkMeEjfWMqdP0sKxeZVU07TsvZI#oLu2aU37Zk2DOq} zN?5`3U@j|%SdlLN__M`{AX`n|)#s>hwVH;`b-}dEqR*ti>n`|^)GW-XMFbyR1lR%wvVXHc4ezcKuCQqY#vgG7189^Ts7)^nAl&AevbUHCHV{7JElra1ZLyN zo!*bIe0GsNPb1pdf5oQx>{_^1vvrGJyTTCVO$})e<8LOj5bj6M>MzWA z(mUUO5cdsfSTuhL)@;9g`exqMSFIU6On|?&yM1q{0(n{on#=`X|gnh>$ORZ zIqlD_aW35JZbAa*XK}n*wLYCIoI8E>76YWp^1qtaWs*`3<(a-X%IrXj&OCq>8KJJy zd&Oi>w1pk+<)x%L2P^&706PKetCEFQ)=uQuO{m#yX%M32JEnx!5i1M_dax9 z^FPGscw%8c9+v`yc6s!%Ze#k2GVwB#Jo9ZfcO(lO;|C+pysXN&B~+-qT8hvg)$>?9 zRqVV8>A;SbJoBOvKL%sBlwOrEab)0eZue}s#q=kf+H5M5dyj4kJtg7}k?)8V_+lDF zPO<0JLDjV^%>HRiJ%*&hEb37B6fb_4SZmR~1)+LV#xsJG4h6^+V8qdvHh+nfUwa!1 zCg31$lJCn|^>y>hu`>JqB^`g~tq|3YXs@GQodW|8RTQXh`;tf>yseQS>urN#pm94| zP~*$`KP*6e;auTRI&I9|vRrdajSGzbjfwDi<4Q{UfLRy+xHeF3#sL$C&<>=CF65Y= zyi_EHsUnMSbX3oDbu-P@W9IG1`_1@zdkL==EiUG=B~NdD4jtG*DJ9=-=V!J3(tGJ-#3>(r<-#-Y8`-FDW`Fs51%g;ws3yAV6^r+RHjnSu{iQl_7bGF~$I2CK01 zIq}l3k?57mj!zxg&<%BENh!~-o(!{Q6I0VDIQ&BTy&R2e^7PiK}vw=CSN&wtKC6eJzusD28FmGQq3DI3PVrb<&$=Nlb8jE_%nI zKuavXke@PznouYMqmUSsQ(lA@hC%cpyu};epR?_;m9hT=!AT864Mv&U%$*@7TzwE08wL;-`jYzvb-J$=miTa zt9GFff;_7^-v+IjgpW+O_a$j9Y)O-6XS+_=DNTLuu)G*s9UWD~dV15nq)eh&hqO+(oQ_8;dd( z2fds*aoZY+!|_*NUmyTYvb3LQvowW;pbL)aBO9F#fKIZrR~rS~2E4qy2G!aEe=!+{ z8ZGSclTw&jSQte_D9tKU%lc74D&(Qa+s5DaVBTCIT{T)Xys@yb5Dh#V1}gMfL7wdA z;2`rW{abCg%ml1anXx+(AtWQZq=`3~^eAS%k+GkY4*Ew?wLM!Bf+Tz`l)kEPVAwaR*KfKQD^xapO?pj-J43KTlwmyhj%BBijT?xo&6*VHyiqKwSIJXRDitsF&y=}cAfCeOm*Exme&*;j<&cyVE6bvYktu$u1Wt5hD*?Li#X|9)| zyseabPMOY-8Ki!DDr#78b$hjsjZMz^P`QYBzXj1upFQc(9)v0ErgzO|U$1!f2|kn0 z)z{Vi=KdAfWvFXvh6Ds4ce!#VD~3zcI@NWzF*32SDW>gB+tn(XN|{wsZs?f3dXvn1 zMRzxYGaE>g?f37Ue_FJjN1n%SX>Tv@<<-#c981lpO+S^K&aEv~T_q^_H14mpsf0MZ zbJY$)AE^GlD!$wsG`G&~xplEHAK@&8U=G@YGe4w&DEGH#In!n5SWo->{)CYH1!)0W zE{b5>2zWvwV*?HeUv@F2sBFC^-X?Qb>93?@uy0OIX1sw z(u^_ZAd-#QZ|FCaaXy>X3i7^|6sx9uNAyf<{cmCy-lL2nE#VALd!cTbe~$yHd^(;9 z{JSFicyc!`vzbzKE5EZDJ(My19Hjq?AxY=-JMX&f3%1+gi126I)$Y#{r)FY;nc^>a z9am&bOiZ{1=plp2kB`)eCsnVXib6HhW$y!5_q!5)?jEtAKnpWINK8yjKs_-hKOYqx zb)cw)T;;){mYZfydHJ{=aKJu14EQDw`n$u!!~F73%B12t-|M#@>$uIkod0^$j0`I|Dh2sh ze|782E&t+E-PSioono+8>3vF`mELn>H&Q3tUm&253fV>0Ya2FO7zSPEpP?;J*Io5C zT~5afMzK_hy|8swQycypsPV*0%xCzov1#9qqF-+A@$gpeLvgB@#eFz%sOaSjU(fD` z$n<}-EZ*HdoGLuve>?Q$_A)e$wQ8=zfSa{YFDco-cp8Q2xP0@~I6rZ>0e8;VuS$jz zW!r7)y1E=7l9vFM{vd4pVrbf``p)w%K`9ZKMBfFHYicw_4^owwKV#rvk9~;$>yXoL zM~;PNnrfYYFqG~KvyOX@JU$8mg*+d0^cDY1lTwqp#oO*HkL`H$;pY6e)<5ta#CeI6 zvk~K?uXPs)2#FZNpGpSp*#7nR6d~B zTwhVf+E$JcWf3P*!Hl85fpE!k2nQQe|@rC=9ONsfi3kbWF#EKh#)Cr zw}05lb76)Gk+FU;JF~+Zq>8yf`$O8Mim-QNMinnWFhjImAwIU@HHL9#kpF)+6aAKe0dA~*BFy-B0Lv&U#RIkR!fx0Bhoj3V zN=!}XEZbKd0_MlOoxCkn#9*0>Kbd14vddhj!V)wyy@^MHdNb^ zh;p%oN$xNUlI#mtn1^&Y=8QjnJqHSwGnAAgQc66z#UzKfRk@49>+ zJ8$G%=+)8t2>&$Bnr3Y!g*uo_QGE{y=>M&6R{6W$=ecUAF$U?no&6ckdDj~ItttEv zv^$0aY<>4yD%YLhN<~1`N_5r4f0suG3@Kozj>$JAsYnz5lm7eP_>bcs%bqXQNYaJXt`^~rqK-Z7i~e;{k8wOhp>-K6(4=|pA*AG(Z_Fxp64)ljVnV;9WN2ak$DMRFXdgQhY%IyCX|@dmZCS0CxYSj51| zY3B#(w~I&U?XRir#H}sR`z?~_M-CZ5=GgE9lOS-B+7B7qkg~PMJ@RE+&ME8|JmpaD z9e9lyoVEo7YnVykg75U;3i$K<3X15kxGp9m_fktfbT83uBwK^S!2u_mZgTyI{z;+~3>fn{aU%zRb}KQkQNRm`mKBY@`o zF?B-A?bm7GsnSvodI$U`#PDxQ?oR4p#`Hu$KzRbc-<{ymzlOhB8 zMOe(j&%OhWB-{W&&Loj7$ig6f4?#(8nL(;&f4<61WkITFUwViT8+XCe9YVHhhE)5T zAJR=>%^ZjURcSEO}#_u_xi@h+d9l z9n%sq%|8y_3~L+;*O3(B#P4P${{Dj1L;}~9b&6>r{6=@SI{t6bHzqt4HY?G08262X zL4c~E(qov1qu7a7Mpq<9UhK5GEE`ZT9UP^YQ$_QNc!@9sam!W?NlCcv(F|t7PlPrp z*tFlh8=09A-Ao}Hu1Ket#(Ay{s!#)ct~&Rd!Fuw?!p6Y~`8~=g^eiB@#^-F;uq!w^ zI}19~dqrc9UV11MnHH`(Iy$-oS-;mU^lw2Z2uTJ-PGYUXTie2_wJa?p?Ww@(%1S;j z{WlznUw1BX^sd?aySt_mXs|$N#}DsMV|0CSDiJiIU`#EN`Ncc({x%s?-t#7qow zLUDnahFk9Xy`ThV>#lz5y z8|ydH;!m_-)841r?WMsSipj1b@9L{`XY35I*>zv|tEZ{A6Sk{q6Q>1AVJbM- zurNCkJ&9gBkF`;(FtzlBBhAF(ORQP z--?<)^s;>HLzBjVsAU~HSFJzNhjA`#sZENIPTmXnO_ePXC($aiq!wkY+Jdm)$xuFy z-d}T>iV!K`D)hQRZ$5ABX#X&CGQR&UtGl%%UE!*ox5Aa*An2AQ^NJU%b9&Ml8vJXi zd3sd1LqurcR+arOa2KxMMP!Rseq2QSZPYBdA=H1B+RQYbcZEQNe0^FzY_xGIbtJ#i z;96TEV-q3kURL{Z%Dp)$fd!fU;vgnO7h!u*yN~kE#I4AVM`t;;_!>bz9XeAh8&U`_ zj$Fo_XM59lw7;hR{(b|Bbu-yqC~}H-)~^{^9C(d%6OCZuJA!3K9^XGJ#SQv+I#eW* zXeoYTx)+WZTsR>7fye!rR(ud)ENB2IEXMlBnj=cN2abrei(Ivk$gfP)(gWYu@_*$2 zru8{i8!(QIib1P`+|wZ^Pp^*&%gUZwei3MOi7wUrEb%8SqX`D}I+0S=a}=Y`^rLK= ze`;489Qdg+P{F1@e`;@Qg_k*{bIXo*1jR++w=BlY?xHUhwm)4%!0VZA54e)2CPwe6 z{p~A$N$%1>d->T2>CS`-I^TZN;;F6N37>b+$@o=UPd&CRL^914C_$A@wBMc>vzpB4 z6fJ6}k|v;g-L(IFKhs8{xOObyj}KJF%N9fJC93@Q06s0Ti8+5^&%%8?T|I~3Ht|k; znIc8LtiKA8mv(e z65YoOf!}_qzn#6myJ3?aSZRxAs>>0T0vd}<1jV||J1QtRH4b&m^y9mnZz}b8m!J9G zMPlO3N77Gw`^&7Z+P(PzN)s8aKN~-)`u&5UL=~LBAMJcItBHZ;pzPJ78{=anxDh7Dz)Lq_o9PbPI!%) z<1!1p_u;Z59|)|7g6&PrKeX&_3H(8DSqlgXhC`AWLT}y{%HyciI+^rJi5AC z{CMLqyg2aK4X~CAw{Oh|5Ogoz9a*0_=6p-O z%AW5)S=7$=((J#nUXS>D>qRZ3FBFz8hDzb%TyBPheu)p!1R<;ZY znaBU4vNEp)y=aeqnqm5Um?a$RM1>U!xQ>uC&4^z9P-62Dc(JaiembD`U~cjVsbwIm z2z)-u)8KQk-(0$QLY&daXpn-SB&aqRkbeiApH+OGbNUBCOtM{=fBgi_q#hs1GK-66 z-rn9C?rLwd^bp~N67#R!9PFEFTzI56tK^v2J!U7_7jdUI%nq!Q1bsei*`Bg_*F@R; z-f3L_Tx7Yo;(OdH7U%JTpmQ-nw8J=)J}knI&1D$zx<+0}P+Jo-!2Mf;Uy?8oliIGx34)M`k&v=Y2&sm|?LV}8Pj;+NN>?WpHT zxPVE#<+WnDe*I74*)5{M*P$fEV`A+*y86NGfyiNa1kxrZ`qsU3k^L6h(edj#PPPLo zYcJNo`4L~cfA{}L+f!D4+hTV{C!X}kpZf9v^TFSD8Rdq3r|7v#u-n_v>Yk@$1IH6T zLwY7spV`KoNxx%npAS7fG?=EDuQb|o{TL=hGuO47P{gOsuARpH#+^AlVu$`g(^|Ac zN@%no61Vwe)XvNi8#GDw^3x2%d=6%qO@xJUz|Tvpr)j*?WYqbp6t_(f|Ja+Os2z5m zo_M)}*PgSxgj=Hjtl=TsrOUtB2A}ue>f*%yp;$Q7`_+N3-<6Q~5JcRE;GFh)7#jwy?APZp#69sxyInaxwora%<;`;;_)u^-Le7?37C%J7AUvGY-KpNRTDgVZ_xXPWcL2Biav9tieEn=4*$3Q;@>6zD}{eN zA&d`~?QqOu^ z=)$)pJ3iOQ?rPc&y1hEPKX)}h-7y*WlHl8kimMOD$;88Su4M`L;LEEkM`0QkcMO;~K_d@2CD^2<_+`o!s&s~_pD&+7*S*W-I3a4G z&ykTI-+GW3GxivLN~f5r$L1drQwX+chWg8X_jb1b`r4Qfe(~y2I=6IcmZm^pNWFIB z8-2|5EVce*%h!DWnyPi*wkWb4JiJNJ)mQYPJS!k~l$*dYZQcq!i@)*24Mp~anHS5F zLVXYHS7!FFwWbh=XD#PK2bFJh2R~uZJ(yi9?6CUuen0?n_iwA$7GFckkJwf14qJ~% z((2?U+i*xgqvzu|IZ5iG>=-3h_+irs8gVodi@*)it-$Qys*kH(wpb>u@~z?C=TQpk z=iK_fqr`@?^%2`us@{6<#1*Sxx)BNImukBXWi=L9;(fPDj%&d>7ZYbc7rZekDe?Z~ zI};))z8d1IkV!MRc4D6P-ipS1aYV+Z;=5&}H-904INrr}nUXBqan!q6qwy8C=ln>< zc2dqdKO+79tKj2r$g>((YO5=%`eD7PgF!V-Dw2gtLt0+Mxh+o&eK-zI;Ioyg-yc3a z5RXHWk@*_n_u4P>zJyJHl)ed6B+HxYtt-K7N#);pzcqb;iM=RpkmxgN`~88aIka#F zBUGy+*=WYnA93OXOmot!tnaJ>lQs|pN49agPGnksmv~a!i1Fl! z!TiQUzNP=R8qjE=zyFdBq8oi3s(jf|jLI3utbf5rVv3R-IKAIyW8fBwXWsJg%X&}B z?uVfaG}+P)Ht{lcT5@<&S#f?|&L=NBoNp*G<16SS}ZnF`Y~IU`?(}vg^7i z4u>j_wMN_0FxIFI{eg4LzlWM!?`5!417yS7(k{_mfRyl_C!xX2?&8L71DsF6F#lI* zsp%j+Lybo_75;h-b6nQ8bTk_GXgOS+iMXG|xO?27JBsQ0$DfFECSPv&QurIh2D%}h z^WD5Ur}Y8+_2)W6jyUsd7Ot!)Ba$mR@35H<9>?}R$)(pjEIa4RO{}RRieCiA)Fe;5 z^QY1r%A1BM^H25djh9vSUQZ@xN9rY$uGN3tOc@)|*fyVq{V8J3bNg$6Gdksk@a%%2 zp&Ng@iyoVG#qR1PT~yjF^!_aSaYMr6jB(kjrUNC}A52k?8@%~wa)*tI3MHjn(tO5u zm4n&Dh`VH?ou&TlI!KP~xXyiXdZ~DW{bw+?za^FDpL`y_%!5}?XxJU{or2ACg|pa6 zTu%FH?kQFMhEsTd-G8SsE@y2ME9?4MuHXGcK2L&-33SrYuXBh#Q>#XtsV}LE|M`D7 zd&{6Wx~N?g0wE9x5+Jy10tA=f5Hz^ETX5F^4S_(g;KAM9gAeZR?(Xg~r}^Gnh)oRIKmr7-s0bsIJI=AAlc~jy=-ZXK52-m`P2X#czdX zLYWM0yf>tG62tu4F?%f3om^?RJ4$9UpGftjN8?5pzgm)BQes_f%V|14KmXm)D=5>` zOcS=?6Z*qW=96XT%3Kiid5rj{yY%@f~^vw!aM2Q8d7=Yq-7 zdT*B4@;Pka)8RVl)?e8YBF3de!sxt>t-1seLWv>ti>gN#k`8vxO0cW@bTS`@WDA z+c#@^;WS*S-=dbA4Rr6EYc`7^@qXX{s2C7*qE45iG~DT099xNmS+_l3Gnm8@n>>Xx zA+II{>eS$oZj1NCae&m=2_pRN{=Rg*4VWHB@%fXQKC{XA6aQm3J1XB5TI2fmZdimWlj^#Jc(}h&0Y`J z{_gJeP0wzTm3oHXn&Xzn5E~n^2ni(E4F0_9oSh;vaaHd30NguioHZ(UBXDYs^l35E zC&^5Nl=FV&%Oa2A5{zmyCUnpGWaj-L`@+FcF7mMVr`wH({z;F3eEhk@h3jRI?ux~U zYQB4)a}e3&Db6MB$`(LXI0Q#l-)jR(G^nNtT9G~vP+*{EP?_eibHtZJhl?YmXhCD2c-*YfwbjsK?O?*so@d-l zl}OS1Ufoh=l3%L6CB~MD+gAQ;+7>%cB&fGJ0|*&%6djhz}W4c@PXs1OYyUSMz?3r;{1G~zLOKerNACF>ld&X=n+VhF*aX#l=D5EF!e^V z?7*As?fK*Jx4kkjI*}k-qpP315~zHCRX+;R9=Fn=uWVFIEE}296-XGxx@{EoI2pzI z4txr*7UeJ@@eiq)k`k?R`wq3Gs~l6N?>cXi3ua&wCDHj3Ey5xA=qu!vRJD2 z6dCQcGNA&^ZfQx2bL?JLb1800jy5uFh)@2&5uABSs+cR8SlEo$mpoSW9FkaxvCT54?FxgGsG``SB*PIeC=`%+g4E!usBM6D0$UXjr zZELw+(jl&WkqbDW;kK*W0t+h37MUmY_xYXI#l>>DUFB+{zJdLI;uhm|}=drD^FwHlBwe)XS zzW%TkKUs;YQSR?j>T=7nmiy!x@L5?inR3^2ed*K7%;~lWe|Q@r1#H;VcnFn`n-rM! zHeE`@g}BjUpUWJmr39;2gXy?7bRgP4Crfo-uJFe|hKYM~kFY2#;lx`BM~0nsj(|Sv$Qq5ZWb^Dzce1VcI_^eXX7{RB;6)HG0l&J zFmGNH&~?JXw$6}b)4ew({qPkF{!tZ~PnKtxcaPKV7Z)jEp9_su84W02?$OvyeQ$~9 z8l+sC#s3{EUYf?@#$6Qgmks2G+_T?30+pe6wC~_w!M}oqxxO5x0yuv#!t{7P*mFlS zzN_ikb9zr4A?vc{OZ&qk=j|+r&Puej=Ku5ryNGZIpU9n^m%?(eQD#j<`&1fTJE1J_ z%K2=|K=3$a{=*n3R@~{bSIf>?TUeF&TtY;w0`xK9 zec*xOeV-V*-P3LHt({|9KOg^S_NVR;R0Swy=ml)G?|~&6T?VQL@2dm*1DXxs+MVBN zis`lJcH|S~h29gPB$Rj(U00^^g3H$Wp3B zqtaSDt%DWQ8SKs~;{E=$@`Aaj7QL`mON`-}to-Jnc4Tq9v5#?<(Y|Q16}$@ySAi_@ zTJ7&9Ody8eRR$2m;rmiVg}qa!?cbnu@aNxB-}@RQLaMiaGbXgG{Glxkd{Zu(V?+e< z!;(uCu+*J0<;T0E$mco~w)q&yiwV{LoKX{)&Welf)v?5IBaC@_sij$J(4MptQY)@= zqvy9{W-krfPdwzx1KaydHs=o6NX%b>uVD)cLV)1@(1cMSkhrD$31tfM1!pgDLrE&G zlJFzJR>R29njH6TVg0eAW8GN=>R%;Io!2R1HT|$2TJGo$9kQRw>&43<{XM5>)0QY;AjH?~IZ*_P-@eIkUXB8P)bHWmn z(VNg`od}Dk4~c&z#lm4G3k(w+l1S%+t0%Y>I3x`W4EjsOG)*#+_aAm+Ut^*M28OY0 z+Hr||p%8r%k!PHI-~~Mdc3j1sk0vT{k=lt*3Pdn~4aQ>wn5vn?rF&Y{GJ|gE;QGZs$b!dD0USnSjzJ z(9t38SV2+V{8hg}t6}XeO7P*8Rz-nLtCDrz>t7!p$`u0s$$r8X+7GxiY!8shd(;G9`&>PdoVfU~ly^V>VtO8%74@i^FTV7_}4M1Wc-`nTrtVz3)&K4WbPKYhZ((%Xsdt3O_4?MX3jR|od z3Zu^p&?r05L*9;@agD@btX|MiOuf}`t?P<&o*oGyF|)XMEx`p1|HZt*OoMi|IK|pJ zwsB9u*hk1moLNLOwl(8$yQl2=J49zw@t`lq!0|K8JFUe@kEN!-B($*^*k^Q{ABHx| zJja<8)Xz6+oF{jShd~V}V}R{97FYgahAsICLj3q4h3X@}q~I(rbA67$#O+f9YxDNX z+#jMsCtm5@zeB@~#rD08lxvffw`D<0AjrQIVA9&_L4%nz-7D53Q6~1iXlF~Hxkk=k z!9KZkL@P+yQw?%w`3LGumcT-qz~n)O=1UaRgD%qV6C>k_bMGqj4KT4XMtYUf>2!n; zGuU6u%N-OMYlwxO70`}g#KIrdHzd=XCT=m4sH~IG(7?Tigz#>_2b?NRw~u+u9!2(k zl~)|D4P@yhc`&*BhzZBtiEHbO+%&~dUaz%Uhf876iYU@rPL_Ieg*Ix)dVDcZJxhOh zAlLN#^0=bc2;TuD*QqE9Nj|@wh5?x3*H1lgz)l zyMH0L-Wi{o>N?x#xx1F^%*PH%OYQ4S48r>GVg1TO<7^At4Z7a7b1^nOO+A&akr&sH zE#SB<4SH-kL1zr6E?6?a+{$WFMNgaa5!rjV`A#~S_9R+L(K`2I?GM{FS3e7&jN3j` zGxK;~5l~mp$4Xw-YQ-)t-Oo7i_Man0fYZo;%{$L@j9FiP4W@5uO4*;wQS}ub zYp^~do8m<&7%4L(s{ABYzO(JUTTcNs60&M`C+Ws>5%6T>i9(amwmej19DgucV{I3&n2t z0pR0h9OQ|1rAF0(dbxMKwP*^O0c!WDP_4KuuaU~2Heb#bl38lsBnE<2Sx0D%);ohh z{vB!@tlj+2%y+p5clJMc_|w9tr&S^L@0l$`hn0N;;4pH#b_5XNR?p}m5__+o*-LaJ2ueNeTxA#(iz(?8bW;@CD!xfv(q!p;G^~NH%UVXhNl1GhcgynRK4Xv!0kDezTUC2e;X0@cH483oZY?xoR0r6-uMsH-yQ*t9FE$LG)?_kjFj9V*WZLsPaZ_ zVVg{3b*qqn9*Ow;a~WlRZnQ{lO@N)i!+KK_-gpULEvSy%d#r@RuX@ue9j8xU(%GMr z!X#%m7M8-SrBxmQRk8w9JYL_&GgZ#95YdLscxoiX_K1YUJ`3^)tzPU}wimyLKf4et zuZ{Mm+{k19pdy_BbTp@Y)3f6q!`=pcX0G$Q)@|A zJ*?@*z=)9R0BY{jD#!kDvs7`z5$acODC1&%c=8QF?A<+(_Q;9pgLHOhqp*VShSO4; zq;mBm8w{zQPy58?oLH&+wMD^C!gT}Ve@%18*$sP$FyS|_H;Y+CxleK7XSQb|Aw+Pp zFFtaQM34{c?oK<^L#FVb+u8d!1QzYz9=f}gN@krLqz6MB0ve?fM#`NPW02|^(S5{> z-os!$I{{;qXA@G6@li%Q1)2gWPi>gCY_i;rKkMF3)Hwtss!C=N`yQ@Y@BF(n4IlCl5%o+AYDU5rNQQ2WI*0DTwq6}T@DR_fS42P z{_*h#FlH@sCBNdpD`wnM9i;HgM{v9s`I#fz+>Px0rgqY^&Z#2CZ#>5}9rGFmiwdQU zPZ%`Z_wl&Uh94?VBUi-&j+W&*5v)E<0OBor!tQQXTN2&B0M?IF<Q@H3GhG3pDAH?|#bG zE-$B;AE{iH_5O&sUdzrQ_%df{jf(AgYsu|p7&rhTNn!-k!D)vkB^C zR;)ewW6Dlcs4lkt1kw687bh>X+52tkiam8YhajbcZ$h0fcbOIgm7Uf3|}1>z=T(iJXYMV;9btMy$%{Y@-4BAOCDeAbPW(XhdP(}+;FCq<0v@@{pAEtf#`hr0e6{GQlJhaivHri6Ig zwb4<)F5F^EJKf)giMTuFD3rq@^&M<3WOvs-9VR{e+2HWxUP6*W|D*}Fg|S!#L-QF1qPH=RX<%Y zHeZg%ubjl7!~^oQFQs1Iaq1Z>CNRC=;Gf%he9?SD-PWT4ntnT&HmZB*^O1i%4}sJ! zk|EsL?b;&O6mFA5`S2)!#$R3l-ZP81k~c?TRIY}s+el&V!?7>axdmUeZmB}Ejj zM9OL`O@1Q3f}+`%4)yWzjla$}?%Y*Fmf|4cCrVRG`usVh^}@@=gm3Am#QM-`#M+oi z1QMlX2^#8?Q{NnuN5$(~l=4qt{h6;i(UY93amYV!s}XuS3+v8cI)>t4qSi>GLm&vD zRuCZhq~E}CK)%7+GCj;OxS#fzAe$s(wU)$Z7|^3-G3#!2c7Eairw}i*_z748_+mRiQEL|~uQm^Af*dBt$%9qy1AlZ9_Oe=FFd{anoFZJNxzob&Zth7LH z`RTmSQ-dxI1pxy)dw8YcuNb6^#yi+Lfrr-(sXzkKur$IeSOgZ<-`AH+q`{Le&bu}+ zR2ThpihECB7~|_84&I!9q!e+ncKtZ5xgd)!K0%IjZ+EvC7`Mj^jjyo#_OGO2`YRWq zYCsN0lpv{(M<*u5zFZx@zsA+7HyWUQawKAn z!2htJV9>)h==h#RV@PH5IEw$maN$ETN$R(!owK#aQ`!(~t#}o*`o`?|P+{WW`o=~r z5cvdVllP*aqK+>uG3@HxbQyCw)MlY&!X;ZeI%McHAPUTEXUmV?eB50THV1fD%yw)u z*tSmY_<7P?_5oN2oiaHt!jN)Cj`VoOB36XG;2`Z}lf|3Ub$Urh=YZ@x)6rqbEKHzL zqyf7@wczKPTTdnlBnnr!D4tan(gX@kW*_C7E#t9?;9@(R@~hob$nXgvU+))hy3sJG)+ICBePBiGANJNwGBPwI1rT;%QE!} zVYQ(#dCLLj9QxrRGH`_HzwAIm3**SQAwk~QuO>ka+&h@KNLbj#E#X7kliZaJNOc+h z>T%A6c6-pH4d@Yx6U*~DA~#2F;0hr8W&6~Z5V>JIv?x6AW|!r-IVdPGVVbSfF<=(^ z?|$>H#;FUXan=^tV5XWmA;UkbbvrK04z7@1ls#mty+M2UGd#9?u}_{7)PtpV2)1a~ z2T@N|pkHjHGjEE5v~Lrx$49l>G%EC$MfM?1{d6c$Y`cj|X#0b=_z-9A#5S*8N3d6b zcgxFBY7zdd)>0E$Z1`279S)`Oa=v{7^6ZH%4Fz3z?ZlA6tc>*K_EROE6MpqxuBU9k$aH|f~pX?U5?$k*Agt+0n%wId<;m;eF32gx9G8%b)e!J-~>c98ulfM znJoAI;t>DF_E(%Hsz5O5XY~L~z2lKRB>+e5V+;w6vE!8l)6sguNpQfD@m)L-Vx$h; zGPqw>=XApLN{hD&2izM8jCdOEi?N?UzJRmv$6uL2eNboa zhX;2@JqGg+PnIi`m=%ak^<{sz%!Ww^?3^(%?V2BpTXkGhAT;vS0hQiQ_XacAK*4-> zd)+5-6Vq>7y;C~Ap~BNKMohsiCA~N7B;}EVmo;l$k5duH&nWY|48tzFzha8G3?Amc(L`RqAX(zq`9? zXG_B{M$4?w-{jN<-Bd(ON+dwKcBu@_h>Y&`OMZHPcx0?p6=RrEOn{j|g}((Jj=V0~ zca=#a`YwHJUWQ+{_exLppN`|xpUJpGikbsS-N!^4Le|oU=+I&y!R*vIu8dLa2W{f$ zG;#3y0jnuVvW=H0D{dBr(|u!$t3QG{8vf0kcwv>H@l&iZLzZPrenCOOorr~H*GIEf zFc|}kb_;51CO&7O<*dHo*I(drHXtW6Oq>+d--<;1%>L5fnncZueZl=TzmHSpZF4?! z_iLZkZ+=>BfNYT(^4ul{(}abWnN&Diq|jyS8}n5LtR4K-NMf3;5~eJaHn{)0gqU3w zs~m5Sg<9xePK2+;!7ZsqvGcFi(``EBS3s9QOCqz=TF!LKFd6#qAgt`GeSQ=d7O+P) z@ws`7kK)W;w%qb3WgNx{WeYbE_z59IRvK8fHlmmSErcR00+5Kvwy$lgb(U>}@a?U6 zzIS+dkMy|NKiB3MhYC6FR0ind!5q9Z{A{v(8qH#3_<1B4^Rq+Dz?Ky4?9z&T8%0er zfO>8hsmJ-v<5AtKBWWjWK~>^Qm#DNf#{JmW6E9{zeZ_1J7!-W=A)y!+kpXcX zB7iX#5v+ipa}7+uht=31%V02y7;yB!!Q6k~*M|9TuZvk>b9S{AX(2Q{R{*AQg$6T( zEDMe5qER=^?yG9X?YzxLfpYmgjMFGd_DLt}AHU~ajJVg+Y`hX?P_Jnx#6GO5Sn6`} zh!>v_rb8y;PXL*rQ+zrZ8OljrNqj;HB|y&G{`w4X}7=BG%8s%mUY)&jtEW6s%hZ)e;z)7CjY|5a=Da z@4RS52qjQ-x1DzuRtYAwMJ>%4T&_TU@{&U^n}GzY!Z3aD1D zL$>Q|eB<1;zzMg(?z4#!{~qL&e6nY_yGT`14p2g$U3Bo-kjSDopL;#f`QJx`P8zQJ ze-Osrfd4M=e|Pf#KDQ#wWDCUbin`x(m#LTo zoj5AFwn$fqn(!R>oW|I}zdrDQ?kndRZoC&W-MRu1?fRb=<@$g32>d^{diNa^Ik)wi zh{3ojYjYSZQ?c1yl6jjK?B@t-Yoi}rLn2e<9XSO7iEHCGkt`HE4a;ox(BEyF(LG1d zGuEy2#)ls(*s_z)_7if`tilJzxA|R0=V#e&+g*e}|!tD`<&o7Mv;|J1U60F+SPXgWg=v9YlYb#;mL z9@lX+Dhz*(>nbUAfGHc&r08J2x@;{jsBMb+6qPnu#6M%o@xls%fa+(oRhv4YOONIb z!@7+>JScbki_SAThL!(Db~f7HkUUCwlF0A_smjXAzh(2HK|ARA>EYMrwFISM@0kF; z7$Hk?ijI|HUIJeXnqI&YgVjv1uWj z6QEAx-6VMI3iFv z9Gl<45FLv!l0%2D_}(r0xSy7`^Ve+p(~$>|zyz|Ellu&8y;?o28WH0l-AsalRx6H= zASq1x-aAPZl~~*$5ilnoLH}&MtK$+Zi~3d&v?akr{aOO@yKeFAvmO%8MHmGFK{Y+E znsIM#8+aN1=lpP}7!UG7@2Q;`hrexadjM)M*m#)TY~5uw_G!gCCWMuX{5S>5#|m_g2P+ zu?A&<8tdBxP0c}t75m_(I~d;kq!sfIJ&BerpI;%}>z$IQT&9gAWEVjOU2UHKsO#y; zd3!^~|5?s_zCN6%&}Mi3dE4o06aYLzO-eKzO@m$vZq0|22*{e4Y{g5*+fVuQN%Qbg z8QXw8892PYh)zXRGZW6}8U}Hw6CgB1r;(W>LLc&&O=FnINZnxn06a=-H+?4y!C~l( z-f4^8fn7~3)9ZTanrGm`>va0)85Ogf?-?ziAjGRGv{eVcZF+qN6my^OZo1eCK`Nzf zX1@I=9KSGW9Ht+u_CWb?ZUd2anSrK-xW*SIQ?GGGH*OrkT_3>`%eFRuKBp~gMoXOy zhIC2Kc(UkR7?i^xAlErRy^CS2hxIw9;6IK8CigKcBEs?hC zbw5kVRkRUcUq}5(Q#H8m44|aQ24w^BXZk}$9*3UIV_L|2LvXLfbNyCQneEV0S#>k$ z*1PqD7;J}l@VWCaTv9|LuJGptfyEfWG7VskADV5`8A2locO2)kn;)30MmqrUlEsXa z5Mh1VREMy;3P3CK6WZH_-y$PpUi&^8Ys=*V(h1~+H!XxcE%X-KT8=jd=k+rD^&k%V z&J-%4!7iJ}YCx1X(HB{1F?nF_^;m|@ul&dU4h?tupX#lA?FN*kjI=@f^Hw~MqN+?u zo}y(!bndj$%i&bSaRXf@y4HZ-wDyDZm`&WLU)f!HRV=J?sY=qe(wkGE!X``cw7~kw z(MJABonc~V9HZ{3Xhm}ofzP-kRj_whZRm1*@5Pts80U*~2kfVpy+cqaSak(V>Q>@* zf1je00umK6n++2}uCL01cHFdIr0RHQxhPi_edMg}c7CRXdN_eKFf)^!yOH~23U3go zM1d?I-Iv}*4)Xt8Lm~G;z+cNgh74k%<7Xuk*Glpw(Rvdrl4oVw+UyE&C02(U>4WBB z?ww&K9bFkWnp|q2ryTKJD(`3Yn&2L9njBAo>qeS7{i#nT2{a=e{YAqQ+ACTS;bl*C zo$+ zQNI+~HprK*Ov1EMHKcMa`MrDr+BpFSE6ojudbjgdPi`KbyLsi07rRTYD_dJ}da8qQ zWin51dv{F3#d}L{mHBu9V-1 z#!<^;krh%twBwx}l#R~n&H0#8Ax+~9%7X#14vF5}-yruh25NQYad39(bds@7{X*5CAjP&CgDF!BFmCx`4X903 z9s~zkA21Q&xjcZ&@BK$L!jL^!#9zYyBR4-ZkUz&E2X!yE%;8dwWtn7p-TY*K%VK?7$YTs_XG8Cx>;FJ@N7kIgC07uS^eXi_uJ~ z=JR>?3fJgtZ*^r~vckHFX&2t@pMR%uEz@>~@!@~WyaP=-CXf~^bD)nQj5NC=`SDTd zP$8Y>-1|PZ!;-Dy+~${SK^qtD77ohJcg#}BK7>Woo_lUTPY76kjEky=UXE-6CA?|s zZ0%`j?g1^$&!3)7YnpL;Jx$L4^HAQv0i(sKw+$I(iI-&EmI^=5+YN*7*9iF8r^Y6ZAR zum4mv@=7s|{tJPa?Oz71+`|ivi6Xb{1y_3+Qv~ah604_cokeR2Eb25YV(R-PqJDc(|ed`%3%F9Eh=pg!R5v_~t#M=0Q=AgOhr0-)IxR7$CtyVbYM?n~qPH zb~k7SGYb+4>^IOz(ZS2}h3aaOwd&=VyYsngm0ZGl{PvEp+3R`^28>OodTTa}>S>bUntF4k$ZCI%I~M?bqMlbpdLU*1_H?G@ zc`AZSnja4wImjb{-%%R&>BhuLXvg{)1a=+m!$ej$Qb+#6lOCV!#mJGwz}ld0yqDM4 zhP4aeuf<+&P!Fak(bci?dx2*)`}$O-_H2xa2w)#v6eif)y&>6@Q3|DT2X=>qIq3o^03fGFi_#|ByGw<2+!LE3GZ9Gv z^Jo|D(&ZyQ74F}5j5{vi^xGlqYHF5Hw&9J@<}CfCIJwiCH@nA3YzYcxzQMz%tSR`S*qGXciFKwW@((_n z6Wr`>XjV(7i zYv6A7DLv?6Rj{|3D^9bQ5DdsS1+#mE{7Ka9Wn5(9nb%57dv|9z+@~_^qYN8TiYa>=jJsCg)sm(fQ>D4wKXP#fDo{M*oVioe+~NG zWv;}7kyaNSN2osVcP&UHS;5du<_SgGAPzsZ&Z+{2wn=JmssL%j}P>U*6 z%O_u7SkG9gGnLO1=Gk!#C0^`sU(`Egy!mLa(6L#`Lw@6Lz^V};9Zv| z=~jB|!&G4WUWpo;)ppxy8yHL$I!ms)j8cuSclzRJI;_7uxF?;UJeVCN$*blnc)ONL zz2@7{A#C7lCVk>Mj>p8}0{_nyQQB1;7V$sOR|*2$cH1(C!9lj7eGuKiC`x>;8-lbH zFT#?jjP$yblMC&(l*0oJtezSt#7%(-oPql7xI^_XbL{SGpvCsfd}b%islf!<*DKI) z5V`;HyZVN*TJ%kay3(VC_?y6ez3lm8Xr}k4%l%_k-OJxn#O6EUz+=`p^~{goBIL72 zE;$2{yeK81yuy*w_xlR0TPX1$I`&dr_-T3UyE0B#v`|S(Q`%*EVc|DI>zG(f2F|;d zuFyXo5)H+U0C$Qsciq>1Hz95`Y3t<|&2j5it|mqGet+X}xB%OePP9?=z7On;^{TO6 zuk1*Th@;V(i~eg5-zfLNL#qgUp6tW;m0fkL+m750uvrBvft0UO59~UA)WV4vXno{O*ml3+`4+IAc-buZKT3 z-38qk_A#gaW+q@_PX8KurdsQiinCFYcTn6?2EdF@sIT|0hxat97gsI+-O%y;(jyZx z)DC%uUAmIypR-!}=QTUp4fc*o7S{LMQ~7~;#Eb--*7&(3D5!f^*RL_RYo^sUhK2w< zj>)Qq+focX+DftT6*(y?6Pn~$1~w!h_Ed4th<`&e@LspO`S;mS@>rwv}!Az&LX`NAMl<-3e*&bZ)83Ka+4{e-GiQ#`+8*Ix_-6q1;3M}JCgZT0 zZS_Orr|muQn$|E2>U-!wG?uvK)O~Qv_l$A1)nJk8LsD=aXC{lalVCUU>RCmHT-@G zy!57*EM*k>fQhb9vM)a#6U;B&f?3N9nz+M3X>J~?O?T?ii5YQQCQ4`I@kryR?`*+S z7VOe3q>RjM>sK>SYR}_E?DfrcB=y6+&F#Mjg=mTh(jdt!vFit6W1ks4s8+ix-u)&LdoW1q zPzs!Wi_23s`kWIy*14%H!NG3~QUm;ijkdT9jQlqxtaoe^6B#MQ#5MUOVfhptBsu(h zuBuiRt={0ap#jt4n6k%o^Sd;4nzS*d@zH$Eqlp~BhfC;E^cSG~hzut8bCeiyutN;o z0>Bas)_sz0Zxr9W9{bt>$Hjq5eGx086&4AGdi?utrD83zAg z!ex8B@ViWiCgH8Fu154g`{k9Oh7R4td_9M*QLgWMd%a+bEQSK4Shah`1T6kF8e4c| z{K9;8z2$0fpk;N_W7&GR(l5-(`nzT`dy$8>L>sVw{rziTO|<0Q z`PazU%mjnilc`H}{`{DrY~vF{R$gt~@bMa&r&1Rez7fEp4_c#r!^61;Gy<8`)lL$Z zrv`6PiL>*>)2fXUl)JmrAg6dBbJ^6?6xPZeh0c|U=J6vxkINw`ewaho3px6Bx=JU{u=%-u%wwKW1&6`bi3jPm(e)Ae*|nYKl)9c&(#zm|vV-QWA#T z(BP&Gh(9TV)<_VJlk-@$6`q=|JJk#rqA9%(=RN;@3zEe!n_QUc4i4p1RZWzSJnYZ_ z14SbxJ!^KWc3iZdJ{cad>(LORf+*v?gM*FZ6R#O2FTAWv(3xa93wgeXZjp(fQGyy@ zDt6^#XwEyQ!R34?b8G9eeMSNv>m$A3w2vb4-%=f0&_BxWDCiC`(frAwgwqwWv9lmq96- z>IYZ!j}B|^ws@4Breq;^uVTp3!DN9+7)P*beI_o++lO9B@ZMRu_Y1C+KT!*U?kujX ztYs#O&OImU?^HMd{~rXiSl%$&mjpLLqiyqwf$fh0Vt^ zM-1qssf8`s%s8(MfGu{W?ZiACq^fJ~g{-%wm>ME>re1ol)W1%9&+H0 zSLB6FnhI_dhN8q*jXV)P|8e0xrbqAyd>|??Bz$K;FZa2$<=KOohlj_+VlT-S0z#G0 zKt_#n1DxzQZHJ(`?_=bj=yJSW!BFs`!vI6WKJ+qA0DH;<41I2l0MAuqX?Jgh(8V1a zDOyjQ0XD%>ba(~6*&TaQJ@%EtDsL7wWa0L>T1+w*Uy~8*?ViU(Y%$%+WuIy2V2$4u zsG>X5LK^iRPO_}{TO*JnLakbN&3#%U_UvC?R1O~`Xt5OErteR^-exItYSuU?0LASS z9_>lV5MK|3!}U9t)|OysXY9i_`2u&15qE4MN<@-6Q|44`B=a87tr!QC~MK>g+5*s z6c=Y#R44@XAU?57Inkwah+OY6{4s9mWv+fTcV_++-4bvcS9ccG#CXY}_uEoC%~+)G z>@m-mlf;_ntDGJ(-)phHaqK;{OP3lp3IgGMx6AD}tY#rFm3Oaj4IwbR^RuMIAJeEm zyfXicQ}62o0=mRP=YhvroFLk5xK=vJj}>D3jP_h8V{iHpU!AI#1V7WYrIT%sfCBJY zd&4D!j+KRL!e&R1GPBdj-`imA)F9skm1G*g6=Mehz@T5v-%6bVeSJr(Y^KO~9na+X zcP4Fq7%jN=ay&@V#@$Z`# zbCs%hDcAjY?S7=s*HWQ!PM}5QmQChxCCot>6?qU2s)-5uZ})sB_BLNsha(prm&O!O zsh190K{+tt?|bZ{c`Hza-l-}7c4gl8HS&kwkrMD%xS~{%J%WfTfwhu(n~calRYhw+sG(HQ1SlkjPfZwbB_bL%8*%WRfs;G zaSLrZ%hy#qkxkD)iLc6E(Sq?f7ZM(Z`G{Y57D@XSqL;km>T+T5xuwaM>_N6I7SEL|mdgvdD6J)--Fq!c}@EvpSaD?%NgHL1W zW0+4i|1(<5pizyG==U;IK+v+waM?8lw)LTu^?Ql>;M5u#3NWSy`bpJy`Mr9e!nO82 z(89vLs75lx+1I`|U&l)xmL=AEAo>mb?BAoVl0^1uZ_?xAJ2K)Ri4EYGv>C_UaHLzarQC47(N=Q$zrdbbA4l^U#B!-R^-hu1&=(V z78(jOPh9s60PSl4TzWjQ1#9Q`P_{JwxAPWNU#+=uO@1cZJdLg2Wq$|h@^TJBMs|1@ z5D;;r&kR^t^0LtLrz~>H%FqP&Y({5h0;epr$-c9b#2Vy>33F(GaT~gT(1|@`=e$cc z-4hfnjSXm(>-L(0viU*_on+uJB+}oXUhtK_D7rfa!0dyL?HbsIhtMV`f;Z`FFD5@} zfF+Nic8S@8hc4~}k0H*lN91ZE18+bcLJ#{Mac)AAdyhUv)^&X6A?sebu&AhNy5NtU z_l$~~Yf9n%L%~Ff?9|eTJE~6pnFC43Ai-O9-+XEqNmt8w?+J7zhC+t$psSTl@iDb; zBU_s1fXiRcL?+Rz6X=Bh$A(=cv8he6yGJ3b5Ztn&(qwCljY!YubhgVds+WHuTJVQMrW=VNx0)fou5K75;*#MDxTN9rC;e|eXT{o z1?$H6y+K=FZS!MF8q!_3BxhtqySuwaVTpEw52URdy z>$B~N#X@vBSJ&3oqR!BXh{ASvzxxLU9^}f&yulA#bQ{|cQ!lMxw<0{Y9Ez?a_2grX z0*DuNA!S-e#atNCzU?t*@kV`9Dr&=oQlH-{b+dBv!RqV#VD21Q;~FYMf4_6agOLmk zfW6a9!zXmg4=3cl6o;%ZQU%yd`P}Vhh4Xsom4vZ-pmOdHfRuW1+#Y5yA8W3dbZOJr z*xWpK@@sU8@3Hs-39hzqx$bA06)X;P0BFF(pBJU-HugPVjrmbfcxD+q_o#{Wt5H1t zOt@EI;b;nDQ`38^Px~bX_gE{j7q*xfn_X_T0eb@Psu}Ot4Bn=*JdETaDZzACk@n%K zLLll#8e==ASZ zh8o9jovk!m@uT8==i6a7h4DDUHSI+=0-Nj^CQ7{nN6(P?$s(efDoQ3MdDkHbmfxb) z*Z|5sSdBa_QP-l1IpufXXqRUO@VFoX@6jP+BriMWRWYvi{4CdLeCu?JVWQ;^8lg_P zDW&|nhxf~=Rmrb|L{XMfUk7dQ;IC>}sg{6J5l4}BCK)~#9%Dr%QYXXl&P83E$MUyk zcVMapX&yc=bgZyu&zG@EZEpqm>P ztCwwW-u5(s9#-l$06o(F20)WTFnuFJma9QfG01Mzv1aFOpKqcznj~0r9U{|`#ied} zy~PER<}u>fw7wkj?&X;O4rL0MiCf`;vwtc6C=UGZ)42${;hoHO)Zl$#T3LkskF6%& z7LH-iUoomscL%vqY0V;10`<9jNz@G+mtY?J^f-s z%Yi{>8UE-$-LxWE zNfnFXW<|DGCxu6k>I;)?bu|{;8`R0IAw~uUDsZWDIEBX`l^q91+Y9wOu#CC!Rr0bt za-6%~8wr(&(WfRu!vYxgvNxCxUy55@jeq@|_1yAeS`q?GQuoA3L-d!Os0o^xjA#LQl^_F8Md>wOhb zp#}RMN~raMLs;IyxOA zBQ_r&A5_I9I(hWFTh7UeQ`M_lJ#NGLYJ(J=OR$ub$Zz}=da;Y2XDsDyebJ-ZW@?|K zI$>1w`y?dhtzS4+PNU-`gOi(w{>9ahqg*F$6?J8a+pbED@D}V7yw>MUX0RNEO)MqE z?4P>WUZGA94T-Be@Lz=^VT44AOl3~|_nUucYUcjExkmo~y`7DZAM^K#iMkBOeJdRG zw5EFu&ql>7P7BMOcAvgK^i+B@_aqYaP1 zk2)l^q^?vE=6oGNEff*bH$&US0uinF2LvO+WMlL4dyh--S$jwDBr(eS*3XGOiI#>>{avDH3Wen($jywqP9C16}J}y2os^>E}nKhZ5)eou@EaJ+4^D6|6Jg)~` zU(J}q`##5Gle6dh(2O@DHVIkignkgLCp4KVh$M=U6^MNgVst-}xwBLGrQ1lMn?x(m zO;SksZ+#^`DiT|VROZkkvXEHD`kyBA33`XsaGvkgPlaNiB(Y9A{zsuZv|GU%?+IBBtI<&S?a&}+*R2g5i|D(w}mv$NUz?- zP5STv-Q-aWAvKFGou${JVLCI-3^rklVd1$*AJ1Gg74h>DRYFwgB-MPp6C2);UNUiQ zCzlSS(s!$S>jXVW2=fn6vX`a{W4}h6M((CBCnRO5J`}W6Qafv_~TchTH(=Or& zSmyFlnHN4f)^%yOD9#IkMcBe!S^djtQ-xYg-}1^aH~8iEYS3~>J93;Y{2*Z$uTS*! z(oz>S+(IPRKf=|CE_C4V05X-IUbhX}DD=PpJ+?uY%1_jm$HA`<2znEWS&X*D?+!U< z_h>{%o2%sge+7y7QOgf=s|OQGVvHNmDn8`XV(T@=ugIF8o2J6Lih7jhZzm*Fj2C$i zQZn>^`qt3Pjj{c@lLRgEy3ssLGh@)Z;_9!6XTvTA1))hBw*$nq2;1kGedE_yspuUdE;;&Xkl9geLaKaagn6=9jaT$Qt>L(9*LAik=CB_; zEL?cKTd~+_vZM}4XC$bEJJmU_7kDx-am?CDQ(Z09$mk{?MwuF$6)w$fyEwOec@T)- zw`V3y=wPqC^--I`G>;)@3)$dyz`4h;N=;0b0VK-s0y{J0R*V>YK1A~YUU+9u?CAA1 zle2NsVB$gUIZ|r}YPn{KnVH$B0s>Rc%a{@9e*jxlp}*^kXO|4qD`nyVQBOI)t)psD z&@$9IgbG1LX&F_+NRFxuRh=o#58hwM%5GDz^3>2S86~jWkFO%zZ(siWx-m)zEPV+6 zC*ItL>u5+0jv3^nbSA>%D ztg=~;4Jt|g^O={?3-O({0fia4;w3WEKnX*Gv7l~2H_Dx;p&)u1Yus@3xR$L;_% zcU7EfZb1RYc88(9Z2=lotNs{OsCHReQ`zwX)j}~{SRCHMm*@SC)CMC0{iM3-USdk|&^&eyt|}uM-6>9PT&3~PI6E7WF8Y?`rbID~MO(nC^%5Mm0{N+?@zdo+Tv$yYD1%kVajX; zE@>>`aCrB;R_~9b_ODsndte1&wWzGw;nGueRm7$lpstp|%l03(E#dDZW_%md<`~d5 zOW_;O%OUt6>kU6qKcE}unov8K_E*T5<9+S=FK%$O$@Oo?;MetwxPg(#$Tju`qPT{dy@vX z4G!T!RPOp1n+{7(#2-#RdG2L=6ei38xEgY0&utH(kI9!zke-cI2iRiMQ#q*yunk+=Jk{+Bvw<<+-*@_- z)f@lX5V6akIj&_J#bcxOeqKmuI6m)|)uFvL{Jzyj`PRPA#ypP5{%7F#%13t}aT+G| z+KY?AnP`@YTU~)`gP3Y19`?;fN4ma{x&FJv0$sO@>2ZAujGFEyq_lBt*Szm&8M-A{ zjr;iSmsq!9S{DA;XFUFFR#+x!&EQ*KeJ>XmE9+Y9C%c`yXo8>s(Mp^}Loc7VcH@4- zzeJp#?hxX1DW=cD;{1UZ_h`!0GCwID25e2xN^*Ens{IR zo}$ZP--}@fYsjp!R=UC>S88$iq5q}u`{mb=u&nHTXbe@Po%adLD@Nllsr(-vWlL8n|7S%@swKfwwyhPJn{bx(9XhbQx25Pa0;XDLu@L3^)0-+Y@^7a zu4;B~vih%=pxd6_mG>=1v8K!_8PY+3%b!Ib`ZAs~wH-xOYvR*L)t}SkUgz8WL%6x; z*}2V{{BN~%JtT`mv)`Z%vd+~%qfwlqn0Vm+5tIbR?C^sYdxxOk-o-~A4b)iT0wb9k zJ5{sU@6FWUA-mqeL2)2y4FtUgO)5=HF{zuY5?DtbWX^ z)S#LG6p9j)Mf_F`-r@w6$K9A!%#Kcv-!CdegMWJ*a$;r`0V%}esRBW75%+(#oZn(L z@mGB?W?wS?Wt-$_v-s*e_4cEW_q=iYK+xXcrqCB`asRK&Q6^!5^(91LGLL)3IQu@W zNaoh{U3yk^Gg(mbJnWBqaELzo8YOSS7XQ^z@U*IV^ptM>PF@cLErqkm{vE&|h|qkQ z3v04AJr&(MEcj#a_@7OkXWCXJyWUG-B?b=<^L0$<1w+8ow;xSblq~MCahGIP-bWHP zI-vzopf6ietdi3)N^g}>_Qn=EE4|}`JAVpxPOZA5lvIimpdwY9DvIEvb`mEvl&E6R zCL1q5ub7&Wl|+YlDP3x%1e7MMDr@1^_i6*;k&S6DKx3y0^eg_;3nfytjy2n|qOu|}9HO!xM4k8g&7Ar}v*A}2UVRDXoRyp-|`xEPx*TO=CR#}9ENrpmR*l9H(xk6ySZvUDv` zJ?cMQm%(C4gNMuCspFFnyet_oGxU{{$lt4v_e^0&`)#kOy!-GLNt*~i zcwwF$=nh4F!)KQ3mU=3SrUv{AGZuzZr~-p`F>Lj40~xAR5z8^CttY?n|9x!{)d1vQ zeLw|)m4QqAxbBO?=;V{pfGsH;N+cMDb5fG=v1ooyqJrn*IFz)T43QJ}MKO|xrV0dH ziJ(y{8=i$LY+qLKZ|74w5wz^XOosv8N*@0h!4b*04Jse=_=s&&G2?1Y4K~)9c~VmMe5;>e)7o6i8tNIhyEPQy8F&gTWX64-L{ z^DmvAD7KUu z$_*gVv}r5WCzy>t#y7zUZ5?&MN|wV)+D0)L)3HSx`InkKc>I~{Kz&W(g9ZT+5q+*c zwYLpB#K!cRojscYw)nXhkW*m<}tcr`*bj77fpa#hW1#X)mmT$5XPI zSeG^h^>^{BNhkv*WtGkD_+c+FmLSxB{Cket;=-cGyvuaW!vui5xZdS-u;5-GdPpAMMeftM%5rPY=zEGM4~yFZ>qek#QBTEN<%^V@woO_(f<42w`%hB)y5du+mTY; zLL=g8!*r`~x|E(e+~+S79vl?FtGw&9;+Oki*?UJY45Y)-q^v0DPyBe(NO*+@uRf6q zhRl^y*L#n)inyJA586+O^FV@HWa^1`bx&FS&~Ob(Sul`K)^zsH?4oP9)r($6^S$&1 z+KEOHvOd*cALI;GKL7cp5zFsaSK?$$c{!_j?;B-UIT{4Z5`5S)kt;Kc&tJR%^Yu-K zQgU+gckRTOdmyuT)G*=s3blv0fRwU%1BFZBePAqE^DuJsjK>&Z?%48xw~_@SgkB!e zi?%O;?X}$Kg~_FJ#12T}S5+oXK(FA~fafM-gq*^U8Knscmc!giUU%92dMgk=htlZT z!qzY12_82-##oCU@WyhmdhNfaB^)9Y#A?E=dvi`_?jgAb9Zi^l&}0pxuC!E?_a%lu z(T{gz{8iWAzu#Y;=ta#cCd|GkR6B1k_4WZ;Qs_O1mm*dkl9q6bF6zKhw!z#nV`(Q} z-VL(nGT;vw>szaQPoBpXQ)*))f$byZ0;eC&5^c;6$84>?&oQP({zi`ksd#(hNf7R$ z(M;#_QIgG$EjLM8OMgzM#RrW%reC(gOdPrV3L)vaNJfr&q zt%7sEd3vz?0=cbyTSE2|wh1K* z9SY!IaMdty=_EE&o_@Kinip4h1x(Z4BV4>2x5tnJ7jSrYK7v8nYZqh@}; zG2xhewoE>mKYP-BW{uh&+T#%pU56S)3JIdEigkDaN%4gv4;zWmuJDHQuOh1yfehQ7 zm%0kMDUzdzvt(E4TZ~(R`dX_7+02RzIVg)CwD7$#bRA|B#y3W5U{%JzudB;+c)tqyY#*oCsJMQshlJ+CQ+yN}PnHRdgt*SG zE`1=UH14jb81dsGg7US~%*fzi-1L%H!Zqif!}~H_1t5eOP=C0N1l@c$xaT+ov|jle zOmHB*?RX~jCU-7nT(O44Xgn{KVVAX!R&h3OVoM%}9GxXO_{tOL?a8~3JQ&vT^^n_alG zT%0#W0EQP%unvNLV_&jkzilbWePqo|eibfxc8UcO{^9ZuGg0MhZaViNRS+&oy=CO zcF*VakWVIkAZXsrt&!o>*G^*niIc`Nwkdy>x}s$pU3fF0pd#S{c7G% zPZ^{aH>uY`zg9->0cU$4jk)Jg!i#eTr)AwUwJn%laLU4%VR1(M#>xr31BLIZjwPXZD9n|#A3k{)TH@kI zZB|fYiDkUmz#~CvA*61fV-dBIZ&Bt%JVyao&OrCp#1piRw|Wqb{52Nv(L`9O+1}`H zDGc9Z^E!{xY<|$tNc!=e>TP@iyxK2gfVKck>dE!T%hPR@6{*kvTb(EB*qSQBq#>gI zoWf!`U95j|-C{CCrr#CvXl;(mlGSyQzt10ue;cVnc*t(=Gv>0`!nnughix|0=RmM^ zw%+lXa^f3Ks-MiAzvqaXpSLoMAdhJY(bG%1-)3iLd&Peit2XC{-O1Rh75*ksyAucG zf~v_TTh7PL!s_*})qgO!yf2U^5X?`8aG&Awvx(Q9E`faZ%eKzL_+%DHJ5uuO-liI= z%V^0e=G~FzEqzab_1wShutB4FS{-o$`zoV(!MB;=%CvBs&~NdC_h^o8y8|8X!pJSBHH2u?FhL& z@D?kbF2S&Ep;a@yZHwI?#`i(F6}ShLKP1W+oDZph)mR55EryW#@lY^V=cz-N>=34( zREn-xqo7mgc#Ipn?l7~N2Uo`euo^a1a^@%Dc3xg{`LKE=^ok)VU^&EV_!*I}Rwn80{#}b6+Y)F>|EpWY)&4s^IpCT3Tp^L#!C?<{b8bIf zdIm?~32hb7urgTZZswR?KjI>k-1XiAOlu?F(c2R)0vUOci*qawKM-Ma=^t_WTDd&4 zNS>F2P)Sq2lhSZrN|vTS+{{n@+!2yY|19RQ4%c(1LGMfu;F!s~k4=w<#9y3vh``z2 zXc$Ay(c9?c;a@fQip>gbMawOxp8?va=P-zP$YOP8=dbi^EUE85TqDj*L3(Vmbk?>o zZ3E#Rg(?m8>j%`A5TIOlQtNxXzIIN)NmTn+fB(~`Pb32FoRX1Le=B|(u`lPRd$;$+ zKJ$1W_2ZLrpP@E)&4mF1ZMnoEa{s*Fvvg0n2_~^lb zUE%pE^yLB${bZ|tbE!1Uz+PV7EqQR)OZL{5vG$8Vnr%gK#9TtH7Um!931t9x^GBAkLJg`ss$<< z+KRLdGc&c&A{~8GhNREGb}#W;l^`;tgs+0Xek5}?_ufQ{h5N|8qc$69-Tz#}QfXH} zU{|<>62)%snfrHX#8p+rwrKd#`VsYR<;`ieAoPMTKi_H2N26v6NgWTufo~6*RcDoG zc#-51PF~VGU%S4HLVJCGt8qJDLQw>1@a~Gmr=bU?qa_>Na}|s68KsqX{%J6~1#vf{ za|-;S>ev*fXN$6(!E8U4!yMWRj(DI7uSo{;Uy4~CcFbI?ST;Wfev(f39=p^h4x2uO zsGod2IoDOw|2Wv5S0W~1Dvj|Z?rjoJuN$wYXt>ZXd0i@(zjLb`*E$|2G`vr84k`I4 z!a)Ie|R$rT;g}A@YZvZDod+Rlr-%=2p zj&Rx(`ZvHT-0PlhN_4i;6qQ2ez~L|W?Q6rh+K~j#*lY%Uuyg?Yqb8IK?KJsuQX2oa z$zAyr1?*M;qQb&`vk6s1i2`2p*$Nh9z(gc~wWnfsopO2u6l8D(lu|aON9H0u zOUm*JO_6l#>6to}C5{30n1nz6q&FPa2vQZx(iIF1^~Klii1>d&1pmPj zJoPes?C~G;!T(SMsi6sbyr@s&5h&vD5gV0mdGy(&GLO1;n^x^-$HGic1dfPOh zs*O&4-#zoL|N9(C~6*Wl5z;f7}c4`i(+(MBo&^X{4Smo&})@wCleJ65`#R7&G&9GamxX8hD2w z7T3Rje;65Gf%rRgkqEOmfX_8p≫j6dR)XIQFXu-+TWm3*e+^q9*)=^WLQYJIPED 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

dM_ZLneDyd~mE z)GAna?|N&!eWH5iq*Q9r?0VLW%hI-m|0Mwg<_UYjw#LZr->vT=*~UmZRV#*vD(X^k z)t#_!aTqRZg}4=Aiqrq&>MNkCin^^2AR&!NmxP3%lyod5HbJt?J z=t|XyKV;bUOxdc^kZ(9Xc`IXE#@3iO8kXcBX8EjJ!cj9~^bk-7P~^ij5eYK*t>4>0 zWY5gz)S`vvpIW}26D0O&D&+lC`dt6q$eEJv#4H(?$?cGFm*gbfQ^ImFjL%}HofjcQ*9q*nw>|A|M&IQ zwzLP>r2nb(|F_ps-@mQL`6rpXa0rsP zvNC?e%^6+qN#Q-}B&w!STUPtdDj|<+qD7hh9$(2=1MiBQ*Gn#gx_ z;HiUV`R5{Mz;*uUUS-5B8gyr+(DUwUvdof);?w1&hqRm=%9n8b{MT_nNR*>MPeUUo z>p9pD19XOVt6P|zKG=rs%d9b<0kATf(+oZgSb~3GqCr>1_i2j6u&(GbMqRJYDYEKz zZne__M9l(^kcr1QG51P33WD{LsiS61-4*2y@+UYOS_#I`Nw~=~z;Pq;zV<6>kU&f* zao6caIu?q8^5ysFjBN@oJ9ad&EAl=Q;iuOkjU`GD+$d};=u>IU!i8ssjGu_pq^+uKg3q*BFJ zR|)k$h=&X}%zh=lWWMPi<#|bBNs=2`Z1Y~|&*Zltx|64i%$%RRZEERmM}G(jlhGyd z2)H)ae?gMc`G)#05gU5IK>*niqaVn&eCoP|nY=))4Mks_zBQ))D)YTwz1G}|hrbE| z?r=YDAlDTG9Oxf4S&yx-wA25hKN|Cp_ejiLdPEqAFEf0@UTnRQN`LjLycer(gB=l_ z>=5C1lskiO(0tzSlMqfJgsVHN3;BYhsj;o}@+C6#oR7!o?BA7t9XhY+d2!nOqgJ@1 z0|m-1O!328y^j2o?9Q*+8DMw!mj{hxQ6S7ito@#WHT%lO`_EcS;b6;O}qSeV&9!S#y1w#B7+t*T3K-|Epi2Ud2zsX zgyuoN0`V1qx$Z;qN=hU)z5obgu?H^qEgst62>$3dAwNFK2kMak^#%frvXYX>ib?#m zR^$)(L>XVj`2v<3Ej>L-SaAWC-3!Bwjg2m!#(G(dvAw@e#Ut>uuHa(ckGF@h4gA|z zqZdbOS%7Eh8qAyaaOqPb^+I1GE`4?q=%syti&Ei#aD{u{Ims-zyAt{{~bWq^nE#99yk)Qd| zQR~jfn>XCm%-rt_(^nO_pzDQ-`W+fD7 z+`L_LHr~CNHf#_%?g*y}QteX_$137A#Wiei)1ZV^m6ajTEg3|ElHGvK2&fz+a}|oc zC|}T_bA82U#8x-1K;Ud4TFj=n!kBM(wVMLYA6fQJxma{V>ok>;{X5j@)-qw}#jQu# z&&3Tm5%UW;IGxi%vjt13U>jbWY5p)N#sO?AsvmMa(%lDQs&=x}2*kRuuJ3&#%WFq? zFI;Nm=UZ`ne8f*TPld_WNiU>F!@k<}UIHk-C1(9krYs0eFAi6>wHxWaDw*_VVS+ZJ*hHk~D$EHh(rUR$Y{?i!z72kg88z6F5(~7(9mL za;rLA2m*thf_`4}rS1-m#0@fcxYhi`@3rB~DOEPyrS7Im*?#%AhxQpROvceF^S8TO zmAV7Ca?jSfL%j5$HCoBaBg3&~3lPfqX)hfePekfZxwp}PbAWR^7qWXocn5G-I~Y3Jo5z4yLj&&P_o+~?YiF@v!uU-bw|zLxPc3Zzk};lrbuhl}*L z8kPcAjF7@)5^f451_#D{!CzPeI!O2rDgF8WmE{Wjflro{dDq0SyWDtv&VjVX&IfUk z+xU1lH*`Y2ThzmIGjiW=B&uKTIZ+@&>~rIe_G*^P5uM+bM$NAq{H&UnpY}%MJ>a;7 z1_mA>aL#8pLcyTMN%s!83*B6#*^%JLObP zdC*=QnXg?z$Igxi|E*Jv7c{oLNhzwRe|r8c6*xpS_V?p~IaH(EiflK52g{z5lf>Nx z5fU2G^uEN@VB(Jnkna5i5*{%48W2!Oj1y5sbHP+W`FiX2`|}c%=iU8r^`@U4w37~L zXSL~zgGjhp7#ZRA-8Q>^kPfs-cj$k|U$4$zxmIEijmzq8o zQBIsa3KP9g6|(*$e)ybmUbdvAD=#e*^S0^zJz^J$Wq5JztYe?dG*(7tm0P3l=wQC7 z&t&Z+{-UR^ulDrDy&+PLcBfACO;<(MXL?D|Z=(J~8&2b8Zg`9?tbTdRjc>kCUp+~| zuKS#0uhMKsGGVug7&j^AxGt19=bjr2`hZ}v;&7CZkkB~iS(w~H3?7JK+$iBZFs)oi zG4jo#SKdnk%{FJf*enV&q7G%%n&-I+qavpPfxcOyt-_oz!z%^QiLpaH>? zq?I42Tex<*JA-9wYYQd|Kv*FG_AZh@_6pJmDtLE3i+LENU1q7?vgY-PLDU|>v43Um zQNg+zU8bbi;pdQBNqTANal%$?Obn*f7c|i2$)O{Mc|#%b^5!({>P4nO&V724VXyQ_ zzJGjtpYXkrOK~p<;wcHa=(W^c$o>2~sUrlmfBb8pez2*h&Xgu(>vf&ZXX|%Qr-d>K z)1vk|z0K+Vy3bOF>_Utbr~bnN1s4}yXdVW(GSE3j?C;-f#>U2vSXmW<`O~{MF5hg? z03la^`_s~)&*RXNe{Gg*5V<_rVyaDfZi4yyX?iDH@#wJrzi%whrqa?LJ+|Z$h}!qW zQf~ViE~L2hsn8-||7!D0x6PAVOxj_)W*`j{Ywd9G!5dr=f|9L(peojpv-uztJUaM_ zf+sL&)o^_v9rr6cjn~`Iii(GZ8`Do1u4nyt;**y7^aI-67ETUm_7(^YBPM#0^ly~` zGYGqw+OqYAhR8EmAPCnnAvM2<;NB`^?-vOIyCt++|R zrcy+6yK`Cylrb^%H*2_2R;h%9FyUX&ZHhrM!)b=T&dY zgCbE&V3#;*>IBy7pDOHo*%Njd%%ka&QQv@zl8~^!YGBwz?_iM8JD~Pq)g|E9i}%8o ztrUF+Ry#-lzQUADyKvX~IZa%J%rrvIfl=UC>=J+17Dk*t&RLXKKSpFH(d*A3#J2>* z-JeVZZB!|%s(u2JiB^-PA&@w@jN}NLKBr54)1V(cI9+Ac$06gA4)&M;l1k~;rdjN~ z2Fwl#94F3zD#4!hl*s`{EW=%9vZgTeNb_;Sj>XLuXvTV^@UX`Z6>FJCuYNJ8w6e>Z zYatp|v3^G~di63RoulA5IfynS`|+4-+gPl2Z%n~+ksOx~C0xhr>Mw(^<9d2}EOoaF zD|8mdWQe+o#M*J(L%Rdq0c8Lv&pBz>0#OTG6&CPZF?i|i`t)l}qAojwQ+@QCQy-Iu z{r%cH5m+VYu3B?M-Q`w_F8ohuy-9yH@AQIRv^$R#wQ;kBfFA~x#`Tz~zEo}}GuRqzUf(|QV}9h( z9<^=j(3=k3wjG{73Ws3rjZdjQR*hIMTEN*N21Ojn2z(a&*yMsrHQH~KqAu_;sUqnj z#xMRi=SSZDOZ;rFOu4U347e5?931xLug!b3u#z}h32p>!W9KRsPhE)Z5fly=wd}wu zXra0q(LYK>c$tbTkRW2h5q(P%n`~2vpb4SDiMhe!PeI99?7S~U8A3HVIU@Im35#%% z*EJBN8isqbbwDbC;IO{64Q{gsO>sq9`Dugf4v*7DEXv&0(}Rj^=S0EehX-EryNHU3 zk+ra}@aI(ss2p|#7^L!TH8?cDf%j3W_bJ)m&dx`GhXJ}|V_uEL13SYOaOh&?l(4Bp zu|J}qC_D7I&4ABM>}8>Q`z)$p)HS=b^xONC?}~Q2(*hfC5bbx~qn7uRA=~DB$g6^T zTfw3in_OcHJJZ`&HvWautD)n|ES5307*XTL>DJ8Frj~*d?zd)5g^c%YO-&gI0`GNbA

d$$>%eKa61gT;uo6a$?K+@2uEfF-CVw{{|Rc#&KY!Q1Q1dB|V<`CgC6)4K|3uo6= z6{2LMN6ZX6@J(v%-De)dhm3tIWh=Yz{N!3AlU{Q3-|EknLX*e^;0#|t|!7T@!=+nK0wEtIMe!pirO zcB~JMeayrZeSPf(&=mT|j{|_hBm*10K`Z%PV5GaR3;tV;uqzp4cq5bUR94U0mn^ha zbhFYOOQ=czMjB+Ci@+V}md_RBLAVeYyZ2sf@?(rRC82m~{la^FZv60+VXYzr`NNqv zU+!G?uSku4nR_p5_M$NkT&kRXuFK^5Xysvind{&w$-L(`XczgS2v;|Z2Q!1GwXPvGGCuQ2Np=?&aw!X63xl<BOY!`!o7oQp=Vp znlpSlS|D;=g5m!@^h|%-tpgM9j}>r9aejeD5d4P^{Tmy_gH`~) z#dvH{v~j&VBKNo2Wm^71a6cH`(P+n~WNTWw`&26|5@pGx6~a~Oh_ zxq4-flk{MXNGa@w4=iM@ z9UAX6)mqUVKXZW<)V#1$(0 z51USHoRxtGtq)c%=6Jx7W|~%|LJ%Bg)9IgYa@n{!93&dgb0u=%K=SqRPiILD3}Ayk z#n_fZ5hU0q%4Stg>pcWsRoy7K@1;Q3^3BlIBdBYM^2A3VrXTGY!iU%*3}xeLnp z7Pt3i75#51vYHKxG4O6J%E&?Y;yFMW^@}?lm+G9i-T|l8j2}Pl0n=@V^TI)MJ0POQ zyXOC`@+F7c!nHf-!&v~H39xeBNKYw?h{v(`n>P=jH1+-zzG2zi0gJNMmKGF1kzb#w z;oGfT!o5E1X0PJs{{Az~;|#J)D&JuI~Q9hyB!5BySzZ^PnQC4Gsm zg{yLQ$9xGs&A`fU-HEE3Y{vEeL8%V1D@roLL~UQo0^fZyYdyc2?y*n5w;uTP=p)T5 zxwsQC=Oj_x!}1>ihb3o1qG2n7 zMhrK!4LNV5OIkH-#G(yAh6`I;p&%H8On^vV)C`QF^~d;r1pv1eS5{B~fh%10&c(n~ zg@cTYOgeM0(TW%AtV$t(K1bjCQ8eQD0S1$Ck5D z;uaLVv;a-LB}WEdrg>~z2Lc{i7Rmu0VIA1QYQNi~ zrxTZ{4zWw3A2Bk@=6LP_%^}A)^+tObGk`9i4|$?f`&yvg2#tH^F1`;04Bwp+&iUd) zl-3m7_WOMABgJkjIg(>z*Eo7F$Ccu_vci2{y$a)aN{#jy9V|YLt&AB!{2@Vih6|3p zpgqahdclL9` z%~Wh{{qz&cy}z9Bgqw@vv(efPCX~7O4n|Bm3!R78SGU-p>814Y#_idv9+cv&(P3J_ zIavR_l5{h~vwf_39l@9uTz3nC(?5Z_KtDd%)!`NIsm>B>0rMP=HG0+ythzm**7QmF zV=!aZ_a%ejxBgi9eZyRoA!Mb)s3o=3!Qfh!dR{&~63J^dE^h9*Jepm7m;97c3RqTO-p+mZQJ+IF zF)+*z#(37l-F65)0FA7$H(*2O8tqr`+8Ux$etzEoV^!Ojp~&Q=eGpD?ghRI|!VD!8 zj~$jZHtr}NTcDL^BCff=s(_H;k$>?*0{mjuWZ3)5-fsT9x(Ahx2l#v4wN60znS=5` zfV_DKUF-VO^xy5}EA*=9EtLFErrq^~5ChOc1X~(CW?%m&maMqO@f3aa50^wgaD}ap z$;Cuz)N>p9_fK9!Bkt41AsEoO8({o;FtSndc!2OBASPxk4JzY>fZ7!nT<3A(5ErA+ zK!2pkVKvUd1^zECj9AnIt^KsLG+%cF$-{?srOiR0jZL`L%m1`!xOX;ZLE*tCJ{>0@ zqx`|t&HULvBRy2;mDh$U;||Ai1U(o|D+O-}AEw$opsvq*QrN6z4-+A%PDISFG&qcV zY;5+}bvY{hZ~xt^+^XmQyg}phX?S`KYBULWn0vgjb&xWman`01;IW z1oq=fTLHD!y6aB((eDW~;i}~)CAa9lCbm?~(Fz5I;Z$xHUnNNQ5l_UYGIsZ5r{%Qp zYkYeJzJMj@g9i_QI_$G;`WrDojf1XR1oHOML1lysq)AreMNKQGeAbh9TgAn5u&}Ts zjeDiPumLuX9U)gq&bXwP)nH0GZqiP&t8m?$eKiH+1Cfe@r4FO(^8+AYN~GKU9bHEF zSk~&iQ{bLCxB`tY4o5dthrPaLA`?=XGVppOO|?WxG&MD+D*kkgi$QVJj88M;P1M$N z9lU86_xieZn@TPc>C$wASZr?dyZF;-O#mb`i@>jTn)eJrwF)-h*InnkdWd<6?F%JcXAv;LAEb2^Me1qJsUVE3oUGM#iWiiS*I_~U)$)4^^nC*0 zW}4f<2RaTf3Xz~Bk#1AwzJynzJ+bd7pB!FcKpdu4Q?){HY2BNW@~rb25H3^4h{@!} z61-xT8#Yt7_s?d>#wjlm-Z(TDEx!;y>)%eVy8XND_!HxEkoz#VWbspBp2PvCG^2TD;2ZsYPG9WIqV4aA{{GdDFgEf8=76A%IaQBZxxeuc})diCB6 zE14d2aF5#`q#niT6AwiDCeS=RQdU-e)V)vGb<{5w>F0-RfK4fKU&|q_(*Zf5*A)0V zJCdr!XmAMZ$u1eh#PS#lz@{!bo zHT1&9ZZ`-#qw?1Md#lH1kL z+};Mcvt6%xndrZ*v65(C;L7<`*4b(1u}wrENBLM2_#EZJjR->OV%(cl>o-gOa%?e- z>Rk>Z%sTEgEIzS(X_#*hI{*G{I<=xQn7D&WibR-51#}`>1d7(SNbM-)G*VGOf0N`c zo^Qh$GYg9ZXnt}eG#yBjh~u}XQ-AZu4=9UBW*Pu2GYB*V!`YLD!1PL9vzvYQ@#Dw* z4$Bx|=R@A*ndk;;<&E6w*HHp3+hB3v@+k$peNscy2;W8uBIlzGe}5dm!X;uOQ7yb- zu0Dgnvsk;;E5M+H_6cSzX*Qa#5cC;aMUi1=2$e1V-!@t^s~3n!lkOsi&X?Jf4P|Qx zTrv*cL>Nc=FXml>(rNPksM}If($B7_rMVd&OaGv`^_>iKWAWQBwif=n9<}}09L;3HA~HiQ;CYs@zx?;vP{RyMMcm-Pz<|jm z=#oAVII7p%gf99h81+%Jqo_A^PX?Ig^F0#FnD3*HdJ(UdL}0H z%#>a_Rl;-mpq&Z9MQ#z9O3pp2`xa(wiIhREWm5?1?JL-gst|x-(;Wx^UBWR=4IjwX z+=oy)6U6L{uk@Vm&C|asN65$l0H!Fj0~>r$W7l`qco-b7lElOWWws=gDMSWg-^aaj zG^1V`elA-Nh@j#h2EsU@xg#e9$aN@Jpj#;Gh72(&nP1x%d=!%M%80Hs9UM z=MZEJngggM9``0423MS&Rz5L#xGaZ{d8vYf0~dkZe5Xk}GxKyrQZ?!>Lg}v?!nR~W zeDr};{F^Wnq;BIOB1cv+#2hxCRpaz}i--bYn#uL|#?lW%m6lJ*N>Z%{|{jP1Z=p@Ybqij&hH*im}Ty!xx5b3W{`?D;DtTE^%XF%LT3 zGEcJdZubaU;nA>C9)@P{5hWtY81{E{0q#8nj@~ziO1yy^%^<_~oTJ7Lt)zyn09uYs zPVW6{P#+whpxpEHI>8RiI+nMM0!b(o_4;~by%uGXg=3EI^2%N-k`e=iL-9BLXn$AN z;_^%BUn3SO@7@K1dD@US5#X;?pj4-bdlYat{xqAInmPb9mOHWcZome8s{>v9*isS; zE^98;2=x@ilw>Lbrar@UVs)yFUv8nI_Pe*gU?#rR#GBar#}o+<7dPfcUp2*T@jjO| zIgN#w!?HXiKC~qE*RWn09D5ybSD@5jvh>59YgSwkV|nbJOo1@R`+WBH7C5@F`X7-B zzFKs-#Iwon3OaS_n1a!UX$XFQ-iwoBvprvPGz?{ik=s`%Uvi#BbSCY9apfp`>m_bZ6yEx`D@_dh>jfx zMmjF%O|=E_p+i-0-ZjiNhjY)5QV~6^_d0ue7@UHTd|}3AkYj{>LEKdsdlWc@N~|Wh z1XilmYCr=ifB`x{%|k_{NnJlDC&!#y3D?^L$$>`+xBli-+v}Vl6+^Y}p3cKx7YlMU z3sbfY-(^aGa_zf3B5(uxwL5)R`I|yU6@T)o9rMc4FGI1Pfkt%z!sgu4wJdl67bphU z3MYg#xu~R@MqZ=kSJy!Ao6|y4T&Ujd)b-U=*}f&+vDj;V1%fj%o)?chG*; z@uh8hG8;q@5Slj_D|m1HDiSP8TP(`{MAc_~;r^GE**RDa2sLFd&NnS)ZQttsW^qN< zeF;{k1Wb$HE$6;pA>P?kT)_Y&fq9a>(bh1kichPb?8Scn-c}_z53CIemYII!p(KLN zs4_l13-6bnDvWy#i2C0&&DvR1K(h)HQ#e3uPEJGkN6BP?Uun_yPdzXJfmJl!m|a={ z13mqxV4O%0?HOZR0&5p+&vS{fa8SWNvu|rKb#7{n?YOTBn8=lt>HqWdzdtGkY@VQp z`Tc+Yn!{t;jP5bVDjMB$g_lN0aKOfu0)SBV$o*)^ae8MK4K-jYyuw+~AvXgV+LwI& zI@aq}_wbYv8W@|SQ6eE>9fQco04z~FVFlfB7hL`pulm5N$3nrk~IYodB+++*Iq8?;H{{H^>Rj=cKrC`RJT>X*>|MKZ)zqQIf zL*i+paJPX^b5GTuQwe~L29|oEozUbng1X1u9_P3$Sf5^~gQN2WIRZcS>_G*?v?^st z*s>l4G5$g~qXm^51eSrmzaRJ1`?p@gXVc6*aJ~!g@_?&N&^f8oV=ztAjn&U#vUz~4 z#@&e|+Zuesn+^AgQ}5YhXhCW!j|mq0y#J0vpVv#pL;D!<*{nHuWR&^U)vxK|eD*{gJD^ms=Cxhiz_%q(+5f~Li&=W(W0F&FQs!r8B6HWv3<@=3t4OR_% zq7I$<_}ME1)Iz4%0FX9+7(qGt9*0L4I30!AT#3n*;_XWmVwjg{-RUA9!y7|?;y4x- z7Jh)s%&b3U1xQi^k5~lg400^y#OA3NHiKd~D8zh9Or%gu7Hm`Vob)C6TYiN2puXhM zEu>JZgsGA@qCBNXt7#@_qLf-feVhPUhR&W@x=AyseRoJVNI}3nV$HGk{*|}l8=w5Jq;%^7Sk(n zMa76TA{rW{(d~&(?Mod10d4w?W9V(RJn+-a!z1cjwICaPMLT>n$`wIRMopcQpI`TQ z^2l;g-JsD<=>QFjM+}z+&5BhUc2;@%PJj*N2M>zQ2D^hc1DoDVX+mzjqjnB)Tam9F z2#K%VP`cLec}CH5gPe`|l|ib4z*^y>b#X&mPE-wYq@!%~FS;T%O%uMkAe4zw48h5l zbYAC7A99d}mxFndPTH)E(y?@=tSY}c3+CZL1O~cAlL`JN^-uVgQ;V^N*sdNq?>^$9 z_2GK*1ayb$9NgEi4*!$Lk?V*~p!Zz}Z8H!By1p41k1mPU6lx_PDZ!<($SiiB=I0vF zZ&dvLIfUR#mpuazum;O@$QMW@3$oD&Ix$0O1qE=Q$<>d=$F{crz@;sij0@Ry>iZr& zXQf{T&vCi*0DPi{KFS#}Bnae7PpfP|H3>9)JQwY{K;7NM zP+KWzhXruSpf}L;3yjOwXOfwZY2e7VxsO07Lx_~&%?7L~2*u_-Yussm#`ePFrA9rS z<Zf}GUEo9S+=ZzMzxCHxVklvvqov#>yfF*N=PV~pJi z;{#?A#!i+$1N5o68=ZWcL@nUTGw7ELw*~@?kwSo4J1wjg&SM zbWNf8llv0l0HJ%jyxj`DW*^^5SXdc+4^w`Ac2~BCUr0-+ox`&_>}=@c@f;L-iL!y= zDacS!l91nL%+PJduyL=0Gj%BuyXR2ad?#+t?G^9esUi^D4u6X9Ph<2hGBYwLUq$pT zwG&)!?O{V}NihoPco2&A^TS~az~~eBZ3N`HiZ$ZaRdX)5+RY!X-cVA8DG(9)-KP&i zT7s?WJMW@ZC0EVd+}w`Lv}~k$ujI45*kYHQbPsG967&#OIO&;>}$+${6u6Q5ySv zU&NoYu&}W`%<$rJQFP`oz(&kG_JVI=_YLY}av$9{gbXH&Kkq?YF8c(w6REbY7Z-Xb zYlOl3anGvixgF(92-v&L4JHdj{QwBlw?xJ_{D$-X9NoG7iA z1X!XnSr=jY&B{3!i$Cv6-Bt%Z9+DcNu^y zp*k;J%OQdd*8L6*V2$bT*f%pXW1!jkowajsV#q+($jH+8FrGU(vb`>*p7qBl2|ce~ z&H~c@oPtq-Zd-*Zw(Iif`N8?;sV46rO1Hd>in6m?l?nau8TnvvN3rMdN z8GfCj19uI;Gt=H@Gx9HA0@VoHvr2ghIhsSwIAn@?W_YD_Dr=}<^+o;+!85(8O^3Lb zW-pS3f^~MAz1TNDW)?Gp5Mf65R+mQfO&P9KG zodvuLW_moLmpl07BN__hlvNzktUl-f92d5sOoxF`^~TeN>y_LQP+@w*iv-jZz%BI? zjmvXD2?YY4w99k)9FMZwypY^7v+IO8lTE?~gUux?!7cd-Q9Eh)`qo|~h;#sM5WIRq zJZ{aqyt;}R7?}jFVBi`p`E%%N4xGdMfQU%O^q0V0;MdmGA??e)0%rBmMtbkwp(XaB z0rBM~J0#yw5_Urn_du9IQd5%*fT6*PKcj1LK;j^sHzH|OANPt8IDemCUK%==C|dmG z{cSUPN7w=-7yrM;4*bMmK@7Hy+C6Le#NFA+M9z`pPDdx4O%FF42_h!0_MXvQlVR_x zp+eB2dUEr7rLh+i_rTwrK5?QN{e6SagcH92Pb2o3Tf+g!-Grt zMD|m^^6@TVul)Lk41L~IuQvsO>| zc_tnAqmN2@ou*N)?)=yE0Xz{z=4P(=*;p2u>63DNa}TA{>6Fxv@o+3TE+n$i=`;@i zhRbl7nNjv0WH3GmE-`&UPi#o+7=1oS=0GZQ-1|b?I@~WpV+y>@Tn*Pc^P4nbb8_fs zN!{+(zzFX5J|x{6s}@1O;co|)9Z_ornpV7y01^R@!Lo55?(dZWc5%ZNJfPZdsO`|S zoIAo#LKI-$ZZMB75HaAzH|TE%@}i}T41e=iF#rWMTK_V-fcu+3Y(O6#Q0&8-AX4hWK`sdPz}#kxmLw!1L80!)e6u zoWIHOtr!3XK{Yh_64zz4LC0A_LpGe$;u>mP`Gpm=sTT^2XwrV~-2)d42gjz0@P4OS zko?1U0BT(ND3@)hKb*Ng&&~inbd_Uf_VUfff9aR?;VFaWpr+CB5d}SN zy#khN@VW6Hi_U)au`D~VD!VKj4cxb%K&x^CYvCk*WEqxE+oawtbZ-J|RCk$EKVxEn z{KSudUarZ)@-Ck_|8>qzX>kw4GV0Mnx&R9^{~swXdf!bF%88G2O7N>-!Hd<3pjNeBKz zt_Nj2Bvg~ksJWDKhHS)?%luqh1GI`(zk8sxcX_Bsk9m2CS$W8tpCB+t;*n;}5BhuC z2GXSha!7pnEKI2cTdAx*xISU3LjwM2B)YaWYt+b)s_S0N$>q;Cxd5N~GI3bBTpLgr#Q$zIM+ZQfres* zE+5B9Wclu=!Ytx0>1kG7^WSI?K6qN|U7gOgsFIsi@B(b6Y8Ifaja)c(5IZQw_hNIH0?rP<-#86rH!OD&-v;|NaH?iApB!0Io5!nK*4xY=Htk$p<=(%i0#x|Hx|$`tWcQO3ey?*5(5i7q z{C3)#r2?HfxO+yqdtt+uePBLp+IMkv4U)~Y*GO4AzUlO@sgdwAJuSKdQ$Q4 z-{J3L;Sb)}EywWbn-AZoQeWQ=M9D9xaI4#r$(#Ny>dV`}75p=6)HOi2Q0{f;1VDe{ zH>Tx=4tsbpjVP(chb zjDe)h*&>g95iC1{RxZr8douLRk3;ztHps9must-D(qk&Rcmb*RFjX2T3j?lCk&(m38texHkIHvIQKrVWl~)Kk^wqE zkRbs90UeM><68-C7ukeki-|&Z%vHbNpw;=s}<)Igp z;mw%pL*X35L{e#!s%F8=N2f zAOldMt9j_~n6J97JL;U*5e}#i0R>?Jd;k0J055Q>uOc%oiSO?0Y~-8s`UE!08oC7J zyq!%U`ccr%wpr@q`6D~q5UdfQc`mx($A&n+>R^Nqc#doA_NhZR1xMjXUpuG{H#-3e zI-ql*wzQc)rxO&MZ2G3DQ>np>^R&#zGkt9F;>~8oSTyGJ4IjORzObNY9%d1N6lB7gF+rX*cnvz^P7A_iE8Lv!rJPD%+jfx*BZMn8D`4?eTw+YX!<+3Na~f=!Iyp3 z^_uHz4H<_pm#)V3<7e@O88)Lg(0M;1uz|9r`RA%Ut#b=QPuypKq|sj;?LfY}@U4i? zWib*v+wB984M)MZNaBb=iv_oLYHAn)wh>e!pHU;dg38F44mxk9fL=PHOC)&+SFvJ;V+bdS8> zY=pihvA-AQR6z@wQGHCSp@X+BCZA9 zD?2h?I(yz!gALp~Wi3-x6K69RpbZhjW}*S%EZDI8*_Ys`K}M$Xx#2y(wLTdS4?$IU z$0^chtTtQ6_98!6Tb*xStMXSiAr)0PFgg!%2X3{&piKziGgIEFYL~uCUzpTiRA{`V z(;_ay?#5+z92ccB6TBn(ZqIZ}jv}qm%7fMs9pdws@&K08BrXbbr+_-7Yu+P<_;VRjS6QtQr3{0{Rb%Zkwk{10d0K_%> zsA{BsdZ!(oCgJS;c6a|wy<+)?Kw#*K%k^R5RcG?jUVHmk_SZf&nU^rh%A0hPw6?Dt zsTJ5FpJ!`gwQ~pYa~&J_GvDReKV!x~(T>{PRm*iF3|zwCF)}Y8&3&$Sv>^qQ)(#Ss zXcl#x*R7Kyz)I=-Q>5?T1%5g?hOk~!DaZfvj*V+edmZ~+3NZbTP`pz`y&-Ytnisuy zux=Oe<*Q8X+FH04lr2?m-9@`DWA1nFxYYc(QBn{K0*E=eJqi?rN3#ktMF9;QaVH^T z4$`=jh9>>_*7mL@3n;~|vudcu)i#LNHJdJaTwbF@Fj-ngW}!RMeP}JyUMy`CP1@~M zha3&Uw}U#_sf3G9<}M?cA8c~-8hOIdGoR^*9i#+5;^R|yK#>NaytucAcO#eg0+bB= zt(ip2F{T=BzJYHB(%P`sbFbT4SjQ0$c5*Sr9ghUULa{q4JNJ3Jqobq$exY6Bv~CRj z!95ap*E$k|fS|(k;<36yP{{UAlbd785`Epeh0P=JW7xIbsjN^c@egzy@?N_2(%}(2 z`m5{xPEiBjKRLdal0svH?d`I_51T$)oqZX_`tVQbnP~2@X5F609bgXNyZaeC2&r#o zvIQ8V_U%ds^`?%LgMokgaYl%KcplT|Io@q5 z4i4XAV#+TF+08;&9e=V0(pLR5eh(wpe?PMv$-$7Op>N`4@DVy-tJ zEb#m?pqz)<_=oXV4zNH%`y@d+>8SioZ{<-3L8#1SlF&}EYF4x2cTD!-VLPyhO8vyA z`-4}n6`c37coI_5U;ry*(DBB+sE75X1=UVHM?j*FY6kGP81Ee}=T@-OM~hn1hL(pAJtDRYvPU#owWW6Q83e)e+3 z{7??U4Gf(IUqyI-U4I>|X5mvWOhjjJN7P;?OiQ+G^hNp)MSIUNedBRIhi_rUhPD_2 z1&yCgK~a&>`|`L6Ko67du4`2~&PX5yyf%QHAo8adxPR?6RaMVLp7fgCBlN2;V7b;U z=jE3=)3XXJ^0Vl4?|DB6v}i&0mQ55?kma5KA*PbcHK#s_fTQ3v{`&z#AUV~}O{|o* z@N0yPOCr^0--VP#d1HqCz6DnfHb+vVf$Y_*>x-kmp!6B<1PJ+G@prS|q&efzC}GKONDhP3$)}tN)zj8Uk~5#R)`w$3OJ9l zRhfFWd|vmd{)OBIclq0oeqi6j-HGixMh_Rw&9B0MVV=97^74t!CSLm3;B+AM@!UKO zDIrDjg@sb;?f&sDJfygsA=l%li%|Z9y5@kHfr^~IdfX{Z06lm!j?fij#8vHfWe?i>| zgEU!b>JV&$fwvLaeX0OKj`0M^A-+|_M8(CvpvZ=H&P?_W4P!uXT9z_I@?@Dyy!DFT z8sW2>SjqneaJh4Gn8Co2-Jzc)OCQHtI($}ob2Vj7L_z|v&R52{KO5&c;Na|I@zO6=+#qI16qr zYu!~9fi|T^{=2Z!ly=U!CjK_&jbheei!yx|fIBY?J&wgEa;Bb0O^sTi9xyD{@14Xe z_UtzZ3*Y_tt1FLGs2-iy`xH(d5UnEPeKhAN|WN6;4bA8xJw%9ro*^73gV_aR(p=#M3YK;?5kG&aC^ zqpM3z4PVJMI?r3dC&+MT739c3D}_9!~)6UmtC=Hv+1X zq@7=gAdig2V=7zSx1kZPu5J1M26_e{-O0jb!Z!Xlc7M{o;C*0Z1s zWkw}$NT{NuZeKYmlNCIePuOy8$6m^mi@+FU@^nB0$-oN^opnpCuX5Lyw*q^1cLj{= z8(UG5&=OH93u$`2Bu$Vc7$i5`Dy^Nc{AZkQiM%{Jl62Q3U|Wk2he2WE`i9+4c5Ywb zf4F)Ju&BbWYxn?)AR!@*pn{0fodQy#q@pwqAt8+*l5t$y^z#pU>_qTtwsOHxxL6t)h6EgU)b*}x_5wN3(UDH+$V^jhqlM)tMYG@$8cA0w* zgHdw5;nbrvrDuD$XO23o9cytLbavM@A%#zFEd!}`jac1$1Ep<7R{v-nnVT_uKBq^} zKi}OO@R7-WrMvg&eQ)&Oqrb%+ERheW#63?{EQ1insqg@a=8m0IGVPD5R}nHeV&Bo< zd@>hJ(1(1Io6Q}O)p)=?kuPlbA2@TkJ?;Nm;&)RBgOnThptZ2Io!z%Pcw!lk>Te*C zNO=rXHBeQ^aO}TmF1-;mRrQ@D?!DX zRMFiwr>OV;J~Qy&VEph(Z{Vbxv3>xM!NA}ezVAnWe^bC?zhNWys2W(_P%^{J7yj6- zt*u0bfF$COS#$k@{`>lZ{@YDYm;gc<@csWUdN=N7-T%Yx&T#lW6xlWY)U=B0;980T z5|a66YO*ShqQPDXy+K1r%Mqvt`?T9dPa%>8;*0(?zEtcs7C8Kc@cOiyOk)Oz)tYVB zF4sI$oJYy7-1w}lg&qo6sHY-c-r?c$;N>FFP-GjtiLYhH=j4#P~5k0jlz6`LjkPh;pMckbNgIjOQ}3F`{D`0bWy>Rw-i*XT zna!nQQq%(yKm9qDZ?HJi-7N?%+k8>cr6+6rhWM;qw`J;GiUMf+FxlBpc6|UvDiGA~ zmbs*4_YWLM_3+(uJ~QDE0V8U!S_3IRZhKi+WNR=%8qn&{w9gG4vkKa(9;%E{M+HPg=c% z9XCE*R@dN1(bMa~M6#F3YH|)|p40pQeBlf20x79@{a)+_;Ne98I!s5EO;+pa z)Awa%!hpDEZQ!8%Hzl)%5ny;$F&w{%Y}S+^!MKkc{`OOfM?<@CvjBMr@ojYy{(& zZb|#vmQ4?$h@L0Zl1RC2nw0eSCpv5yGM>r9_LT>IKbFvl29&WE}?<0*&l4{jnEb8EM7EPqRM*fpj2g1-cYB(DtHCHE$yeQ@Hc5 z-c2fSelpPa6^wg-W|U!54h1S7w_4+!(OEHoq72%*X~53|APw1YZf>ONNz?$HE`gnm zjhSb!<25T|=Xkw{S(I;N|2Z|6t7L-rL2{KI!av%;`_azH{Y@J)-3Wp5f`n4tmz0?~ zYyY$dZib3{Z+iZcMBBsu6V)!h*y|=~-041;C7}412r#INvCU;UQ{*jB#DMOSiiXBA zPzCRPqL`Nw0gFMGhWwNlI{hm(H~Lj&S!F_59(Z>EUqQ-vk6Xm+nO9DjRJX$a zR^jTR(cxRtihkd+?nZ{vQK^8;_t-skgveDXmuu0>8k`9c3N=V`uq`a=jAnJxoXMv?q_R=rw>FMhr0B7BRW(MS~O zHbd&!uJhm2S_HlnHyxXcJ}@#5dmj%qS5|9|N>496{^py-gR=w(#XsyTl3{Je*O~7NC5;BLWaE@gcyjbaC8p1=!h@U%!40ths(k zzl0f{u9ZmC_yh`tUq>D_RWSrdCF2XPTA#%U07~qt?ia4V-bAFNt^OqW-^D>DcnU@m zep&RzKK?NeX5Ua0E;2n!mjN2tDSQ3%DUNUvJ$UPbgu+f>M-Ti$((B#pJXMH|q!tW%E(|G>;dTPzWfkb6}sW^O&JK1&uJc0$VzhMrgWBlIs z)mXw?B=bj%9hf%puK9s!moi;8>cYy|+2rXbYE;13dw55jkz2FKCl?9`V0Q!LEKXNK zW(6Kx$QOB|P@HXL$4`+E)Ctdv+uj?1ON;W=Sc*;JEWQ`}ocIhlyKsy*Z_p zA3yE3Yqd}PSwT2C5R6>CHosEXAETZp@>ZUmG*@(hC=xlTmB7cqBTc~+KMqL}Pm z@5AScSO3(=lL1P81=wvwFDf`z@jVwew!A1=WIhHR)bP+%T^1sE%=(?_qIt+K^o5=e z9yae&@MaIa=$bb+|G=C3Bv*e@i2e9%PDE5n=9K$dwa0r!x&bB~L$;rG>Uxz+`1?$b zfUpmCxC4KNg(WYClF~!FDr$-+?O~|miP9jYLOS#k<2eBY(hYFOmLItzQGU-X{qFZg zmHQo(Hu%M%%3%k1tD}5IRTqYGum%v^0R!w>Z1@LenJ0!CV$L9~{Jls?6Qy?xjH;XS z&}CeJx3@=auwNh^&uq@H-RM45pcY+xV0QYqjTc`bw9V{cdtZ)9Y|o=6(5vHCY%ZDu zh5VvUzQG;u6^@>S?mIoNINqtRihw-w3Gxow_754~XxMEgX|6tiX9n5Hp#`63opB>; z%`2?@WmqI&HNVcu$yxhqCHM25?!ww|&718(rflJf!CP{PraZS$+G(OW4rWYZ-$erR z?x3hOr62n0>|6Yoj^7DT;C?hz_RjC_82^ugQM$#!h1PC?^S)RxM2lV>Bw$HO%8r!4 z9&Yvd%8|iHNl)b%7ODGc74w>A>MNo}?S@Nt=y?`w6w97`sSMVci%8PWy82L^uowyY zX{Zme?^^*z!J8tck!Ys-Wz;>DrN-IEfb?dPOWR$o5h}9baC_(rBx2AKw*7C<&J_#e%HvID9!3{^$>ype15>S7yB*$rXA zN95VZ_z-|y6Wouw)kJFF%v~}3lh8%^`VY&XOp|8sALVFQ!pYBo(=0#Le$@sHpwn_2 zefy0kr-4!AK3mjf-wH7y4X+9*eUWT6ii6KK5E6U1f&do30`@FPKLX$C^pZ|lu`YAC z;U21?EZQ-npg9yPEUauAg)X-n9| zi~mF9qy_UvQuxVdqHo3N%^w5lY#QLAQ8xz#ca>ZK12#tooUW}hSlXuy(m|6k%%^CI zOv;T(Pgw9iMTza~B<|GwHdtL--IVhjZ{>K9$I9W zG-!QXjh^yd(V%uHw~h%HYEMzIoE)1vz)X%ZT(loY^EBvg%d~cbQ8wauAJXUlGEz65 z1(4Q8a`EyuEEV8+W72!orru5{eN0aXQmHk-=?r94Nz!tA^uEHc|2@kyYMezZ zcFw)@`MCCM5Z8Hfe;B<^(Erj$G7pz4Xkx@b_C^=C_QdD+pA6O7)97m{wv+SB9?td0 zjUuhe-}Y^fr%W97<1)5$wEb6CHazp*eqZALoxhoT3vh^6)8RLDb_Y+Zi6aE^B1DAHe=pPS8PGUSA!Kf30$IEE*xAWSk1>yfM22%3BL03h=Alw69E zV#!PC@U{4!3dg@Ef1E}s!0q&6?a}tStZ~ll_qa-VCMqNE%Br|S!x2YKmk%gFyeuX; zs4er`&scUYz&=d2VJ43bYh8UE`$dIhRUu(+<)tSG{e3GY+5CS>Wa1*dkTrBsnm)N&{6 zmoeJ|&i{Y^9EqgS^MmP(O5ugotIp_0kH(J6*DJFW%3Fv0{5+-pc0_y~uJ-GEt!+DA zTq@dqrt`nwsCC4%i<^=`pGJG>gS^Z7fS87fB+cs431Ci#))T|!{s`eiq?y}gLQShw#QpP^?j|d@Z zJ~=Da_d2k%q;M@1xxcgG;cmH8ez@y%Xf{fUmD=&7W8nY4{eeG37*@poS8@147&z^U z{C_lhA4XTS<6FY?f+oCvKsC3h??CCoyeCvv5M$L7^XnDD#R{l)`S!*LEdC7o^nWf8 z${9N7W2;MF^-3zFdV}SgeNR)#w}+g3d>ufc>)XYZVq)mIe;3N5B2}L@z*0XE^^YiX zWNpVUi!+mN#Q@!in#FqmbppA@M}qWYa3Ht_>Tn4kY69Q>an<;$1HKRP@G4JcNf<-+ z@vEFK?f}>sZw;c}8`jpG58-PV5ZpKPrB zaXjRVwrQL}hj|K?)qKcv_kM8ho$olj@p_RJdUDFmom!sb_qp<5Lp}MX=Y1g3z|G4` zt_|2i*x515(&B^!W>B%4_Qr`cx0@Ik#2v^afBW{MoQ{U(_0(;Q1OP(wDk^k>b##Gz zpgCwy=mAlN0e1i~6TrTW1xx`eQ9|k)hig}{dwGk{z?Ro-L6e%MPzIs#&ImTV3wzk{ zYL~k#Qb=Z2GN#N2pMl1rfPet>AEilvA@FatHDLe;7l?cT4PpR%xt#_u0Z&Kt#@IED ztRYt)A7-Ei3PE|swX_hwRUfnW8D=aHJCw}7QVZ|=Anhzy01_w&AY?R)tTkkYioj^- zP~ihEu8{iuKB=Rb!-gyIy#ep`_xB=3f-~G|zfv-EvABrusy(@CW^TS$2%nMk%V6_z zEPbEC2gQq=4w8j8G|SKrM|Vw|(HNA+N@8e-vo=yDuLh}SQ>l84b;%FyR9SWscX~bs zA6_A6=6^tVehv922K-8C#mKPN$?3gTO4FFFn-($0k&MD`5gcPj(sjPs;27d>bjtc0}3sev*CA~ksf*(X_O4xE-x+3&;9b7+>_d_ zBA~vjF>EGah|mN8d8zJ;)XFw|Xs-PcxJPa8yJ|icSH6|(MHd%GAz}T6f;xbSuei9l zXu|F%9`&5$IhJ;=qx7?F$5j8;Gv-%KMj!nBt_VSap2rsXTi^ra0302P%|)m$LH7~x z4QRJLM_cz4HXGPT7I$t|?;w(O$ZSYr5V9=#1>>YfW%mV=Y{p3;5P4Z{r^SmM{_*^_ zpU5pPB5*4lL?E<_+OZg|X zwW9?iGTzW!m}yH}2Q{DAiJmRP$b<1Id( zm%lkQ<1TG9;TgoIp9tI7*beeZ*C}9^^9}t`fxGd18!5k3=mqc*$UO;`)4lNGr9v2P zy9gbR*L%-6P6z{SFM^3-tN}ZN)p~Qp&-@}wt&upS(c=0B9p(Fq(NXe_1dS}qy4AI% zl}~Y{R_X!-RmgpRj*tGe=Y8OPPCu5X#`iKD$kGfnloGS*5oHTqR`sd35p^DV^f42d z$%~5pke6@%7|Y+lf-{;O5pAud zO@Dk0QVocdB4i7p50jYb7ocP$O_DL~{SXAxWT{h`xll5au^#53)fRFAnP}*+xYx1; z+K_|fI)f>O`LeG-32x6@++XUd(f`C7x_l83K=t(f8TQbYqXPtz!0;?W2!ZYxlie?- z@cGm-A9bAe2u9iYm~#uwCK7`8Fj4BA+2(k$J819kt)_>YWj8kR8~16!u(~5SeUZ|b z$>A%O4N~fzZ)b~K@5x6uexB(FUu4T2*@_wT20^5>1E#lXPT!)6Tyxe=5K0}cp4+;E z0+|~d)wWv(M)abjbOB^7eO}Ls;6CObWgXv$tJFiN{afbcEU|7+TuBf5WBn2je^@(D zk0eoA&^8+WyP8=MrVIj!bhYqY8bl9h!nK4$a<#_`9Vd?zO>CyDPaV3rmM^7n+Kptd znBEYFKCcfMl)jyV!o?7y?+J=*hWCBbh@401P)F>RA2k$JoG3O$%E$kWHR5YEey2@c zAucEfaphm1Nqg(p!x&0QN)iX}Kd$+I7V5_91R+MS34leZ{cehcff} z)6*iyd5&+iJ0dS++1W|SwgRp|=r!s;zr0^(zq`$!BKBLyK}dbJb1cNA7(DUl_)1D@ zDy8W>0R=PjkJwv+bDrQBjOG)`;-F2#Dq;j*pNMhy*kba=JFC<9lXLTwi$t~95#G^$ znJ=ZazZooPq`npP&c9$1dRb(h))|n2cAM;omUIwpKOZ;@AqtfgJW04|CmMf10D(!O zAvL=C<22bvKhD1=y{rEC>67j9h2$v!C@$uOz$Ow%gS@v&5Bvd?h`{OyS`vytf$QR7 zFue}xHJTEDc^Looj`sG2vUJ8PPeDQl=q54QyARPJ% zyVCP(eCv3e-&5E@uV%RSk_X2frK$7#l7wR1#=&IikIXj@yc0S*<&u@}(!Hoa_6x zoTZ`k_+S2_F4HReMP8Js*`@7zTiNY({Vpb&7lm*K=O;0I@HrX@1d+lsd z(H5Uc19x+ZzBwf@iEOzD%I8UW5Cj6wnj^H0>XIxh!dm|C)#U>o)Fn{~Qnn7+xu|^S zj1wh3AEKmVW#CaeQ!`7A+$TLbf=E&-$#+yyrREwx4LwYPs`+?LkOj(`Nzg z@~Y43KJYJLGDJ9Bf4&q73(df2blF~^)qJx*HxQQwn*NIV+gWjYMb5uSIJ?iTUz`A< z7FyJ;@$>UsLS|s#5Jayu{%7RI0o&E|KG5)paZ+No?Ez( zbxk&OeAW8t8^+?n!K1a7Yl|bgh>J%DD;*Kw$trp6wN~DkZB#wA# zg0o~!U+jcl(E{;9vBP>fWN#S>>M959T|q%%YGnlb;S*5nIuGIQOJ*u?kUCPQ7On(j zsFvGBQZq0(FwPcoMn~bLC%b*OUh@NI40JvR_9SoB9?rKta3s)jESbUWve`?@gDjX& z2174V`=S*)GgiU8$)07{xm)VEXLVI8_M0;9M3HyZ12wPaq2Vfm#KoF}jBbC2KIf#5o?y2RBT9#y#{=z{Y|v{&Ve4a&W{VEC1Qf zwIhd90-O5i?i)DE#n-3Fpng(u`hwnLrDFaF$}9t;w07B*E*i&Fpu+^Eh?!OG;X^=p z#T_i7^62-U10I3!(e-Eeg>9?y$zP}V$Wp(DU*!Pwhnm{sT^5fm*XUp{)CqJn{E|SA z@WP5Dbj;4@f%McR2xvxU+iS*%Q7SGUNyNk+XHcNx1}ec(-makCow=$_9OSo5YL{aU7RWA(p?ZWPOa-6 zVQsK^amB~{226h@GY0OA&}_U5TuH{Y?!L&~RYA(MM@M;vDsdQjdB48L($%k9c$|zA ze!?;H@WUY{C{nYjJf0cDj8$XKvwUmC00@2*j)aNhZcDL?>M7 zBP?^*y!Bd{S)=!qq4H-^1HOtBP(%qTpF$9-qW5EaV{q0UV#U>Fuag;vAq&fPk<0+Z zbroy-XA94=%+5|QHyqAYpFAl-o_V%rXwVp3TLR%=3K9bg=H2G_t>M!>T1}(%=RBD} zLmFs<>W^bI!Pj|7fZfS~^K0;!8k*aEl(;ao>_WB37*L)dBLm8D)*^|@5HAR z6UNTL4zyO7RwjFCpJqPN1?sDPi6B@+siwl5D0e-1QGbKO!j$IEq{5WkW78+t39!A^yH6PC7{&D>- zXXFQEQPWSu*vHoa!xy1{Vx37H-ZAggG>9}}x9Uq8acBtLdVuGp&I8Jn$%?lFCJA|Y zt-WHwkIxPXaR+dG$1@wDStqojLOu1bTQ?kqF&O;(fKjUVql{ZYbU2qB7*DGQ86H=kWS9h=)U8|K7>Q<-f)*UJsua zis?m5Y8V-Uy)l^Y?8)Z=&;}p^Id=!s3t5K7-&0CX=D|H$=k&VaJ!r2T~t+A~Q|tL{NRH@fiDETvOVZJ{aj5ofIF7^s*cIAnHoOKb>F%@@xWVVc>kna{KFZUPiwP8-a z7R1PU$E)3R*)5Cf1Kcbi^|LfeOGD!i5M*nM+dT&U9aB4lvna0`cu>rR=H>&y9=L&& zg{RfQ>x{6Q<&_^LTfENh!wqV=&<<h3BB+CCKE%YU_PnX?XM8n z+fV+~Y*@%$h3R`_+}6Ga6^Kd4O3p;J&<2SucJ(y3%tQ&<+t|FR#RG!s>;GJO2Udp2 zfR@R?_-Y)|qynjHwlEtAyBrk}Rg;g~+LU`TC7B7ih|p>deQs`UmVDKuNEW25P;b-Y zdSE1k#c#s=R_Uk)oQE=0eaQmE?07i=V+x6>leaVlswW%2ynSf2l{mrmn z+5Hh2J3&$ojfrd6MIdiU`%~6_QaE#G-wy%vY5*-r^?;V&L>LEUSbp5TCwIQ=(T60}3>;n(lLp&dY0Hfm^;4d7y~aSIURTMgyUFdcVema}qpB|+ zarl?2){9)D?zm*QS_D~5aC{Nq7(6M#pq*M2WHHS@b3a`P?3Mw#LGUXu(#mOHSWg69 zOeaXKl#jhsP*DjiB8|~6wG>F-`-T0xJKq94kvfv64A}k`>IXhb{;_POmc3?1=79AA zNm^pv!RrS$9A#rkBQ{D;o?Hbptr@3hcqSl2Y>pZ_j!;49a4=vCbQuBJHg$Lpw@~Mi zw+4TRdv6QaJfO_GI)VV|wTox=Ytu}*fp&IE7CccfCu%0wdplP;EFYS;^?{ZSjqI7^VwG_ z?}Mf27*LjI_4Y6KIB)FVrSZ4FZtc0YCcAls-fhUW_5N|#rx{Bu)mV*o(i4fB9E`Puf5o-3^glJ%WBo*qB6sXWX4hWn9D+E z5OhbhxDW@<23%W%^Z{Rr$tc*mU-gdV3xf+X1^bw8(G@U*#P_(BDW+ z8!XsJIAGJT$c5IR8)yszJ(HLN8ZB(ftzYud2Uk#Awi%5^yUxe;_V((5{{|9)Ni4g* z-cc)CGiR^ysonxxbg%rbp%*n4P3%XbEB(yJVs z%+1Ze$IbpIMb=-}OKrjn_!ULSTzp`j759O1T6IR+)tvAHH(-v{^~?JZ^+9`X^_d4U9c z+!)iY5xE{IU&WY#z(Jc8Rp^)g$q3%sHg}*hvT)9lf+YnwDOT; zcWJ>=(>_UKO9e%}B5wU*v6oF`ej^rDhjh`41&VL)F9&I7Wwh~wxMF}lUcx9h@?)qw zpAPw=?3J3avhNHdzQU5Xf~NW1eKUI(BTQRYg?K@Otw%AQ*Aq>s729_dsG4}c4O#$m zXR&P=8f}qK(E`u6zsTSlQf?}_UCq%`%VWkR3p_ee*qrMGpuJ0KJDT?pP>rEzO29=9 zIHt;+^GcKIo_R?Oh*)yo-qH|%eP#n~KxfWFpa7?RbRGTy`gP-WqR1_7QPHRlj&FTB zH^06=8@?CHB1P+KbL4b3E%ok6$a~HGpz!c_LWn33dfulzhz6s_nwnN%;T8LEEU6p21rbT&A z01qe_5PC1yPV@GDe5|4}&=a-3Zewp~Npk{*H31RDmawzHxb{a3AG1RajOOnR;TT5eVdp21eK<<#FpmIRTGkyGMNO_%#;|{@Pt->iu7_Hn3U7WtRO!6t7zr~?OJ>;R~!8NgqDhVv* z1H;3s&KB&HATk^_zZjA+Mt})qH-5w`;8m>858{E6iYnm5GpmB}D{0m7 zLiTIlas+>$B-4*r{#y_0r%Tii=%QOD`RLD12vxh}@P;>7WZ30}U^#GFRRAFloSL}= zltUi69bAL%iJdA76Lj`BkMgm=?}EXpC*EqQ=?|bkrUhCI(}!V9 zVj6Lj)DrIeC2(o!h56R74=^y$Io1e<~eo3u1D82-;LC{TX< zIOv(NaTri`ABvt`zn>N*RXbU}0i6a3C}r+J*#Qb(3k>JONqeU6r3pHz>-b)+9jDEP z?S@{{&%AP1yz@iKLA;NH=c>@tS8PK2%QkbNo=b$Q#!e?T~& zvw`!}c6jr(fK&P%VPUZAdC~1%Y>?kfl1fWUds|3|8cY&TYFb)mUZ*w#W^+$~;&l6L5P@lo<^d%`h7k|y_>a&BXjJ5uFG0j*B7Y@TRYfA9rM#RT+sZXgmIPiky?*hxS z=#ILm5nXY2;Rs;$@hmFopq*~2l8y6d5;?o0Ll_$I47!pMcRO~ZoFzJ2B)&ZK9yk7P4`U>$y6idmD~si zM$**L+%<9fw*(1V^cLAgL|&|IR#}4?hH^Ff2soE@O~2A1u{q>y`S0JOVQ76#SX4Nr zpzmGvDj2)BwyUa;C8)7)I(_z(p6|4aub%u1u=^fe&%C)yFF$2YoxjDiq^5JxF@CR){lYnUjsZkG@MnJmD>Z+9UP(xdPOX(nqc>M2iNMMFEtM?=a3hC*M;UdAZ&dC*H=mCorg7b zSXLZgo&8+X`)14on)oGqL9|4J@JsZr_$wo?8@nq>5=4j^Lo@hs2xx09SfhOg+E+I zvuWzn2?_~F)5K$x@C@eGJLTs6zYxo_gZ~H8(Dh1;v>p$}vyBRN3QXEla8_M9?JE-rIs*bIWqWrOqN2SOi^pwo_XW zB~G;PWVHfM;lC!y{~<=WhI8F-R{ftdtp9Uk6z4GZA1~(rS|_JrIj{D{taoWe7q#Qt zMHcc7N@5YdOKgFpZWE>304Za?*AAh~c=zWCc(?%PaXi`L%)OZnE{@oNFqlUB@Q z6`)94vkbl2lWD_=J(()ylpPMHE7^7uda&Tg&^8n2Lm^OkGJjxr+xOvYtSlkfNkoL- z{0gftXrmWRX+Eq%N+s7%$2;F(=~w875xZSppZUxlCmQy@(f#B)usaH94AhF678rT| z=~xIQQBHpARza~20?|+I%@|B@rwJt%QzUSNbydRRcB<*#Zsi(H_4CkW^?R6l5`{1i zkTm*WQ7`t8`^)=2v1hJKGrtQO?=Rdc(9|i=89&^9Ub&;`7FG&h&tCk8xZ(>RyR?Nh zT5w^l7vVpfGX~hvJd(+SwBr^3@b}gIgaR8kFNeIeue#qpRdVN7&(pS|lf-t1j&x4l zwmTFuX{v;zVlP1^!q`t%07qHn(3wk;#l|A`PtRgRc5~5^TSs2q3e%tQmKgF($0@|mFR*U#rJ&EaI6Z{WJv znsTV#dL4?%8ODpV1;&Fi$Gh&>8^O{2W!_-MEP|3?&_%D>;07+eJsZY)x#9Jn{}wr) z_23)cqBkj^Yzd35MW$%PtkUF|>@3r69d&l$S(oO5N#)shl)mC@z~2~LklT=|=M{sX zQMV!Y^s(`)CbS*zYhe5=nklA7+Tj#rp4m_%%>X1wl~jH+Wo>guy=vvwnWYHfpuK(X z-eXqQ$;I@iN--a1U?+aiJ(7yKePV72w8GFlQ8(?UteazU978W_k%iAuh-3zMW@TOp z6f;FHhX{}l3fT2N9cTTwG1m(nzkR~Vp-zcqaTj6WPsDs8eT9)2bkVQZGIgP=s-*dg zf91(@>gD>S)G8r76%7$-M}G;9z|5Wb*;WPYd&8Z7yXAesQ41wnnug^vtvbDex1fUJr_TLYw3 zytVuWE$!$nHsx2O5UPi+fk!Z4_0rrJkLt@Z(DN38 z>2xZQ&%SYQETOO3Aw+ zi-80|-t48X-WelAv?7VTW+I6zuyzqb%(&N69)?|QT_rxBlzABVF`j3phfe>}(H!h` z&B6T}O~q~5#><*nhPx91Bzgxn+uu;9;H#}64S z=#Zus6%`F3fKtSdethS6-dCa*k@n=tA3?2Phb?JQp@}o2TL9*D%SRF2CK4L7O1?yh zR$l753i&3(zESW0jkw^NqH%}1@b#V}I9po(eG`NsxX;a<*Ycb}2yMt$VQoqBY3zf5 zA@14kCLQ87S3thRRaLc19O`&8-W=B(HHb$9`7e$lGohd$6g#DYE55MtVmMzf4niqB*|;-H%4l4|3UBE5bVIP9gbDLywGmF7vecXKTUG+O7gUf?C`Q( zK{u~>#rbbgJ-Fs`pt@}%vhPowNXpsEHQf^(jE|9qR1!DhYFw*VOA!^8#!c^PdEGqE z!B-oM2}ketmW~kIZuf8Buqg}2&T#}vCTPz&ZP=)_1Ml8FJQX#qj>flNKAfILsY-|3 zlpe~^^ zj|~2M4ftb&ykD(;jVfb@jPhg#sE;|s@|O%)&2;{TYmOC=H-bY(?CU||p@TSib^59O z2Y21~V{=!i|=57awxTAMU@y8zs&y5E&*VfGW+m$ISf2n_mZ#X%M zeTHFVLb4+*>bV5^Etdw1os#``taxs|O-q+wzBu}At{c)iCI%Ps`>OH82xZGiF`Zc7 zHRr`sEdvh4KVg3aqmyI^&FwA?($t(%PK?xWH2j3We*5;ff-#cQPUthXb@!GhuNyXp zcZ}v9z={66DE<2cU5)puCx9|lGkeGeiG>|*R4lvJ9rN)LRxCq}KDu@fzRCU_OHFGn zMJfg9?ROYTH~NgxXgdphiQ#m(`rPccc9n)w(By1MVeG2Donyb}Jmz`DMu`dNde*wm zeBWKNT4zH{XO}S3=OOz80?*g!P=4vdZf72+9+vxC#UT#Lk9^X1EC)Br-#OL>I>O-* zcnUG96KvyLmZZlFH9VE;K&^Oc;+uwV1*kL-_9UOFY&xJc~`M47nY z^J^Ks8SGunF5I6#8hag0Q;}Bnv0ZlX0q^m8J<5(YLZ5#o^ArqaUG0CemkFl)e^@}2 zA34z&<?q$=3-+z!EpQre@`Yz2mO+y9>yiGp6nu6g~8nc@))<i<2;y+PWymi|fvsPmLPijZ*$=*>?53Id+{Z{Hv zygy=krz=jgCIKbQI;~;*3TG0R?gD|8Y{QFds6fHjGmJG^fHBQG`a&@Pq?k5T{s7q1rcn*1@79YxPJ0vx8(LmP3-W;@lJbee>XX;pNX2M4ZCX` z(N5h_MHSA1;OS87^kce}#A5M!<50=g?K>Q8l~Wv8a~z#N#6US;a8LPi_0QwmAr+!? zt~_5F+sdy68iHQ1bI=M~MlXaf@ahZ7F-247@|?S>4r`Ipx5tM-eri z_Gb;&y#<1YN+blW)2H2|YoSF%W7pGz@khKPlnj})Tmn)vS-2#f z2g2vK4n*xC-U`Z%uxzn_N|Wl3Q{V=ne{n(M%c|-ovOr)`U@uA0fBMCkz!H0~#eK60 zWAAN67{)+PMjJaO<%zal22wM~da-F&>I)}x$olo`UqG0#*z3^2bkE5L8aVV&4LMo9 zYtUF41H5~jhSbGw0Uzh=b9i&2bOIQnW}qu03Q(vJL74(VAI(+st0W{Y-JdCc89zQ0 zDh(?rC=q#Nnv@CQ71Xfbj()%0b2{HC`aV=3Xf!%M>k|{pi!5XN!!x3zQ^x|Ir|nJa z{#R9*iLdXxEmy~V$4cbtKz@XQ-M$_kQO%)aSv!$;lL*hN9vZRMNyDn9M&?>r_3%A| z2W{50i|t|Nepjvm!?6pL2be;ANlw1@sRgfg`m;8W>n$qM8sBjKFZ7}0;UQsWW`<$` z9_$wo((_qr(DSteE;a_qb^m^I$zu>+TO#e)+MhqK0#@Olf@mg|&-cd+2V(Zl$IDwV zy^WmaCh){>8E(l;y8FM4FY6s&l}K1bTkFxE?=NXd*}4xPB)`?jqg8~1&#(UbaicgkQrlB-x=<-VpJ=IOhWZJ zBo~!V)*nIR4-QcTa!4{-V_AOanew1Z|ASADVd}dJyAf=VFQwS*W<|XSpJuSk3OGUU zyx%+7VC};OOmt1TbPE*0FAIP|r_FJJ`8cr|cQzLHIXq!e(c2sxgcnb_aI7zT_w;O- zjjcULWh}jcr9n-!pXh69Ve1cXiu za)P!^7ln0vf7NvXxQA1di&EpMyyeIA57oZs8HJMAxFXqqbcS{WgT zf6vs!1n%!ha%b$shHzTY_|R%}@%lScb7CKi&{Kk*Qk4U^e<$?mB4r{adcQVgps>)k zF^!0xg@}~(stKo-iw68dayR7LZRv#dpN-Ktf7WN)Z)sXjLmvCXwZG&04=qTL%i)96 z!?^b|-8T5U!CJjdLX9n4{RU8Wxyg)o10Qy4YUN`%4s76x=J$}|IzJB%(;L^q)NyYg z3L#j|)E%F1+S1rSP*dk)ywx3x>YYwXqyu3X5n5jyK5-#Zg=1-npiW#B1MHpuI9n9z z^`5V}cmTVkIg-ac$na41*n_eeTYV6&13hgSVTH2uDRanASMMTBPyaej9tQ8K4=SOe z{?_=TiuE06e}i4(W?S`nAk#ZA#0H94DC+9S=2mi$6X!<>ZH8Tf1VT_I|CMZ8LI?MS;@%X0Oa%o^HZT!$ChA*ei5))FQ~M;=gHt}$(yAo zqTWYNz0efsP)Nb&(wQ2G_m|+XDnMB=95f8MligyYn1%`K9B$-VLlRbLcKnpqzjcSn zUsEWUkt+Z7zPqB;EVRv`>MRh`LrPkYhh7#+joaIsdbc6j%JFr<%s(gYty}}6s!~v0 z9JhD1J#rfEEVQzL1I5gKYUEmWcaseJG@Sjz7h!6rd!8JTE@TaT5r?0NJRm%H$MEp% z?Y*Phy;);p0{)s0*JUAb7lW|*o<-eQrpEZk zahd0f$mXn@`X~3TB|9k22y~@e7SEtS*K96o<8=An^V64a#TfwqoLy3!p4n9U-)UC%&2-3=Gwa*t3K?dtQHN z6x{vWchD*x?4&{Y^s`$|RS;}^uY@ZtKTmPv>HWC(^xzsfvoxo%3kZnXSRU{A_=kc( z8KiYMNBgOLrMc}(mY+X={tvVP(u2+N*e6ybr|L_g{{jyv9geRVg~-`$A4ng^!dKzQ4l3tVJ?^&aTvO+`MMe3_ZIF?QceBx~w0D zo3~@%@tZ0B+UQaItmP<)$yCLyz8sHx`|v+F#6MX#Of}LV%9{CwTJ1~7Ks1#5{?*|Q zP}i5Qh0#Y`x{OyVDw1BIv$d12Pe%bfIJ2YkI4Kis|GxlJ1+4l|kUH64y7|KKWWvZO ze*jEee_YY1kzMbFaA)GgiPHOjU}U6bw%mR9-AZ|RIY!)kv$PBxLWQqRJVkp6sGv1@UKy`r^T?U{pP=TuWG`)*lxVs_aj$r5>e!?k8^PV00hNJL_t*j zMKwP1{^I&sy+V!&G4~Co6z_G#0046rf4J(u$l{5oRn58W{m%QNc&|JI>OhIAr8i+@ zFm5t5v*o$v>a`9Z+JwI z8Sjrrf1^%`7&G1zf@JZ;D;7Aam{tRa$8)T-Rhj|yuLHpRxlGZUFftfA#$PjA__Yp=?uDUac==Kuk8B~!649%s+^aQvTX0rtfMIO4Mye~4=vdA7YE zWES2fh^v)LEem};>ig1sxtd}iu7A3kSs^k5gBvcK35Mds#^a(nbJ~>&Bg+7JeH~MH zvES_Xd}{#pbk5ec;ENqc(9$Z;0N}K=`r(TmN2D1*UA?&%X##M=h4aLt?$bVu$3=7W z^NX4ZC35v6J*!tWDSWEef3eb5pBg|towH|J@MXcjeK!8TEcmxi4Itv$=bANOii(O* zR8-VqRi^8mYP-Ed?Uw@w52D&`m!{8GUg8`+azvVbXL0xfnb-dByuDaH{Zo&}c6^wN z_ZNu$O5E4_dj4z9Htok(Tn#Z0Jr7=gg_|waXVfeVS@a(u-)!Nme_p6CUTm26!=M3j zvrk@M#}q!*i^p)^kHoKn1i0$IbhX`V3O9GJT_h3VYBt9C3-U8TxF(N5CZ~&4ZEm)l zE^ftlyW|-G{iAzHH(NM-H7LMUgx5Mqkz&4ZRq|l^zlL`l&|ycDHJe zd|B$q5q`q-f4w2Q0In~!?Nz|v|EB)ftGu^~!coQWdEP~Qo_A5JyW*)$2Ko6d_{ZN5 zA-GQ)KKP^jWuQO!V}lahrw#x3`yu4#Qx*(yc_@s@FJMFv1VIo)*YIR)=$Az{wqI}h z9B)}BGFM-^n&KdO2A+%!{j$i$_Ulcb<1NcXcKwyBMI{d6+D1|6< Date: Wed, 2 Nov 2016 13:17:35 +0100 Subject: [PATCH 015/193] Fix catwalk/plating issue, update Experimentor grammar and remove disabilities from nuke ops --- code/game/gamemodes/nuclear/nuclear.dm | 3 +++ code/game/turfs/simulated/floor/plating.dm | 7 ++++++- code/modules/research/experimentor.dm | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 25ad0d234da..b70b4f0f03b 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -144,6 +144,9 @@ proc/issyndicate(mob/living/M as mob) var/mob/living/carbon/human/M = synd_mind.current var/obj/item/organ/external/head/head_organ = M.get_organ("head") + M.mutations = list() + M.disabilities = 0 + M.overeatduration = 0 M.set_species("Human",1) M.dna.ready_dna(M) // Quadriplegic Nuke Ops won't be participating in the paralympics diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index dcc05e5acfe..761e05f60c3 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -220,8 +220,13 @@ icon_state="catwalk[dirs]" /turf/simulated/floor/plating/airless/catwalk/attackby(obj/item/C, mob/user, params) + if(istype(C, /obj/item/stack/rods)) + return 1 + else if(istype(C, /obj/item/stack/tile)) + return 1 + if(..()) - return + return 1 if(!broken && isscrewdriver(C)) to_chat(user, "You unscrew the catwalk's rods.") diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 1fec6186c60..421f0cf8e92 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -680,7 +680,7 @@ warn_admins(user, "Flash") /obj/item/weapon/relic/proc/petSpray(mob/user) - var/message = "[src] begans to shake, and in the distance the sound of rampaging animals arises!" + var/message = "[src] begins to shake, and in the distance the sound of rampaging animals arises!" visible_message(message) to_chat(user, message) var/animals = rand(1,25) From ebb59ca511c293d81dd32654c9bca95d2f91c934 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Thu, 3 Nov 2016 21:27:10 -0400 Subject: [PATCH 016/193] Reagent Reorganization --- .../colors.dm} | 62 +- .../holder.dm} | 1321 +++++---- .../machinery}/chem_heater.dm | 0 .../machinery/chemistry_machinery.dm} | 2428 ++++++++--------- .../{ => chemistry/machinery}/pandemic.dm | 0 .../readme.dm} | 496 ++-- .../reagents.dm} | 90 +- .../reagents/admin.dm} | 25 +- .../reagents/alcohol.dm} | 0 .../reagents/blob.dm} | 0 .../reagents}/disease.dm | 139 +- .../reagents/drink_base.dm} | 0 .../reagents/drink_cold.dm} | 2 +- .../reagents/drinks.dm} | 147 + .../{newchem => chemistry/reagents}/drugs.dm | 236 +- .../{newchem => chemistry/reagents}/food.dm | 501 +++- .../reagents}/medicine.dm | 387 +-- .../other.dm => chemistry/reagents/misc.dm} | 364 +-- .../reagents/paint.dm} | 0 .../reagents}/paradise_pop.dm | 0 .../chemistry/reagents/pyrotechnic.dm | 325 +++ .../{newchem => chemistry/reagents}/toxins.dm | 557 +++- .../reagents/water.dm} | 0 code/modules/reagents/chemistry/recipes.dm | 81 + .../recipes/drinks.dm} | 100 + .../reagents/chemistry/recipes/drugs.dm | 117 + .../recipes/food.dm} | 127 +- .../reagents/chemistry/recipes/medicine.dm | 275 ++ .../reagents/chemistry/recipes/others.dm | 482 ++++ .../recipes/pyrotechnics.dm} | 425 +-- .../recipes/slime_extracts.dm} | 0 .../reagents/chemistry/recipes/toxins.dm | 142 + code/modules/reagents/newchem/drinks.dm | 238 -- .../modules/reagents/newchem/newchem_procs.dm | 212 -- .../_chemical_reaction_base.dm | 23 - .../chemical_reaction_harm.dm | 71 - .../chemical_reaction_med.dm | 44 - .../chemical_reaction_misc.dm | 147 - .../oldchem/reagents/__oldchem_defines.dm | 5 - .../oldchem/reagents/reagents_drugs.dm | 115 - .../oldchem/reagents/reagents_flammable.dm | 81 - .../oldchem/reagents/reagents_food.dm | 393 --- .../reagents/oldchem/reagents/reagents_med.dm | 142 - .../oldchem/reagents/reagents_misc.dm | 189 -- .../oldchem/reagents/reagents_toxin.dm | 414 --- .../{newchem => reagent_containers}/patch.dm | 0 paradise.dme | 73 +- 47 files changed, 5463 insertions(+), 5513 deletions(-) rename code/modules/reagents/{Chemistry-Colours.dm => chemistry/colors.dm} (96%) rename code/modules/reagents/{Chemistry-Holder.dm => chemistry/holder.dm} (81%) rename code/modules/reagents/{newchem => chemistry/machinery}/chem_heater.dm (100%) rename code/modules/reagents/{Chemistry-Machinery.dm => chemistry/machinery/chemistry_machinery.dm} (97%) rename code/modules/reagents/{ => chemistry/machinery}/pandemic.dm (100%) rename code/modules/reagents/{Chemistry-Readme.dm => chemistry/readme.dm} (97%) rename code/modules/reagents/{oldchem/reagents/_reagent_base.dm => chemistry/reagents.dm} (55%) rename code/modules/reagents/{oldchem/reagents/reagents_admin.dm => chemistry/reagents/admin.dm} (69%) rename code/modules/reagents/{oldchem/reagents/drink/reagents_alcohol.dm => chemistry/reagents/alcohol.dm} (100%) rename code/modules/reagents/{newchem/Blob-Reagents.dm => chemistry/reagents/blob.dm} (100%) rename code/modules/reagents/{newchem => chemistry/reagents}/disease.dm (57%) rename code/modules/reagents/{oldchem/reagents/drink/reagents_drink_base.dm => chemistry/reagents/drink_base.dm} (100%) rename code/modules/reagents/{oldchem/reagents/drink/reagents_drink_cold.dm => chemistry/reagents/drink_cold.dm} (97%) rename code/modules/reagents/{oldchem/reagents/drink/reagents_drink.dm => chemistry/reagents/drinks.dm} (63%) rename code/modules/reagents/{newchem => chemistry/reagents}/drugs.dm (81%) rename code/modules/reagents/{newchem => chemistry/reagents}/food.dm (54%) rename code/modules/reagents/{newchem => chemistry/reagents}/medicine.dm (75%) rename code/modules/reagents/{newchem/other.dm => chemistry/reagents/misc.dm} (61%) rename code/modules/reagents/{oldchem/reagents/reagents_paint.dm => chemistry/reagents/paint.dm} (100%) rename code/modules/reagents/{newchem => chemistry/reagents}/paradise_pop.dm (100%) create mode 100644 code/modules/reagents/chemistry/reagents/pyrotechnic.dm rename code/modules/reagents/{newchem => chemistry/reagents}/toxins.dm (63%) rename code/modules/reagents/{oldchem/reagents/reagents_water.dm => chemistry/reagents/water.dm} (100%) create mode 100644 code/modules/reagents/chemistry/recipes.dm rename code/modules/reagents/{oldchem/chemical_reaction/chemical_reaction_drink.dm => chemistry/recipes/drinks.dm} (86%) create mode 100644 code/modules/reagents/chemistry/recipes/drugs.dm rename code/modules/reagents/{oldchem/chemical_reaction/chemical_reaction_food.dm => chemistry/recipes/food.dm} (51%) create mode 100644 code/modules/reagents/chemistry/recipes/medicine.dm create mode 100644 code/modules/reagents/chemistry/recipes/others.dm rename code/modules/reagents/{newchem/pyro.dm => chemistry/recipes/pyrotechnics.dm} (61%) rename code/modules/reagents/{oldchem/chemical_reaction/chemical_reaction_slime.dm => chemistry/recipes/slime_extracts.dm} (100%) create mode 100644 code/modules/reagents/chemistry/recipes/toxins.dm delete mode 100644 code/modules/reagents/newchem/drinks.dm delete mode 100644 code/modules/reagents/newchem/newchem_procs.dm delete mode 100644 code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm delete mode 100644 code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm delete mode 100644 code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm delete mode 100644 code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm delete mode 100644 code/modules/reagents/oldchem/reagents/__oldchem_defines.dm delete mode 100644 code/modules/reagents/oldchem/reagents/reagents_drugs.dm delete mode 100644 code/modules/reagents/oldchem/reagents/reagents_flammable.dm delete mode 100644 code/modules/reagents/oldchem/reagents/reagents_food.dm delete mode 100644 code/modules/reagents/oldchem/reagents/reagents_med.dm delete mode 100644 code/modules/reagents/oldchem/reagents/reagents_misc.dm delete mode 100644 code/modules/reagents/oldchem/reagents/reagents_toxin.dm rename code/modules/reagents/{newchem => reagent_containers}/patch.dm (100%) diff --git a/code/modules/reagents/Chemistry-Colours.dm b/code/modules/reagents/chemistry/colors.dm similarity index 96% rename from code/modules/reagents/Chemistry-Colours.dm rename to code/modules/reagents/chemistry/colors.dm index 176ec99c4d4..e0c6d5efd84 100644 --- a/code/modules/reagents/Chemistry-Colours.dm +++ b/code/modules/reagents/chemistry/colors.dm @@ -1,31 +1,31 @@ -/* - * Returns: - * #RRGGBB(AA) on success, null on failure - */ -/proc/mix_color_from_reagents(const/list/reagent_list) - if(!istype(reagent_list)) - return - - var/color - var/reagent_color - var/vol_counter = 0 - var/vol_temp - // see libs/IconProcs/IconProcs.dm - for(var/datum/reagent/reagent in reagent_list) - if(reagent.id == "blood" && reagent.data && reagent.data["blood_colour"]) - reagent_color = reagent.data["blood_colour"] - else - reagent_color = reagent.color - - vol_temp = reagent.volume - vol_counter += vol_temp - - if(isnull(color)) - color = reagent.color - else if(length(color) >= length(reagent_color)) - color = BlendRGB(color, reagent_color, vol_temp/vol_counter) - else - color = BlendRGB(reagent_color, color, vol_temp/vol_counter) - return color - - +/* + * Returns: + * #RRGGBB(AA) on success, null on failure + */ +/proc/mix_color_from_reagents(const/list/reagent_list) + if(!istype(reagent_list)) + return + + var/color + var/reagent_color + var/vol_counter = 0 + var/vol_temp + // see libs/IconProcs/IconProcs.dm + for(var/datum/reagent/reagent in reagent_list) + if(reagent.id == "blood" && reagent.data && reagent.data["blood_colour"]) + reagent_color = reagent.data["blood_colour"] + else + reagent_color = reagent.color + + vol_temp = reagent.volume + vol_counter += vol_temp + + if(isnull(color)) + color = reagent.color + else if(length(color) >= length(reagent_color)) + color = BlendRGB(color, reagent_color, vol_temp/vol_counter) + else + color = BlendRGB(reagent_color, color, vol_temp/vol_counter) + return color + + diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/chemistry/holder.dm similarity index 81% rename from code/modules/reagents/Chemistry-Holder.dm rename to code/modules/reagents/chemistry/holder.dm index ecc9c9ddc18..12e8a73d35c 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -1,601 +1,720 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -var/const/TOUCH = 1 -var/const/INGEST = 2 - -/////////////////////////////////////////////////////////////////////////////////// - -/datum/reagents - var/list/datum/reagent/reagent_list = new/list() - var/total_volume = 0 - var/maximum_volume = 100 - var/atom/my_atom = null - var/chem_temp = 300 - var/list/datum/reagent/addiction_list = new/list() - -/datum/reagents/New(maximum=100) - maximum_volume = maximum - - //I dislike having these here but map-objects are initialised before world/New() is called. >_> - if(!chemical_reagents_list) - //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id - var/paths = subtypesof(/datum/reagent) - chemical_reagents_list = list() - for(var/path in paths) - var/datum/reagent/D = new path() - chemical_reagents_list[D.id] = D - if(!D.can_grow_in_plants) - plant_blocked_chems.Add(D.id) - if(!chemical_reactions_list) - //Chemical Reactions - Initialises all /datum/chemical_reaction into a list - // It is filtered into multiple lists within a list. - // For example: - // chemical_reaction_list["plasma"] is a list of all reactions relating to plasma - - var/paths = subtypesof(/datum/chemical_reaction) - chemical_reactions_list = list() - - for(var/path in paths) - - var/datum/chemical_reaction/D = new path() - var/list/reaction_ids = list() - - if(D && D.required_reagents && D.required_reagents.len) - for(var/reaction in D.required_reagents) - reaction_ids += reaction - - // Create filters based on each reagent id in the required reagents list - for(var/id in reaction_ids) - if(!chemical_reactions_list[id]) - chemical_reactions_list[id] = list() - chemical_reactions_list[id] += D - break // Don't bother adding ourselves to other reagent ids, it is redundant. - -/datum/reagents/proc/remove_any(amount=1) - var/total_transfered = 0 - var/current_list_element = 1 - - current_list_element = rand(1,reagent_list.len) - - while(total_transfered != amount) - if(total_transfered >= amount) - break - if(total_volume <= 0 || !reagent_list.len) - break - - if(current_list_element > reagent_list.len) current_list_element = 1 - var/datum/reagent/current_reagent = reagent_list[current_list_element] - - remove_reagent(current_reagent.id, min(1, amount - total_transfered)) - - current_list_element++ - total_transfered++ - update_total() - - handle_reactions() - return total_transfered - -/datum/reagents/proc/get_master_reagent_name() - var/the_name = null - var/the_volume = 0 - for(var/datum/reagent/A in reagent_list) - if(A.volume > the_volume) - the_volume = A.volume - the_name = A.name - - return the_name - -/datum/reagents/proc/get_master_reagent_id() - var/the_id = null - var/the_volume = 0 - for(var/datum/reagent/A in reagent_list) - if(A.volume > the_volume) - the_volume = A.volume - the_id = A.id - - return the_id - -/datum/reagents/proc/trans_to(target, amount=1, multiplier=1, preserve_data=1)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred. - if(!target) - return - if(total_volume <= 0) - return - var/datum/reagents/R - if(istype(target, /obj)) - var/obj/O = target - if(!O.reagents ) - return - R = O.reagents - else if(isliving(target)) - var/mob/living/M = target - if(!M.reagents) - return - R = M.reagents - else if(istype(target, /datum/reagents)) - R = target - else - return - - amount = min(min(amount, total_volume), R.maximum_volume-R.total_volume) - var/part = amount / total_volume - var/trans_data = null - for(var/datum/reagent/current_reagent in reagent_list) - if(!current_reagent) - continue - if(current_reagent.id == "blood" && ishuman(target)) - var/mob/living/carbon/human/H = target - H.inject_blood(my_atom, amount) - continue - var/current_reagent_transfer = current_reagent.volume * part - if(preserve_data) - trans_data = copy_data(current_reagent) - - R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data, chem_temp) - remove_reagent(current_reagent.id, current_reagent_transfer) - - update_total() - R.update_total() - R.handle_reactions() - handle_reactions() - return amount - -/datum/reagents/proc/copy_to(obj/target, amount=1, multiplier=1, preserve_data=1, safety = 0) - if(!target) - return - if(!target.reagents || total_volume<=0) - return - var/datum/reagents/R = target.reagents - amount = min(min(amount, total_volume), R.maximum_volume-R.total_volume) - var/part = amount / total_volume - var/trans_data = null - for(var/datum/reagent/current_reagent in reagent_list) - var/current_reagent_transfer = current_reagent.volume * part - if(preserve_data) - trans_data = copy_data(current_reagent) - R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data) - - update_total() - R.update_total() - R.handle_reactions() - handle_reactions() - return amount - -/datum/reagents/proc/trans_id_to(obj/target, reagent, amount=1, preserve_data=1)//Not sure why this proc didn't exist before. It does now! /N - if(!target) - return - if(!target.reagents || total_volume<=0 || !get_reagent_amount(reagent)) - return - - var/datum/reagents/R = target.reagents - if(get_reagent_amount(reagent) R.maximum_volume) return 0 - - current_list_element = rand(1,reagent_list.len) //Eh, bandaid fix. - - while(total_transfered != amount) - if(total_transfered >= amount) break //Better safe than sorry. - if(total_volume <= 0 || !reagent_list.len) break - if(R.total_volume >= R.maximum_volume) break - - if(current_list_element > reagent_list.len) current_list_element = 1 - var/datum/reagent/current_reagent = reagent_list[current_list_element] - if(preserve_data) - trans_data = current_reagent.data - R.add_reagent(current_reagent.id, (1 * multiplier), trans_data) - remove_reagent(current_reagent.id, 1) - - current_list_element++ - total_transfered++ - update_total() - R.update_total() - R.handle_reactions() - handle_reactions() - - return total_transfered -*/ - - -/datum/reagents/proc/conditional_update_move(atom/A, Running = 0) - for(var/datum/reagent/R in reagent_list) - R.on_move (A, Running) - update_total() - -/datum/reagents/proc/conditional_update(atom/A, ) - for(var/datum/reagent/R in reagent_list) - R.on_update (A) - update_total() - -/datum/reagents/proc/handle_reactions() - if(my_atom.flags & NOREACT) - return //Yup, no reactions here. No siree. - - var/reaction_occured = 0 - do - reaction_occured = 0 - for(var/datum/reagent/R in reagent_list) // Usually a small list - for(var/reaction in chemical_reactions_list[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id - if(!reaction) - continue - - var/datum/chemical_reaction/C = reaction - var/total_required_reagents = C.required_reagents.len - var/total_matching_reagents = 0 - var/total_required_catalysts = C.required_catalysts.len - var/total_matching_catalysts= 0 - var/matching_container = 0 - var/matching_other = 0 - var/list/multipliers = new/list() - var/min_temp = C.min_temp //Minimum temperature required for the reaction to occur (heat to/above this) - var/max_temp = C.max_temp //Maximum temperature allowed for the reaction to occur (cool to/below this) - for(var/B in C.required_reagents) - if(!has_reagent(B, C.required_reagents[B])) - break - total_matching_reagents++ - multipliers += round(get_reagent_amount(B) / C.required_reagents[B]) - for(var/B in C.required_catalysts) - if(!has_reagent(B, C.required_catalysts[B])) - break - total_matching_catalysts++ - - if(!C.required_container) - matching_container = 1 - - else - if(my_atom.type == C.required_container) - matching_container = 1 - - if(!C.required_other) - matching_other = 1 - - else if(istype(my_atom, /obj/item/slime_extract)) - var/obj/item/slime_extract/M = my_atom - - if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this - matching_other = 1 - - if(min_temp == 0) - min_temp = chem_temp - - if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other && chem_temp <= max_temp && chem_temp >= min_temp) - var/multiplier = min(multipliers) - var/preserved_data = null - for(var/B in C.required_reagents) - if(!preserved_data) - preserved_data = get_data(B) - remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1) - - var/created_volume = C.result_amount*multiplier - if(C.result) - feedback_add_details("chemical_reaction","[C.result]|[C.result_amount*multiplier]") - multiplier = max(multiplier, 1) //this shouldnt happen ... - add_reagent(C.result, C.result_amount*multiplier) - set_data(C.result, preserved_data) - - //add secondary products - for(var/S in C.secondary_results) - add_reagent(S, C.result_amount * C.secondary_results[S] * multiplier) - - var/list/seen = viewers(4, get_turf(my_atom)) - for(var/mob/M in seen) - if(!C.no_message) - to_chat(M, "[bicon(my_atom)] [C.mix_message]") - - if(istype(my_atom, /obj/item/slime_extract)) - var/obj/item/slime_extract/ME2 = my_atom - ME2.Uses-- - if(ME2.Uses <= 0) // give the notification that the slime core is dead - for(var/mob/M in seen) - to_chat(M, "[bicon(my_atom)] The [my_atom]'s power is consumed in the reaction.") - ME2.name = "used slime extract" - ME2.desc = "This extract has been used up." - - playsound(get_turf(my_atom), C.mix_sound, 80, 1) - - C.on_reaction(src, created_volume) - reaction_occured = 1 - break - - while(reaction_occured) - update_total() - return 0 - -/datum/reagents/proc/isolate_reagent(reagent) - for(var/A in reagent_list) - var/datum/reagent/R = A - if(R.id != reagent) - del_reagent(R.id) - update_total() - -/datum/reagents/proc/del_reagent(reagent) - for(var/A in reagent_list) - var/datum/reagent/R = A - if(R.id == reagent) - if(isliving(my_atom)) - var/mob/living/M = my_atom - R.reagent_deleted(M) - reagent_list -= A - qdel(A) - update_total() - my_atom.on_reagent_change() - return 0 - - - return 1 - -/datum/reagents/proc/update_total() - total_volume = 0 - for(var/datum/reagent/R in reagent_list) - if(R.volume < 0.1) - del_reagent(R.id) - else - total_volume += R.volume - - return 0 - -/datum/reagents/proc/clear_reagents() - for(var/datum/reagent/R in reagent_list) - del_reagent(R.id) - return 0 - -/datum/reagents/proc/reaction_check(mob/living/M, datum/reagent/R) - var/can_process = 0 - if(ishuman(M)) - var/mob/living/carbon/human/H = M - //Check if this mob's species is set and can process this type of reagent - if(H.species && H.species.reagent_tag) - if((R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_SYN)) //SYNTHETIC-oriented reagents require PROCESS_SYN - can_process = 1 - if((R.process_flags & ORGANIC) && (H.species.reagent_tag & PROCESS_ORG)) //ORGANIC-oriented reagents require PROCESS_ORG - can_process = 1 - //Species with PROCESS_DUO are only affected by reagents that affect both organics and synthetics, like acid and hellwater - if((R.process_flags & ORGANIC) && (R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_DUO)) - can_process = 1 - if(H.species && H.species.exotic_blood) - if(R.id == H.species.exotic_blood) - can_process = 0 - //We'll assume that non-human mobs lack the ability to process synthetic-oriented reagents (adjust this if we need to change that assumption) - else - if(R.process_flags != SYNTHETIC) - can_process = 1 - return can_process - -/datum/reagents/proc/reaction(atom/A, method=TOUCH, volume_modifier = 1) - switch(method) - if(TOUCH) - for(var/datum/reagent/R in reagent_list) - if(isliving(A)) - var/check = reaction_check(A, R) - if(!check) - continue - else - R.reaction_mob(A, TOUCH, R.volume*volume_modifier) - if(isturf(A)) - R.reaction_turf(A, R.volume*volume_modifier) - if(isobj(A)) - R.reaction_obj(A, R.volume*volume_modifier) - if(INGEST) - for(var/datum/reagent/R in reagent_list) - if(isliving(A)) - var/check = reaction_check(A, R) - if(!check) - continue - else - R.reaction_mob(A, INGEST, R.volume*volume_modifier) - if(isturf(A)) - R.reaction_turf(A, R.volume*volume_modifier) - if(isobj(A)) - R.reaction_obj(A, R.volume*volume_modifier) - -/datum/reagents/proc/add_reagent_list(list/list_reagents, list/data=null) // Like add_reagent but you can enter a list. Format it like this: list("toxin" = 10, "beer" = 15) - for(var/r_id in list_reagents) - var/amt = list_reagents[r_id] - add_reagent(r_id, amt, data) - -/datum/reagents/proc/add_reagent(reagent, amount, list/data=null, reagtemp = 300) - if(!isnum(amount)) - return 1 - update_total() - if(total_volume + amount > maximum_volume) amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen. - if(amount <= 0) - return 0 - chem_temp = round(((amount * reagtemp) + (total_volume * chem_temp)) / (total_volume + amount)) //equalize with new chems - - for(var/A in reagent_list) - - var/datum/reagent/R = A - if(R.id == reagent) - R.volume += amount - update_total() - my_atom.on_reagent_change() - R.on_merge(data) - handle_reactions() - return 0 - - var/datum/reagent/D = chemical_reagents_list[reagent] - if(D) - - var/datum/reagent/R = new D.type() - reagent_list += R - R.holder = src - R.volume = amount - if(data) - R.data = data - R.on_new(data) - - update_total() - my_atom.on_reagent_change() - handle_reactions() - return 0 - else - warning("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])") - - handle_reactions() - - return 1 - -/datum/reagents/proc/remove_reagent(reagent, amount, safety)//Added a safety check for the trans_id_to - - if(!isnum(amount)) - return 1 - - for(var/A in reagent_list) - var/datum/reagent/R = A - if(R.id == reagent) - R.volume -= amount - update_total() - if(!safety)//So it does not handle reactions when it need not to - handle_reactions() - my_atom.on_reagent_change() - return 0 - - return 1 - -/datum/reagents/proc/has_reagent(reagent, amount = -1) - - for(var/A in reagent_list) - var/datum/reagent/R = A - if(R.id == reagent) - if(!amount) - return R - else - if(R.volume >= amount) - return R - else - return 0 - - return 0 - -/datum/reagents/proc/get_reagent_amount(reagent) - for(var/A in reagent_list) - var/datum/reagent/R = A - if(R.id == reagent) - return R.volume - - return 0 - -/datum/reagents/proc/get_reagents() - var/res = "" - for(var/datum/reagent/A in reagent_list) - if(res != "") res += "," - res += A.name - - return res - -/datum/reagents/proc/get_reagent(type) - . = locate(type) in reagent_list - -/datum/reagents/proc/remove_all_type(reagent_type, amount, strict = 0, safety = 1) // Removes all reagent of X type. @strict set to 1 determines whether the childs of the type are included. - if(!isnum(amount)) - return 1 - - var/has_removed_reagent = 0 - - for(var/datum/reagent/R in reagent_list) - var/matches = 0 - // Switch between how we check the reagent type - if(strict) - if(R.type == reagent_type) - matches = 1 - else - if(istype(R, reagent_type)) - matches = 1 - // We found a match, proceed to remove the reagent. Keep looping, we might find other reagents of the same type. - if(matches) - // Have our other proc handle removement - has_removed_reagent = remove_reagent(R.id, amount, safety) - - return has_removed_reagent - -// Admin logging. -/datum/reagents/proc/get_reagent_ids(and_amount=0) - var/list/stuff = list() - for(var/datum/reagent/A in reagent_list) - if(and_amount) - stuff += "[get_reagent_amount(A.id)]U of [A.id]" - else - stuff += A.id - return english_list(stuff) - -//two helper functions to preserve data across reactions (needed for xenoarch) -/datum/reagents/proc/get_data(reagent_id) - for(var/datum/reagent/D in reagent_list) - if(D.id == reagent_id) -// to_chat(world, "proffering a data-carrying reagent ([reagent_id])") - return D.data - -/datum/reagents/proc/set_data(reagent_id, new_data) - for(var/datum/reagent/D in reagent_list) - if(D.id == reagent_id) -// to_chat(world, "reagent data set ([reagent_id])") - D.data = new_data - -/datum/reagents/proc/copy_data(datum/reagent/current_reagent) - if(!current_reagent || !current_reagent.data) - return null - if(!istype(current_reagent.data, /list)) - return current_reagent.data - - var/list/trans_data = current_reagent.data.Copy() - - // We do this so that introducing a virus to a blood sample - // doesn't automagically infect all other blood samples from - // the same donor. - // - // Technically we should probably copy all data lists, but - // that could possibly eat up a lot of memory needlessly - // if most data lists are read-only. - if(trans_data["viruses"]) - var/list/v = trans_data["viruses"] - trans_data["viruses"] = v.Copy() - - return trans_data - -/////////////////////////////////////////////////////////////////////////////////// - - -// Convenience proc to create a reagents holder for an atom -// Max vol is maximum volume of holder -atom/proc/create_reagents(max_vol) - reagents = new/datum/reagents(max_vol) - reagents.my_atom = src - -/datum/reagents/proc/get_reagent_from_id(id) - var/datum/reagent/result = null - for(var/datum/reagent/R in reagent_list) - if(R.id == id) - result = R - break - return result - -/datum/reagents/Destroy() - . = ..() - processing_objects.Remove(src) - for(var/datum/reagent/R in reagent_list) - qdel(R) - reagent_list.Cut() - reagent_list = null - if(my_atom && my_atom.reagents == src) - my_atom.reagents = null +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 + +var/const/TOUCH = 1 +var/const/INGEST = 2 +#define ADDICTION_TIME 4800 //8 minutes + +/////////////////////////////////////////////////////////////////////////////////// + +/datum/reagents + var/list/datum/reagent/reagent_list = new/list() + var/total_volume = 0 + var/maximum_volume = 100 + var/atom/my_atom = null + var/chem_temp = 300 + var/list/datum/reagent/addiction_list = new/list() + +/datum/reagents/New(maximum=100) + maximum_volume = maximum + + //I dislike having these here but map-objects are initialised before world/New() is called. >_> + if(!chemical_reagents_list) + //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id + var/paths = subtypesof(/datum/reagent) + chemical_reagents_list = list() + for(var/path in paths) + var/datum/reagent/D = new path() + chemical_reagents_list[D.id] = D + if(!D.can_grow_in_plants) + plant_blocked_chems.Add(D.id) + if(!chemical_reactions_list) + //Chemical Reactions - Initialises all /datum/chemical_reaction into a list + // It is filtered into multiple lists within a list. + // For example: + // chemical_reaction_list["plasma"] is a list of all reactions relating to plasma + + var/paths = subtypesof(/datum/chemical_reaction) + chemical_reactions_list = list() + + for(var/path in paths) + + var/datum/chemical_reaction/D = new path() + var/list/reaction_ids = list() + + if(D && D.required_reagents && D.required_reagents.len) + for(var/reaction in D.required_reagents) + reaction_ids += reaction + + // Create filters based on each reagent id in the required reagents list + for(var/id in reaction_ids) + if(!chemical_reactions_list[id]) + chemical_reactions_list[id] = list() + chemical_reactions_list[id] += D + break // Don't bother adding ourselves to other reagent ids, it is redundant. + +/datum/reagents/proc/remove_any(amount=1) + var/total_transfered = 0 + var/current_list_element = 1 + + current_list_element = rand(1,reagent_list.len) + + while(total_transfered != amount) + if(total_transfered >= amount) + break + if(total_volume <= 0 || !reagent_list.len) + break + + if(current_list_element > reagent_list.len) current_list_element = 1 + var/datum/reagent/current_reagent = reagent_list[current_list_element] + + remove_reagent(current_reagent.id, min(1, amount - total_transfered)) + + current_list_element++ + total_transfered++ + update_total() + + handle_reactions() + return total_transfered + +/datum/reagents/proc/get_master_reagent_name() + var/the_name = null + var/the_volume = 0 + for(var/datum/reagent/A in reagent_list) + if(A.volume > the_volume) + the_volume = A.volume + the_name = A.name + + return the_name + +/datum/reagents/proc/get_master_reagent_id() + var/the_id = null + var/the_volume = 0 + for(var/datum/reagent/A in reagent_list) + if(A.volume > the_volume) + the_volume = A.volume + the_id = A.id + + return the_id + +/datum/reagents/proc/trans_to(target, amount=1, multiplier=1, preserve_data=1)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred. + if(!target) + return + if(total_volume <= 0) + return + var/datum/reagents/R + if(istype(target, /obj)) + var/obj/O = target + if(!O.reagents ) + return + R = O.reagents + else if(isliving(target)) + var/mob/living/M = target + if(!M.reagents) + return + R = M.reagents + else if(istype(target, /datum/reagents)) + R = target + else + return + + amount = min(min(amount, total_volume), R.maximum_volume-R.total_volume) + var/part = amount / total_volume + var/trans_data = null + for(var/datum/reagent/current_reagent in reagent_list) + if(!current_reagent) + continue + if(current_reagent.id == "blood" && ishuman(target)) + var/mob/living/carbon/human/H = target + H.inject_blood(my_atom, amount) + continue + var/current_reagent_transfer = current_reagent.volume * part + if(preserve_data) + trans_data = copy_data(current_reagent) + + R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data, chem_temp) + remove_reagent(current_reagent.id, current_reagent_transfer) + + update_total() + R.update_total() + R.handle_reactions() + handle_reactions() + return amount + +/datum/reagents/proc/copy_to(obj/target, amount=1, multiplier=1, preserve_data=1, safety = 0) + if(!target) + return + if(!target.reagents || total_volume<=0) + return + var/datum/reagents/R = target.reagents + amount = min(min(amount, total_volume), R.maximum_volume-R.total_volume) + var/part = amount / total_volume + var/trans_data = null + for(var/datum/reagent/current_reagent in reagent_list) + var/current_reagent_transfer = current_reagent.volume * part + if(preserve_data) + trans_data = copy_data(current_reagent) + R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data) + + update_total() + R.update_total() + R.handle_reactions() + handle_reactions() + return amount + +/datum/reagents/proc/trans_id_to(obj/target, reagent, amount=1, preserve_data=1)//Not sure why this proc didn't exist before. It does now! /N + if(!target) + return + if(!target.reagents || total_volume<=0 || !get_reagent_amount(reagent)) + return + + var/datum/reagents/R = target.reagents + if(get_reagent_amount(reagent)= R.overdose_threshold && !R.overdosed && R.overdose_threshold > 0) + R.overdosed = 1 + R.overdose_start(M) + if(R.volume < R.overdose_threshold && R.overdosed) + R.overdosed = 0 + if(R.overdosed) + R.overdose_process(M, R.volume >= R.overdose_threshold*2 ? 2 : 1) + + for(var/A in addiction_list) + var/datum/reagent/R = A + if(M && R) + if(R.addiction_stage < 5) + if(prob(5)) + R.addiction_stage++ + switch(R.addiction_stage) + if(1) + R.addiction_act_stage1(M) + if(2) + R.addiction_act_stage2(M) + if(3) + R.addiction_act_stage3(M) + if(4) + R.addiction_act_stage4(M) + if(5) + R.addiction_act_stage5(M) + if(prob(20) && (world.timeofday > (R.last_addiction_dose + ADDICTION_TIME))) //Each addiction lasts 8 minutes before it can end + to_chat(M, "You no longer feel reliant on [R.name]!") + addiction_list.Remove(R) + update_total() + +/datum/reagents/proc/death_metabolize(mob/living/M) + if(!M) + return + if(M.stat != DEAD) //what part of DEATH_metabolize don't you get? + return + for(var/A in reagent_list) + var/datum/reagent/R = A + if(!istype(R)) + continue + if(M && R) + R.on_mob_death(M) + +/datum/reagents/proc/overdose_list() + var/od_chems[0] + for(var/datum/reagent/R in reagent_list) + if(R.overdosed) + od_chems.Add(R.id) + return od_chems + + +/datum/reagents/proc/reagent_on_tick() + for(var/datum/reagent/R in reagent_list) + R.on_tick() + return +/* + if(!target) return + var/total_transfered = 0 + var/current_list_element = 1 + var/datum/reagents/R = target.reagents + var/trans_data = null + //if(R.total_volume + amount > R.maximum_volume) return 0 + + current_list_element = rand(1,reagent_list.len) //Eh, bandaid fix. + + while(total_transfered != amount) + if(total_transfered >= amount) break //Better safe than sorry. + if(total_volume <= 0 || !reagent_list.len) break + if(R.total_volume >= R.maximum_volume) break + + if(current_list_element > reagent_list.len) current_list_element = 1 + var/datum/reagent/current_reagent = reagent_list[current_list_element] + if(preserve_data) + trans_data = current_reagent.data + R.add_reagent(current_reagent.id, (1 * multiplier), trans_data) + remove_reagent(current_reagent.id, 1) + + current_list_element++ + total_transfered++ + update_total() + R.update_total() + R.handle_reactions() + handle_reactions() + + return total_transfered +*/ + + +/datum/reagents/proc/conditional_update_move(atom/A, Running = 0) + for(var/datum/reagent/R in reagent_list) + R.on_move (A, Running) + update_total() + +/datum/reagents/proc/conditional_update(atom/A, ) + for(var/datum/reagent/R in reagent_list) + R.on_update (A) + update_total() + +/datum/reagents/proc/handle_reactions() + if(my_atom.flags & NOREACT) + return //Yup, no reactions here. No siree. + + var/reaction_occured = 0 + do + reaction_occured = 0 + for(var/datum/reagent/R in reagent_list) // Usually a small list + for(var/reaction in chemical_reactions_list[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id + if(!reaction) + continue + + var/datum/chemical_reaction/C = reaction + var/total_required_reagents = C.required_reagents.len + var/total_matching_reagents = 0 + var/total_required_catalysts = C.required_catalysts.len + var/total_matching_catalysts= 0 + var/matching_container = 0 + var/matching_other = 0 + var/list/multipliers = new/list() + var/min_temp = C.min_temp //Minimum temperature required for the reaction to occur (heat to/above this) + var/max_temp = C.max_temp //Maximum temperature allowed for the reaction to occur (cool to/below this) + for(var/B in C.required_reagents) + if(!has_reagent(B, C.required_reagents[B])) + break + total_matching_reagents++ + multipliers += round(get_reagent_amount(B) / C.required_reagents[B]) + for(var/B in C.required_catalysts) + if(!has_reagent(B, C.required_catalysts[B])) + break + total_matching_catalysts++ + + if(!C.required_container) + matching_container = 1 + + else + if(my_atom.type == C.required_container) + matching_container = 1 + + if(!C.required_other) + matching_other = 1 + + else if(istype(my_atom, /obj/item/slime_extract)) + var/obj/item/slime_extract/M = my_atom + + if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this + matching_other = 1 + + if(min_temp == 0) + min_temp = chem_temp + + if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other && chem_temp <= max_temp && chem_temp >= min_temp) + var/multiplier = min(multipliers) + var/preserved_data = null + for(var/B in C.required_reagents) + if(!preserved_data) + preserved_data = get_data(B) + remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1) + + var/created_volume = C.result_amount*multiplier + if(C.result) + feedback_add_details("chemical_reaction","[C.result]|[C.result_amount*multiplier]") + multiplier = max(multiplier, 1) //this shouldnt happen ... + add_reagent(C.result, C.result_amount*multiplier) + set_data(C.result, preserved_data) + + //add secondary products + for(var/S in C.secondary_results) + add_reagent(S, C.result_amount * C.secondary_results[S] * multiplier) + + var/list/seen = viewers(4, get_turf(my_atom)) + for(var/mob/M in seen) + if(!C.no_message) + to_chat(M, "[bicon(my_atom)] [C.mix_message]") + + if(istype(my_atom, /obj/item/slime_extract)) + var/obj/item/slime_extract/ME2 = my_atom + ME2.Uses-- + if(ME2.Uses <= 0) // give the notification that the slime core is dead + for(var/mob/M in seen) + to_chat(M, "[bicon(my_atom)] The [my_atom]'s power is consumed in the reaction.") + ME2.name = "used slime extract" + ME2.desc = "This extract has been used up." + + playsound(get_turf(my_atom), C.mix_sound, 80, 1) + + C.on_reaction(src, created_volume) + reaction_occured = 1 + break + + while(reaction_occured) + update_total() + return 0 + +/datum/reagents/proc/isolate_reagent(reagent) + for(var/A in reagent_list) + var/datum/reagent/R = A + if(R.id != reagent) + del_reagent(R.id) + update_total() + +/datum/reagents/proc/del_reagent(reagent) + for(var/A in reagent_list) + var/datum/reagent/R = A + if(R.id == reagent) + if(isliving(my_atom)) + var/mob/living/M = my_atom + R.on_mob_delete(M) + reagent_list -= A + qdel(A) + update_total() + my_atom.on_reagent_change() + return 0 + + + return 1 + +/datum/reagents/proc/update_total() + total_volume = 0 + for(var/datum/reagent/R in reagent_list) + if(R.volume < 0.1) + del_reagent(R.id) + else + total_volume += R.volume + + return 0 + +/datum/reagents/proc/clear_reagents() + for(var/datum/reagent/R in reagent_list) + del_reagent(R.id) + return 0 + +/datum/reagents/proc/reaction_check(mob/living/M, datum/reagent/R) + var/can_process = 0 + if(ishuman(M)) + var/mob/living/carbon/human/H = M + //Check if this mob's species is set and can process this type of reagent + if(H.species && H.species.reagent_tag) + if((R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_SYN)) //SYNTHETIC-oriented reagents require PROCESS_SYN + can_process = 1 + if((R.process_flags & ORGANIC) && (H.species.reagent_tag & PROCESS_ORG)) //ORGANIC-oriented reagents require PROCESS_ORG + can_process = 1 + //Species with PROCESS_DUO are only affected by reagents that affect both organics and synthetics, like acid and hellwater + if((R.process_flags & ORGANIC) && (R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_DUO)) + can_process = 1 + if(H.species && H.species.exotic_blood) + if(R.id == H.species.exotic_blood) + can_process = 0 + //We'll assume that non-human mobs lack the ability to process synthetic-oriented reagents (adjust this if we need to change that assumption) + else + if(R.process_flags != SYNTHETIC) + can_process = 1 + return can_process + +/datum/reagents/proc/reaction(atom/A, method=TOUCH, volume_modifier = 1) + switch(method) + if(TOUCH) + for(var/datum/reagent/R in reagent_list) + if(isliving(A)) + var/check = reaction_check(A, R) + if(!check) + continue + else + R.reaction_mob(A, TOUCH, R.volume*volume_modifier) + if(isturf(A)) + R.reaction_turf(A, R.volume*volume_modifier) + if(isobj(A)) + R.reaction_obj(A, R.volume*volume_modifier) + if(INGEST) + for(var/datum/reagent/R in reagent_list) + if(isliving(A)) + var/check = reaction_check(A, R) + if(!check) + continue + else + R.reaction_mob(A, INGEST, R.volume*volume_modifier) + if(isturf(A)) + R.reaction_turf(A, R.volume*volume_modifier) + if(isobj(A)) + R.reaction_obj(A, R.volume*volume_modifier) + +/datum/reagents/proc/add_reagent_list(list/list_reagents, list/data=null) // Like add_reagent but you can enter a list. Format it like this: list("toxin" = 10, "beer" = 15) + for(var/r_id in list_reagents) + var/amt = list_reagents[r_id] + add_reagent(r_id, amt, data) + +/datum/reagents/proc/add_reagent(reagent, amount, list/data=null, reagtemp = 300) + if(!isnum(amount)) + return 1 + update_total() + if(total_volume + amount > maximum_volume) amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen. + if(amount <= 0) + return 0 + chem_temp = round(((amount * reagtemp) + (total_volume * chem_temp)) / (total_volume + amount)) //equalize with new chems + + for(var/A in reagent_list) + + var/datum/reagent/R = A + if(R.id == reagent) + R.volume += amount + update_total() + my_atom.on_reagent_change() + R.on_merge(data) + handle_reactions() + return 0 + + var/datum/reagent/D = chemical_reagents_list[reagent] + if(D) + + var/datum/reagent/R = new D.type() + reagent_list += R + R.holder = src + R.volume = amount + if(data) + R.data = data + R.on_new(data) + + update_total() + my_atom.on_reagent_change() + handle_reactions() + return 0 + else + warning("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])") + + handle_reactions() + + return 1 + +/datum/reagents/proc/remove_reagent(reagent, amount, safety)//Added a safety check for the trans_id_to + + if(!isnum(amount)) + return 1 + + for(var/A in reagent_list) + var/datum/reagent/R = A + if(R.id == reagent) + R.volume -= amount + update_total() + if(!safety)//So it does not handle reactions when it need not to + handle_reactions() + my_atom.on_reagent_change() + return 0 + + return 1 + +/datum/reagents/proc/has_reagent(reagent, amount = -1) + + for(var/A in reagent_list) + var/datum/reagent/R = A + if(R.id == reagent) + if(!amount) + return R + else + if(R.volume >= amount) + return R + else + return 0 + + return 0 + +/datum/reagents/proc/get_reagent_amount(reagent) + for(var/A in reagent_list) + var/datum/reagent/R = A + if(R.id == reagent) + return R.volume + + return 0 + +/datum/reagents/proc/get_reagents() + var/res = "" + for(var/datum/reagent/A in reagent_list) + if(res != "") res += "," + res += A.name + + return res + +/datum/reagents/proc/get_reagent(type) + . = locate(type) in reagent_list + +/datum/reagents/proc/remove_all_type(reagent_type, amount, strict = 0, safety = 1) // Removes all reagent of X type. @strict set to 1 determines whether the childs of the type are included. + if(!isnum(amount)) + return 1 + + var/has_removed_reagent = 0 + + for(var/datum/reagent/R in reagent_list) + var/matches = 0 + // Switch between how we check the reagent type + if(strict) + if(R.type == reagent_type) + matches = 1 + else + if(istype(R, reagent_type)) + matches = 1 + // We found a match, proceed to remove the reagent. Keep looping, we might find other reagents of the same type. + if(matches) + // Have our other proc handle removement + has_removed_reagent = remove_reagent(R.id, amount, safety) + + return has_removed_reagent + +// Admin logging. +/datum/reagents/proc/get_reagent_ids(and_amount=0) + var/list/stuff = list() + for(var/datum/reagent/A in reagent_list) + if(and_amount) + stuff += "[get_reagent_amount(A.id)]U of [A.id]" + else + stuff += A.id + return english_list(stuff) + +//two helper functions to preserve data across reactions (needed for xenoarch) +/datum/reagents/proc/get_data(reagent_id) + for(var/datum/reagent/D in reagent_list) + if(D.id == reagent_id) +// to_chat(world, "proffering a data-carrying reagent ([reagent_id])") + return D.data + +/datum/reagents/proc/set_data(reagent_id, new_data) + for(var/datum/reagent/D in reagent_list) + if(D.id == reagent_id) +// to_chat(world, "reagent data set ([reagent_id])") + D.data = new_data + +/datum/reagents/proc/copy_data(datum/reagent/current_reagent) + if(!current_reagent || !current_reagent.data) + return null + if(!istype(current_reagent.data, /list)) + return current_reagent.data + + var/list/trans_data = current_reagent.data.Copy() + + // We do this so that introducing a virus to a blood sample + // doesn't automagically infect all other blood samples from + // the same donor. + // + // Technically we should probably copy all data lists, but + // that could possibly eat up a lot of memory needlessly + // if most data lists are read-only. + if(trans_data["viruses"]) + var/list/v = trans_data["viruses"] + trans_data["viruses"] = v.Copy() + + return trans_data + +// For random item spawning. Takes a list of paths, and returns the same list without anything that contains admin only reagents +/proc/adminReagentCheck(list/incoming) + var/list/outgoing[0] + for(var/tocheck in incoming) + if(ispath(tocheck)) + var/check = new tocheck + if(istype(check, /atom)) + var/atom/reagentCheck = check + var/datum/reagents/reagents = reagentCheck.reagents + var/admin = 0 + for(var/reag in reagents.reagent_list) + var/datum/reagent/reagent = reag + if(reagent.admin_only) + admin = 1 + break + if(!(admin)) + outgoing += tocheck + else + outgoing += tocheck + return outgoing + +/////////////////////////////////////////////////////////////////////////////////// + + +// Convenience proc to create a reagents holder for an atom +// Max vol is maximum volume of holder +atom/proc/create_reagents(max_vol) + reagents = new/datum/reagents(max_vol) + reagents.my_atom = src + +/datum/reagents/proc/get_reagent_from_id(id) + var/datum/reagent/result = null + for(var/datum/reagent/R in reagent_list) + if(R.id == id) + result = R + break + return result + +/datum/reagents/Destroy() + . = ..() + processing_objects.Remove(src) + for(var/datum/reagent/R in reagent_list) + qdel(R) + reagent_list.Cut() + reagent_list = null + if(my_atom && my_atom.reagents == src) + my_atom.reagents = null diff --git a/code/modules/reagents/newchem/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm similarity index 100% rename from code/modules/reagents/newchem/chem_heater.dm rename to code/modules/reagents/chemistry/machinery/chem_heater.dm diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/chemistry/machinery/chemistry_machinery.dm similarity index 97% rename from code/modules/reagents/Chemistry-Machinery.dm rename to code/modules/reagents/chemistry/machinery/chemistry_machinery.dm index ddd53d98fdf..913f6e593eb 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/chemistry/machinery/chemistry_machinery.dm @@ -1,1215 +1,1215 @@ -#define SOLID 1 -#define LIQUID 2 -#define GAS 3 - -/obj/machinery/chem_dispenser - name = "chem dispenser" - density = 1 - anchored = 1 - icon = 'icons/obj/chemical.dmi' - icon_state = "dispenser" - use_power = 0 - idle_power_usage = 40 - var/ui_title = "Chem Dispenser 5000" - var/energy = 100 - var/max_energy = 100 - var/amount = 30 - var/obj/item/weapon/reagent_containers/beaker = null - var/recharged = 0 - var/hackedcheck = 0 - var/list/dispensable_reagents = list("hydrogen", "lithium", "carbon", "nitrogen", "oxygen", "fluorine", - "sodium", "aluminum", "silicon", "phosphorus", "sulfur", "chlorine", "potassium", "iron", - "copper", "mercury", "plasma", "radium", "water", "ethanol", "sugar", "iodine", "bromine", "silver") - var/list/hacked_reagents = list("toxin") - var/hack_message = "You disable the safety safeguards, enabling the \"Mad Scientist\" mode." - var/unhack_message = "You re-enable the safety safeguards, enabling the \"NT Standard\" mode." - var/list/broken_requirements = list() - var/broken_on_spawn = 0 - var/recharge_delay = 5 - var/image/icon_beaker = null //cached overlay - - -/obj/machinery/chem_dispenser/proc/recharge() - if(stat & (BROKEN|NOPOWER)) return - var/addenergy = 1 - var/oldenergy = energy - energy = min(energy + addenergy, max_energy) - if(energy != oldenergy) - use_power(1500) // This thing uses up alot of power (this is still low as shit for creating reagents from thin air) - nanomanager.update_uis(src) // update all UIs attached to src - -/obj/machinery/chem_dispenser/power_change() - if(powered()) - stat &= ~NOPOWER - else - spawn(rand(0, 15)) - stat |= NOPOWER - nanomanager.update_uis(src) // update all UIs attached to src - -/obj/machinery/chem_dispenser/process() - - if(recharged < 0) - recharge() - recharged = recharge_delay - else - recharged -= 1 - -/obj/machinery/chem_dispenser/New() - ..() - recharge() - dispensable_reagents = sortList(dispensable_reagents) - - if(broken_on_spawn) - overlays.Cut() - var/amount = pick(3,3,4) - var/list/options = list() - options[/obj/item/weapon/stock_parts/capacitor/adv] = "Add an advanced capacitor to fix it." - options[/obj/item/weapon/stock_parts/console_screen] = "Replace the console screen to fix it." - options[/obj/item/weapon/stock_parts/manipulator/pico] = "Upgrade to a pico manipulator to fix it." - options[/obj/item/weapon/stock_parts/matter_bin/super] = "Give it a super matter bin to fix it." - options[/obj/item/weapon/stock_parts/cell/super] = "Replace the reagent synthesizer with a super capacity cell to fix it." - options[/obj/item/device/mass_spectrometer/adv] = "Replace the reagent scanner with an advanced mass spectrometer to fix it" - options[/obj/item/weapon/stock_parts/micro_laser/high] = "Repair the reagent synthesizer with an high-power micro-laser to fix it" - options[/obj/item/device/reagent_scanner/adv] = "Replace the reagent scanner with an advanced reagent scanner to fix it" - options[/obj/item/stack/nanopaste] = "Apply some nanopaste to the broken nozzles to fix it." - options[/obj/item/stack/sheet/plasteel] = "Surround the outside with a plasteel cover to fix it." - options[/obj/item/stack/sheet/rglass] = "Insert a pane of reinforced glass to fix it." - - while(amount > 0) - amount -= 1 - - var/index = pick(options) - broken_requirements[index] = options[index] - options -= index - - -/obj/machinery/chem_dispenser/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if(prob(50)) - qdel(src) - return - -/obj/machinery/chem_dispenser/blob_act() - if(prob(50)) - qdel(src) - - /** - * The ui_interact proc is used to open and update Nano UIs - * If ui_interact is not used then the UI will not update correctly - * ui_interact is currently defined for /atom/movable - * - * @param user /mob The mob who is interacting with this ui - * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") - * - * @return nothing - */ - -/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) - if(broken_requirements.len) - to_chat(user, "[src] is broken. [broken_requirements[broken_requirements[1]]]") - return - - - // this is the data which will be sent to the ui - var/data[0] - data["amount"] = amount - data["energy"] = round(energy) - data["maxEnergy"] = round(max_energy) - data["isBeakerLoaded"] = beaker ? 1 : 0 - - var beakerContents[0] - var beakerCurrentVolume = 0 - if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beakerContents.Add(list(list("name" = R.name, "id"=R.id, "volume" = R.volume))) // list in a list because Byond merges the first list... - beakerCurrentVolume += R.volume - data["beakerContents"] = beakerContents - - if(beaker) - data["beakerCurrentVolume"] = beakerCurrentVolume - data["beakerMaxVolume"] = beaker.volume - else - data["beakerCurrentVolume"] = null - data["beakerMaxVolume"] = null - - var chemicals[0] - for(var/re in dispensable_reagents) - var/datum/reagent/temp = chemical_reagents_list[re] - if(temp) - chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("dispense" = temp.id)))) // list in a list because Byond merges the first list... - data["chemicals"] = chemicals - - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "chem_dispenser.tmpl", ui_title, 390, 655) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - -/obj/machinery/chem_dispenser/Topic(href, href_list) - if(..()) - return 1 - - if(href_list["amount"]) - amount = round(text2num(href_list["amount"]), 5) // round to nearest 5 - if(amount < 0) // Since the user can actually type the commands himself, some sanity checking - amount = 0 - if(amount > 100) - amount = 100 - - if(href_list["dispense"]) - if(dispensable_reagents.Find(href_list["dispense"]) && beaker != null) - var/obj/item/weapon/reagent_containers/glass/B = beaker - var/datum/reagents/R = B.reagents - var/space = R.maximum_volume - R.total_volume - - R.add_reagent(href_list["dispense"], min(amount, energy * 10, space)) - energy = max(energy - min(amount, energy * 10, space) / 10, 0) - overlays.Cut() - icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position. - icon_beaker.pixel_x = rand(-10,5) - overlays += icon_beaker - - if(href_list["remove"]) - if(beaker) - if(href_list["removeamount"]) - var/amount = text2num(href_list["removeamount"]) - if(isnum(amount) && (amount > 0)) - var/obj/item/weapon/reagent_containers/glass/B = beaker - var/datum/reagents/R = B.reagents - var/id = href_list["remove"] - R.remove_reagent(id, amount) - - if(href_list["ejectBeaker"]) - if(beaker) - var/obj/item/weapon/reagent_containers/glass/B = beaker - B.forceMove(loc) - beaker = null - overlays.Cut() - add_fingerprint(usr) - return 1 // update UIs attached to this object - -/obj/machinery/chem_dispenser/attackby(obj/item/weapon/reagent_containers/B, mob/user, params) - if(isrobot(user)) - return - - if(broken_requirements.len && B.type == broken_requirements[1]) - if(istype(B,/obj/item/stack)) - var/obj/item/stack/S = B - S.use(1) - else - if(!user.drop_item()) - to_chat(user, "[B] is stuck to you!") - return - qdel(B) - broken_requirements -= broken_requirements[1] - to_chat(user, "You fix [src].") - return - - if(beaker) - to_chat(user, "Something is already loaded into the machine.") - return - - if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B, /obj/item/weapon/reagent_containers/food/drinks)) - beaker = B - if(!user.drop_item()) - to_chat(user, "[B] is stuck to you!") - return - B.forceMove(src) - to_chat(user, "You set [B] on the machine.") - nanomanager.update_uis(src) // update all UIs attached to src - if(!icon_beaker) - icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position. - icon_beaker.pixel_x = rand(-10,5) - overlays += icon_beaker - return - -/obj/machinery/chem_dispenser/attackby(obj/item/weapon/B, mob/user, params) - ..() - if(istype(B, /obj/item/device/multitool)) - if(hackedcheck == 0) - to_chat(user, hack_message) - dispensable_reagents += hacked_reagents - hackedcheck = 1 - return - - else - to_chat(user, unhack_message) - dispensable_reagents -= hacked_reagents - hackedcheck = 0 - return - -/obj/machinery/chem_dispenser/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/chem_dispenser/attack_ghost(mob/user) - return attack_hand(user) - -/obj/machinery/chem_dispenser/attack_hand(mob/user) - if(stat & BROKEN) - return - - ui_interact(user) - -/obj/machinery/chem_dispenser/soda - icon_state = "soda_dispenser" - name = "soda fountain" - desc = "A drink fabricating machine, capable of producing many sugary drinks with just one touch." - ui_title = "Soda Dispens-o-matic" - energy = 100 - max_energy = 100 - dispensable_reagents = list("water", "ice", "milk", "soymilk", "coffee", "tea", "hot_coco", "cola", "spacemountainwind", "dr_gibb", "space_up", - "tonic", "sodawater", "lemon_lime", "grapejuice", "sugar", "orangejuice", "lemonjuice", "limejuice", "tomatojuice", "banana", - "watermelonjuice", "carrotjuice", "potato", "berryjuice") - hack_message = "You change the mode from 'McNano' to 'Pizza King'." - unhack_message = "You change the mode from 'Pizza King' to 'McNano'." - hacked_reagents = list("thirteenloko") - -/obj/machinery/chem_dispenser/beer - icon_state = "booze_dispenser" - name = "booze dispenser" - ui_title = "Booze Portal 9001" - energy = 100 - max_energy = 100 - desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one." - dispensable_reagents = list("ice", "cream", "cider", "beer", "kahlua", "whiskey", "wine", "vodka", "gin", "rum", "tequila", "vermouth", "cognac", "ale", "mead", "synthanol") - hack_message = "You disable the 'nanotrasen-are-cheap-bastards' lock, enabling hidden and very expensive boozes." - unhack_message = "You re-enable the 'nanotrasen-are-cheap-bastards' lock, disabling hidden and very expensive boozes." - hacked_reagents = list("goldschlager", "patron", "absinthe", "ethanol", "nothing") - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/obj/machinery/chem_dispenser/constructable - name = "portable chem dispenser" - icon = 'icons/obj/chemical.dmi' - icon_state = "minidispenser" - energy = 5 - max_energy = 5 - amount = 5 - recharge_delay = 10 - dispensable_reagents = list() - var/list/special_reagents = list(list("hydrogen", "oxygen", "silicon", "phosphorus", "sulfur", "carbon", "nitrogen", "water"), - list("lithium", "sugar", "copper", "mercury", "sodium","iodine","bromine"), - list("ethanol", "chlorine", "potassium", "aluminum","plasma", "radium", "fluorine", "iron", "silver"), - list("oil", "ash", "acetone", "saltpetre", "ammonia", "diethylamine", "fuel")) - -/obj/machinery/chem_dispenser/constructable/New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/cell/super(null) - RefreshParts() - -/obj/machinery/chem_dispenser/constructable/upgraded/New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor/super(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/cell/hyper(null) - RefreshParts() - -/obj/machinery/chem_dispenser/constructable/RefreshParts() - var/time = 0 - var/temp_energy = 0 - var/i - for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) - temp_energy += M.rating - temp_energy-- - max_energy = temp_energy * 5 //max energy = (bin1.rating + bin2.rating - 1) * 5, 5 on lowest 25 on highest - for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) - time += C.rating - for(var/obj/item/weapon/stock_parts/cell/P in component_parts) - time += round(P.maxcharge, 10000) / 10000 - recharge_delay = 10 / (time/2) //delay between recharges, double the usual time on lowest 33% less than usual on highest - for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) - for(i=1, i<=M.rating, i++) - dispensable_reagents = sortList(dispensable_reagents | special_reagents[i]) - -/obj/machinery/chem_dispenser/constructable/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/reagent_containers/glass)) - if(panel_open) - to_chat(user, "Close the maintenance panel first.") - return - ..() - else - ..() - - if(default_deconstruction_screwdriver(user, "minidispenser-o", "minidispenser", I)) - return - - if(exchange_parts(user, I)) - return - - if(istype(I, /obj/item/weapon/wrench)) - playsound(src, 'sound/items/Ratchet.ogg', 50, 1) - if(anchored) - anchored = 0 - to_chat(user, "[src] can now be moved.") - else if(!anchored) - anchored = 1 - to_chat(user, "[src] is now secured.") - - if(panel_open) - if(istype(I, /obj/item/weapon/crowbar)) - if(beaker) - var/obj/item/weapon/reagent_containers/glass/B = beaker - B.forceMove(loc) - beaker = null - default_deconstruction_crowbar(I) - return 1 - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/obj/machinery/chem_master - name = "\improper ChemMaster 3000" - density = 1 - anchored = 1 - icon = 'icons/obj/chemical.dmi' - icon_state = "mixer0" - use_power = 1 - idle_power_usage = 20 - var/obj/item/weapon/reagent_containers/beaker = null - var/obj/item/weapon/storage/pill_bottle/loaded_pill_bottle = null - var/mode = 0 - var/condi = 0 - var/useramount = 30 // Last used amount - var/pillamount = 10 - var/patchamount = 10 - var/bottlesprite = "bottle" - var/pillsprite = "1" - var/client/has_sprites = list() - var/printing = null - -/obj/machinery/chem_master/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src - overlays += "waitlight" - -/obj/machinery/chem_master/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if(prob(50)) - qdel(src) - return - -/obj/machinery/chem_master/blob_act() - if(prob(50)) - qdel(src) - -/obj/machinery/chem_master/power_change() - if(powered()) - stat &= ~NOPOWER - else - spawn(rand(0, 15)) - stat |= NOPOWER - -/obj/machinery/chem_master/attackby(obj/item/weapon/B, mob/user, params) - - if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B, /obj/item/weapon/reagent_containers/food/drinks/drinkingglass)) - - if(beaker) - to_chat(user, "A beaker is already loaded into the machine.") - return - if(!user.drop_item()) - to_chat(user, "[B] is stuck to you!") - return - beaker = B - B.forceMove(src) - to_chat(user, "You add the beaker to the machine!") - nanomanager.update_uis(src) - icon_state = "mixer1" - - else if(istype(B, /obj/item/weapon/storage/pill_bottle)) - - if(loaded_pill_bottle) - to_chat(user, "A pill bottle is already loaded into the machine.") - return - - if(!user.drop_item()) - to_chat(user, "[B] is stuck to you!") - return - loaded_pill_bottle = B - B.forceMove(src) - to_chat(user, "You add the pill bottle into the dispenser slot!") - nanomanager.update_uis(src) - return - -/obj/machinery/chem_master/Topic(href, href_list) - if(..()) - return 1 - - add_fingerprint(usr) - usr.set_machine(src) - - - if(href_list["ejectp"]) - if(loaded_pill_bottle) - loaded_pill_bottle.forceMove(loc) - loaded_pill_bottle = null - else if(href_list["close"]) - usr << browse(null, "window=chem_master") - onclose(usr, "chem_master") - usr.unset_machine() - return - - if(href_list["print_p"]) - if(!(printing)) - printing = 1 - visible_message("[src] rattles and prints out a sheet of paper.") - playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc) - P.info = "

Chemical Analysis

" - P.info += "Time of analysis: [worldtime2text(world.time)]

" - P.info += "Chemical name: [href_list["name"]]
" - if(href_list["name"] == "Blood") - var/datum/reagents/R = beaker.reagents - var/datum/reagent/blood/G - for(var/datum/reagent/F in R.reagent_list) - if(F.name == href_list["name"]) - G = F - break - var/B = G.data["blood_type"] - var/C = G.data["blood_DNA"] - P.info += "Description:
Blood Type: [B]
DNA: [C]" - else - P.info += "Description: [href_list["desc"]]" - P.info += "

Notes:
" - P.name = "Chemical Analysis - [href_list["name"]]" - printing = null - - if(beaker) - var/datum/reagents/R = beaker.reagents - if(href_list["analyze"]) - var/dat = "" - if(!condi) - if(href_list["name"] == "Blood") - var/datum/reagent/blood/G - for(var/datum/reagent/F in R.reagent_list) - if(F.name == href_list["name"]) - G = F - break - var/A = G.name - var/B = G.data["blood_type"] - var/C = G.data["blood_DNA"] - dat += "Chemmaster 3000Chemical infos:

Name:
[A]

Description:
Blood Type: [B]
DNA: [C]" - else - dat += "Chemmaster 3000Chemical infos:

Name:
[href_list["name"]]

Description:
[href_list["desc"]]" - dat += "

(Print Analysis)
" - dat += "(Back)" - else - dat += "Condimaster 3000Condiment infos:

Name:
[href_list["name"]]

Description:
[href_list["desc"]]


(Back)" - usr << browse(dat, "window=chem_master;size=575x400") - return - - else if(href_list["add"]) - - if(href_list["amount"]) - var/id = href_list["add"] - var/amount = text2num(href_list["amount"]) - R.trans_id_to(src, id, amount) - - else if(href_list["addcustom"]) - - var/id = href_list["addcustom"] - useramount = input("Select the amount to transfer.", 30, useramount) as num - useramount = isgoodnumber(useramount) - Topic(null, list("amount" = "[useramount]", "add" = "[id]")) - - else if(href_list["remove"]) - - if(href_list["amount"]) - var/id = href_list["remove"] - var/amount = text2num(href_list["amount"]) - if(mode) - reagents.trans_id_to(beaker, id, amount) - else - reagents.remove_reagent(id, amount) - - - else if(href_list["removecustom"]) - - var/id = href_list["removecustom"] - useramount = input("Select the amount to transfer.", 30, useramount) as num - useramount = isgoodnumber(useramount) - Topic(null, list("amount" = "[useramount]", "remove" = "[id]")) - - else if(href_list["toggle"]) - mode = !mode - - else if(href_list["main"]) - attack_hand(usr) - return - else if(href_list["eject"]) - if(beaker) - beaker.forceMove(get_turf(src)) - beaker = null - reagents.clear_reagents() - icon_state = "mixer0" - else if(href_list["createpill"] || href_list["createpill_multiple"]) - if(!condi) - var/count = 1 - if(href_list["createpill_multiple"]) - count = input("Select the number of pills to make.", 10, pillamount) as num|null - if(count == null) - return - count = isgoodnumber(count) - if(count > 20) count = 20 //Pevent people from creating huge stacks of pills easily. Maybe move the number to defines? - if(count <= 0) return - var/amount_per_pill = reagents.total_volume/count - if(amount_per_pill > 50) amount_per_pill = 50 - var/name = input(usr,"Name:","Name your pill!","[reagents.get_master_reagent_name()] ([amount_per_pill]u)") as text|null - if(!name) - return - name = reject_bad_text(name) - while(count--) - var/obj/item/weapon/reagent_containers/food/pill/P = new/obj/item/weapon/reagent_containers/food/pill(loc) - if(!name) name = reagents.get_master_reagent_name() - P.name = "[name] pill" - P.pixel_x = rand(-7, 7) //random position - P.pixel_y = rand(-7, 7) - P.icon_state = "pill"+pillsprite - reagents.trans_to(P,amount_per_pill) - if(loaded_pill_bottle) - if(loaded_pill_bottle.contents.len < loaded_pill_bottle.storage_slots) - P.forceMove(loaded_pill_bottle) - updateUsrDialog() - else - var/name = input(usr,"Name:","Name your bag!",reagents.get_master_reagent_name()) as text|null - if(!name) - return - name = reject_bad_text(name) - var/obj/item/weapon/reagent_containers/food/condiment/pack/P = new/obj/item/weapon/reagent_containers/food/condiment/pack(loc) - if(!name) name = reagents.get_master_reagent_name() - P.originalname = name - P.name = "[name] pack" - P.desc = "A small condiment pack. The label says it contains [name]." - reagents.trans_to(P,10) - else if(href_list["createpatch"] || href_list["createpatch_multiple"]) - if(!condi) - var/count = 1 - if(href_list["createpatch_multiple"]) - count = input("Select the number of patches to make.", 10, patchamount) as num|null - if(count == null) - return - count = isgoodnumber(count) - if(!count || count <= 0) - return - if(count > 20) count = 20 //Pevent people from creating huge stacks of patches easily. Maybe move the number to defines? - var/amount_per_patch = reagents.total_volume/count - if(amount_per_patch > 40) amount_per_patch = 40 - var/name = input(usr,"Name:","Name your patch!","[reagents.get_master_reagent_name()] ([amount_per_patch]u)") as text|null - if(!name) - return - name = reject_bad_text(name) - var/is_medical_patch = chemical_safety_check(reagents) - while(count--) - var/obj/item/weapon/reagent_containers/food/pill/patch/P = new/obj/item/weapon/reagent_containers/food/pill/patch(loc) - if(!name) name = reagents.get_master_reagent_name() - P.name = "[name] patch" - P.pixel_x = rand(-7, 7) //random position - P.pixel_y = rand(-7, 7) - reagents.trans_to(P,amount_per_patch) - if(is_medical_patch) - P.instant_application = 1 - P.icon_state = "bandaid_med" - else if(href_list["createbottle"]) - if(!condi) - var/name = input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name()) as text|null - if(!name) - return - name = reject_bad_text(name) - var/obj/item/weapon/reagent_containers/glass/bottle/P = new/obj/item/weapon/reagent_containers/glass/bottle(loc) - if(!name) name = reagents.get_master_reagent_name() - P.name = "[name] bottle" - P.pixel_x = rand(-7, 7) //random position - P.pixel_y = rand(-7, 7) - P.icon_state = bottlesprite - reagents.trans_to(P,30) - else - var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(loc) - reagents.trans_to(P,50) - else if(href_list["change_pill"]) - #define MAX_PILL_SPRITE 20 //max icon state of the pill sprites - var/dat = "" - var/j = 0 - for(var/i = 1 to MAX_PILL_SPRITE) - j++ - if(j == 1) - dat += "" - dat += "" - if(j == 5) - dat += "" - j = 0 - dat += "
" - usr << browse(dat, "window=chem_master_iconsel;size=225x193") - return - else if(href_list["change_bottle"]) - var/dat = "" - var/j = 0 - for(var/i in list("bottle", "small_bottle", "wide_bottle", "round_bottle")) - j++ - if(j == 1) - dat += "" - dat += "" - if(j == 5) - dat += "" - j = 0 - dat += "
" - usr << browse(dat, "window=chem_master_iconsel;size=225x193") - return - else if(href_list["pill_sprite"]) - pillsprite = href_list["pill_sprite"] - usr << browse(null, "window=chem_master_iconsel") - else if(href_list["bottle_sprite"]) - bottlesprite = href_list["bottle_sprite"] - usr << browse(null, "window=chem_master_iconsel") - - nanomanager.update_uis(src) - return - -/obj/machinery/chem_master/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/chem_master/attack_ghost(mob/user) - return attack_hand(user) - -/obj/machinery/chem_master/attack_hand(mob/user) - if(..()) - return 1 - ui_interact(user) - return - -/obj/machinery/chem_master/ui_interact(mob/user, ui_key="main", datum/nanoui/ui = null, force_open = 1) - - var/datum/asset/chem_master/assets = get_asset_datum(/datum/asset/chem_master) - assets.send(user) - - var/data = list() - - data["condi"] = condi - data["loaded_pill_bottle"] = (loaded_pill_bottle ? 1 : 0) - if(loaded_pill_bottle) - data["loaded_pill_bottle_contents_len"] = loaded_pill_bottle.contents.len - data["loaded_pill_bottle_storage_slots"] = loaded_pill_bottle.storage_slots - - data["beaker"] = (beaker ? 1 : 0) - if(beaker) - var/list/beaker_reagents_list = list() - data["beaker_reagents"] = beaker_reagents_list - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beaker_reagents_list[++beaker_reagents_list.len] = list("name" = R.name, "volume" = R.volume, "id" = R.id, "description" = R.description) - var/list/buffer_reagents_list = list() - data["buffer_reagents"] = buffer_reagents_list - for(var/datum/reagent/R in reagents.reagent_list) - buffer_reagents_list[++buffer_reagents_list.len] = list("name" = R.name, "volume" = R.volume, "id" = R.id, "description" = R.description) - - data["pillsprite"] = pillsprite - data["bottlesprite"] = bottlesprite - data["mode"] = mode - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "chem_master.tmpl", name, 575, 400) - ui.set_initial_data(data) - ui.open() - -/obj/machinery/chem_master/proc/isgoodnumber(num) - if(isnum(num)) - if(num > 200) - num = 200 - else if(num < 0) - num = 1 - else - num = round(num) - return num - else - return 0 - -/obj/machinery/chem_master/proc/chemical_safety_check(datum/reagents/R) - var/all_safe = 1 - for(var/datum/reagent/A in R.reagent_list) - if(!safe_chem_list.Find(A.id)) - all_safe = 0 - return all_safe - -/obj/machinery/chem_master/condimaster - name = "\improper CondiMaster 3000" - condi = 1 - -/obj/machinery/chem_master/constructable - name = "ChemMaster 2999" - desc = "Used to seperate chemicals and distribute them in a variety of forms." - -/obj/machinery/chem_master/constructable/New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/chem_master(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null) - -/obj/machinery/chem_master/constructable/attackby(obj/item/B, mob/user, params) - - if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", B)) - if(beaker) - beaker.forceMove(get_turf(src)) - beaker = null - reagents.clear_reagents() - if(loaded_pill_bottle) - loaded_pill_bottle.forceMove(get_turf(src)) - loaded_pill_bottle = null - return - - if(exchange_parts(user, B)) - return - - if(panel_open) - if(istype(B, /obj/item/weapon/crowbar)) - default_deconstruction_crowbar(B) - return 1 - else - to_chat(user, "You can't use the [name] while it's panel is opened!") - return 1 - else - ..() - -/obj/machinery/reagentgrinder - - name = "\improper All-In-One Grinder" - icon = 'icons/obj/kitchen.dmi' - icon_state = "juicer1" - layer = 2.9 - density = 1 - anchored = 1 - use_power = 1 - idle_power_usage = 5 - active_power_usage = 100 - var/inuse = 0 - var/obj/item/weapon/reagent_containers/beaker = null - var/limit = 10 - - //IMPORTANT NOTE! A negative number is a multiplier, a positive number is a flat amount to add. 0 means equal to the amount of the original reagent - var/list/blend_items = list ( - - //Sheets - /obj/item/stack/sheet/mineral/plasma = list("plasma_dust" = 20), - /obj/item/stack/sheet/mineral/uranium = list("uranium" = 20), - /obj/item/stack/sheet/mineral/bananium = list("banana" = 20), - /obj/item/stack/sheet/mineral/tranquillite = list("nothing" = 20), - /obj/item/stack/sheet/mineral/silver = list("silver" = 20), - /obj/item/stack/sheet/mineral/gold = list("gold" = 20), - /obj/item/weapon/grown/novaflower = list("capsaicin" = 0), - - //archaeology! - ///obj/item/weapon/rocksliver = list("ground_rock" = 50), - - - //All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.! - /obj/item/weapon/reagent_containers/food = list(), - /obj/item/weapon/reagent_containers/honeycomb = list() - ) - - var/list/blend_tags = list ( - "nettle" = list("sacid" = 0), - "deathnettle" = list("facid" = 0), - "soybeans" = list("soymilk" = 0), - "tomato" = list("ketchup" = 0), - "wheat" = list("flour" = -5), - "rice" = list("rice" = -5), - "cherries" = list("cherryjelly" = 0), - ) - - var/list/juice_items = list ( - /obj/item/weapon/reagent_containers/food/snacks/watermelonslice = list("watermelonjuice" = 0), - ) - - var/list/juice_tags = list ( - "tomato" = list("tomatojuice" = 0), - "carrot" = list("carrotjuice" = 0), - "berries" = list("berryjuice" = 0), - "banana" = list("banana" = 0), - "potato" = list("potato" = 0), - "lemon" = list("lemonjuice" = 0), - "orange" = list("orangejuice" = 0), - "lime" = list("limejuice" = 0), - "poisonberries" = list("poisonberryjuice" = 0), - "grapes" = list("grapejuice" = 0), - "corn" = list("cornoil" = 0), - ) - - var/list/holdingitems = list() - -/obj/machinery/reagentgrinder/New() - ..() - beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) - return - -/obj/machinery/reagentgrinder/update_icon() - icon_state = "juicer"+num2text(!isnull(beaker)) - return - -/obj/machinery/reagentgrinder/attackby(obj/item/O, mob/user, params) - - if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ - istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \ - istype(O,/obj/item/weapon/reagent_containers/food/drinks/shaker)) - - if(beaker) - return 1 - else - if(!user.drop_item()) - to_chat(user, "[O] is stuck to you!") - return - beaker = O - O.forceMove(src) - update_icon() - updateUsrDialog() - return 0 - - if(holdingitems && holdingitems.len >= limit) - to_chat(usr, "The machine cannot hold anymore items.") - return 1 - - //Fill machine with a plantbag! - if(istype(O, /obj/item/weapon/storage/bag/plants)) - var/obj/item/weapon/storage/bag/plants/PB = O - for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in PB.contents) - PB.remove_from_storage(G, src) - holdingitems += G - if(holdingitems && holdingitems.len >= limit) //Sanity checking so the blender doesn't overfill - to_chat(user, "You empty [PB] into the All-In-One grinder.") - - updateUsrDialog() - return 0 - - - if(!is_type_in_list(O, blend_items) && !is_type_in_list(O, juice_items)) - to_chat(user, "Cannot refine into a reagent.") - return 1 - - user.unEquip(O) - O.forceMove(src) - holdingitems += O - updateUsrDialog() - return 0 - -/obj/machinery/reagentgrinder/attack_ai(mob/user) - return 0 - -/obj/machinery/reagentgrinder/attack_hand(mob/user) - user.set_machine(src) - interact(user) - -/obj/machinery/reagentgrinder/interact(mob/user) // The microwave Menu - var/is_chamber_empty = 0 - var/is_beaker_ready = 0 - var/processing_chamber = "" - var/beaker_contents = "" - var/dat = "" - - if(!inuse) - for(var/obj/item/O in holdingitems) - processing_chamber += "\A [O.name]
" - - if(!processing_chamber) - is_chamber_empty = 1 - processing_chamber = "Nothing." - if(!beaker) - beaker_contents = "No beaker attached.
" - else - is_beaker_ready = 1 - beaker_contents = "The beaker contains:
" - var/anything = 0 - for(var/datum/reagent/R in beaker.reagents.reagent_list) - anything = 1 - beaker_contents += "[R.volume] - [R.name]
" - if(!anything) - beaker_contents += "Nothing
" - - - dat = {" - Processing chamber contains:
- [processing_chamber]
- [beaker_contents]
- "} - if(is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) - dat += "Grind the reagents
" - dat += "Juice the reagents

" - if(holdingitems && holdingitems.len > 0) - dat += "Eject the reagents
" - if(beaker) - dat += "Detach the beaker
" - else - dat += "Please wait..." - user << browse("All-In-One Grinder[dat]", "window=reagentgrinder") - onclose(user, "reagentgrinder") - return - -/obj/machinery/reagentgrinder/Topic(href, href_list) - if(..()) - return - usr.set_machine(src) - switch(href_list["action"]) - if("grind") - grind() - if("juice") - juice() - if("eject") - eject() - if("detach") - detach() - updateUsrDialog() - return - -/obj/machinery/reagentgrinder/proc/detach() - - if(usr.stat != 0) - return - if(!beaker) - return - beaker.forceMove(loc) - beaker = null - update_icon() - -/obj/machinery/reagentgrinder/proc/eject() - - if(usr.stat != 0) - return - if(holdingitems && holdingitems.len == 0) - return - - for(var/obj/item/O in holdingitems) - O.forceMove(loc) - holdingitems -= O - holdingitems = list() - -/obj/machinery/reagentgrinder/proc/is_allowed(obj/item/weapon/reagent_containers/O) - for(var/i in blend_items) - if(istype(O, i)) - return 1 - return 0 - -/obj/machinery/reagentgrinder/proc/get_allowed_by_id(obj/item/weapon/grown/O) - for(var/i in blend_items) - if(istype(O, i)) - return blend_items[i] - -/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_id(obj/item/weapon/reagent_containers/food/snacks/O) - for(var/i in blend_items) - if(istype(O, i)) - return blend_items[i] - -/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_id(obj/item/weapon/reagent_containers/food/snacks/O) - for(var/i in juice_items) - if(istype(O, i)) - return juice_items[i] - -/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_tag(obj/item/weapon/reagent_containers/food/snacks/grown/O) - for(var/i in blend_tags) - if(O.seed.kitchen_tag == i) - return blend_tags[i] - -/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_tag(obj/item/weapon/reagent_containers/food/snacks/grown/O) - for(var/i in juice_tags) - if(O.seed.kitchen_tag == i) - return juice_tags[i] - -/obj/machinery/reagentgrinder/proc/get_grownweapon_amount(obj/item/weapon/grown/O) - if(!istype(O)) - return 5 - else if(O.potency == -1) - return 5 - else - return round(O.potency) - -/obj/machinery/reagentgrinder/proc/get_juice_amount(obj/item/weapon/reagent_containers/food/snacks/grown/O) - if(!istype(O)) - return 5 - else if(O.potency == -1) - return 5 - else - return round(5*sqrt(O.potency)) - -/obj/machinery/reagentgrinder/proc/remove_object(obj/item/O) - holdingitems -= O - qdel(O) - -/obj/machinery/reagentgrinder/proc/juice() - power_change() - if(stat & (NOPOWER|BROKEN)) - return - if(!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) - return - playsound(loc, 'sound/machines/juicer.ogg', 20, 1) - var/offset = prob(50) ? -2 : 2 - animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking - inuse = 1 - spawn(50) - pixel_x = initial(pixel_x) //return to its spot after shaking - inuse = 0 - interact(usr) - //Snacks - for(var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems) - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - - var/allowed = null - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) - allowed = get_allowed_juice_by_tag(O) - else - allowed = get_allowed_juice_by_id(O) - if(isnull(allowed)) - break - - for(var/r_id in allowed) - - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = get_juice_amount(O) - - beaker.reagents.add_reagent(r_id, min(amount, space)) - - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - - remove_object(O) - -/obj/machinery/reagentgrinder/proc/grind() - - power_change() - if(stat & (NOPOWER|BROKEN)) - return - if(!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) - return - playsound(loc, 'sound/machines/blender.ogg', 50, 1) - var/offset = prob(50) ? -2 : 2 - animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking - inuse = 1 - spawn(60) - pixel_x = initial(pixel_x) //return to its spot after shaking - inuse = 0 - interact(usr) - //Snacks and Plants - for(var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems) - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - - var/allowed = null - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) - allowed = get_allowed_snack_by_tag(O) - else - allowed = get_allowed_snack_by_id(O) - if(isnull(allowed)) - break - - for(var/r_id in allowed) - - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - if(amount <= 0) //Negative amounts are multipliers for the reagent amount (Example: "amount = -5" means "reagent_amount * 5") - if(amount == 0) - if(O.reagents != null && O.reagents.has_reagent("nutriment")) - beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("nutriment"), space)) - O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) - if(O.reagents != null && O.reagents.has_reagent("plantmatter")) - beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("plantmatter"), space)) - O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) - else - if(O.reagents != null && O.reagents.has_reagent("nutriment")) - beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("nutriment")*abs(amount)), space)) - O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) - if(O.reagents != null && O.reagents.has_reagent("plantmatter")) - beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("plantmatter")*abs(amount)), space)) - O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) - - else - O.reagents.trans_id_to(beaker, r_id, min(amount, space)) - - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - - if(O.reagents.reagent_list.len == 0) - remove_object(O) - - //Sheets - for(var/obj/item/stack/sheet/O in holdingitems) - var/allowed = get_allowed_by_id(O) - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - for(var/i = 1; i <= round(O.amount, 1); i++) - for(var/r_id in allowed) - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - beaker.reagents.add_reagent(r_id,min(amount, space)) - if(space < amount) - break - if(i == round(O.amount, 1)) - remove_object(O) - break - //Plants - for(var/obj/item/weapon/grown/O in holdingitems) - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/allowed = get_allowed_by_id(O) - for(var/r_id in allowed) - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - if(amount == 0) - if(O.reagents != null && O.reagents.has_reagent(r_id)) - beaker.reagents.add_reagent(r_id,min(O.reagents.get_reagent_amount(r_id), space)) - else - beaker.reagents.add_reagent(r_id,min(amount, space)) - - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - remove_object(O) - - //xenoarch - /*for(var/obj/item/weapon/rocksliver/O in holdingitems) - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/allowed = get_allowed_by_id(O) - for(var/r_id in allowed) - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - beaker.reagents.add_reagent(r_id,min(amount, space), O.geological_data) - - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - remove_object(O)*/ - - //Everything else - Transfers reagents from it into beaker - for(var/obj/item/weapon/reagent_containers/O in holdingitems) - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/amount = O.reagents.total_volume - O.reagents.trans_to(beaker, amount) - if(!O.reagents.total_volume) +#define SOLID 1 +#define LIQUID 2 +#define GAS 3 + +/obj/machinery/chem_dispenser + name = "chem dispenser" + density = 1 + anchored = 1 + icon = 'icons/obj/chemical.dmi' + icon_state = "dispenser" + use_power = 0 + idle_power_usage = 40 + var/ui_title = "Chem Dispenser 5000" + var/energy = 100 + var/max_energy = 100 + var/amount = 30 + var/obj/item/weapon/reagent_containers/beaker = null + var/recharged = 0 + var/hackedcheck = 0 + var/list/dispensable_reagents = list("hydrogen", "lithium", "carbon", "nitrogen", "oxygen", "fluorine", + "sodium", "aluminum", "silicon", "phosphorus", "sulfur", "chlorine", "potassium", "iron", + "copper", "mercury", "plasma", "radium", "water", "ethanol", "sugar", "iodine", "bromine", "silver") + var/list/hacked_reagents = list("toxin") + var/hack_message = "You disable the safety safeguards, enabling the \"Mad Scientist\" mode." + var/unhack_message = "You re-enable the safety safeguards, enabling the \"NT Standard\" mode." + var/list/broken_requirements = list() + var/broken_on_spawn = 0 + var/recharge_delay = 5 + var/image/icon_beaker = null //cached overlay + + +/obj/machinery/chem_dispenser/proc/recharge() + if(stat & (BROKEN|NOPOWER)) return + var/addenergy = 1 + var/oldenergy = energy + energy = min(energy + addenergy, max_energy) + if(energy != oldenergy) + use_power(1500) // This thing uses up alot of power (this is still low as shit for creating reagents from thin air) + nanomanager.update_uis(src) // update all UIs attached to src + +/obj/machinery/chem_dispenser/power_change() + if(powered()) + stat &= ~NOPOWER + else + spawn(rand(0, 15)) + stat |= NOPOWER + nanomanager.update_uis(src) // update all UIs attached to src + +/obj/machinery/chem_dispenser/process() + + if(recharged < 0) + recharge() + recharged = recharge_delay + else + recharged -= 1 + +/obj/machinery/chem_dispenser/New() + ..() + recharge() + dispensable_reagents = sortList(dispensable_reagents) + + if(broken_on_spawn) + overlays.Cut() + var/amount = pick(3,3,4) + var/list/options = list() + options[/obj/item/weapon/stock_parts/capacitor/adv] = "Add an advanced capacitor to fix it." + options[/obj/item/weapon/stock_parts/console_screen] = "Replace the console screen to fix it." + options[/obj/item/weapon/stock_parts/manipulator/pico] = "Upgrade to a pico manipulator to fix it." + options[/obj/item/weapon/stock_parts/matter_bin/super] = "Give it a super matter bin to fix it." + options[/obj/item/weapon/stock_parts/cell/super] = "Replace the reagent synthesizer with a super capacity cell to fix it." + options[/obj/item/device/mass_spectrometer/adv] = "Replace the reagent scanner with an advanced mass spectrometer to fix it" + options[/obj/item/weapon/stock_parts/micro_laser/high] = "Repair the reagent synthesizer with an high-power micro-laser to fix it" + options[/obj/item/device/reagent_scanner/adv] = "Replace the reagent scanner with an advanced reagent scanner to fix it" + options[/obj/item/stack/nanopaste] = "Apply some nanopaste to the broken nozzles to fix it." + options[/obj/item/stack/sheet/plasteel] = "Surround the outside with a plasteel cover to fix it." + options[/obj/item/stack/sheet/rglass] = "Insert a pane of reinforced glass to fix it." + + while(amount > 0) + amount -= 1 + + var/index = pick(options) + broken_requirements[index] = options[index] + options -= index + + +/obj/machinery/chem_dispenser/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if(prob(50)) + qdel(src) + return + +/obj/machinery/chem_dispenser/blob_act() + if(prob(50)) + qdel(src) + + /** + * The ui_interact proc is used to open and update Nano UIs + * If ui_interact is not used then the UI will not update correctly + * ui_interact is currently defined for /atom/movable + * + * @param user /mob The mob who is interacting with this ui + * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") + * + * @return nothing + */ + +/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) + if(broken_requirements.len) + to_chat(user, "[src] is broken. [broken_requirements[broken_requirements[1]]]") + return + + + // this is the data which will be sent to the ui + var/data[0] + data["amount"] = amount + data["energy"] = round(energy) + data["maxEnergy"] = round(max_energy) + data["isBeakerLoaded"] = beaker ? 1 : 0 + + var beakerContents[0] + var beakerCurrentVolume = 0 + if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) + for(var/datum/reagent/R in beaker.reagents.reagent_list) + beakerContents.Add(list(list("name" = R.name, "id"=R.id, "volume" = R.volume))) // list in a list because Byond merges the first list... + beakerCurrentVolume += R.volume + data["beakerContents"] = beakerContents + + if(beaker) + data["beakerCurrentVolume"] = beakerCurrentVolume + data["beakerMaxVolume"] = beaker.volume + else + data["beakerCurrentVolume"] = null + data["beakerMaxVolume"] = null + + var chemicals[0] + for(var/re in dispensable_reagents) + var/datum/reagent/temp = chemical_reagents_list[re] + if(temp) + chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("dispense" = temp.id)))) // list in a list because Byond merges the first list... + data["chemicals"] = chemicals + + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "chem_dispenser.tmpl", ui_title, 390, 655) + // when the ui is first opened this is the data it will use + ui.set_initial_data(data) + // open the new ui window + ui.open() + +/obj/machinery/chem_dispenser/Topic(href, href_list) + if(..()) + return 1 + + if(href_list["amount"]) + amount = round(text2num(href_list["amount"]), 5) // round to nearest 5 + if(amount < 0) // Since the user can actually type the commands himself, some sanity checking + amount = 0 + if(amount > 100) + amount = 100 + + if(href_list["dispense"]) + if(dispensable_reagents.Find(href_list["dispense"]) && beaker != null) + var/obj/item/weapon/reagent_containers/glass/B = beaker + var/datum/reagents/R = B.reagents + var/space = R.maximum_volume - R.total_volume + + R.add_reagent(href_list["dispense"], min(amount, energy * 10, space)) + energy = max(energy - min(amount, energy * 10, space) / 10, 0) + overlays.Cut() + icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position. + icon_beaker.pixel_x = rand(-10,5) + overlays += icon_beaker + + if(href_list["remove"]) + if(beaker) + if(href_list["removeamount"]) + var/amount = text2num(href_list["removeamount"]) + if(isnum(amount) && (amount > 0)) + var/obj/item/weapon/reagent_containers/glass/B = beaker + var/datum/reagents/R = B.reagents + var/id = href_list["remove"] + R.remove_reagent(id, amount) + + if(href_list["ejectBeaker"]) + if(beaker) + var/obj/item/weapon/reagent_containers/glass/B = beaker + B.forceMove(loc) + beaker = null + overlays.Cut() + add_fingerprint(usr) + return 1 // update UIs attached to this object + +/obj/machinery/chem_dispenser/attackby(obj/item/weapon/reagent_containers/B, mob/user, params) + if(isrobot(user)) + return + + if(broken_requirements.len && B.type == broken_requirements[1]) + if(istype(B,/obj/item/stack)) + var/obj/item/stack/S = B + S.use(1) + else + if(!user.drop_item()) + to_chat(user, "[B] is stuck to you!") + return + qdel(B) + broken_requirements -= broken_requirements[1] + to_chat(user, "You fix [src].") + return + + if(beaker) + to_chat(user, "Something is already loaded into the machine.") + return + + if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B, /obj/item/weapon/reagent_containers/food/drinks)) + beaker = B + if(!user.drop_item()) + to_chat(user, "[B] is stuck to you!") + return + B.forceMove(src) + to_chat(user, "You set [B] on the machine.") + nanomanager.update_uis(src) // update all UIs attached to src + if(!icon_beaker) + icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position. + icon_beaker.pixel_x = rand(-10,5) + overlays += icon_beaker + return + +/obj/machinery/chem_dispenser/attackby(obj/item/weapon/B, mob/user, params) + ..() + if(istype(B, /obj/item/device/multitool)) + if(hackedcheck == 0) + to_chat(user, hack_message) + dispensable_reagents += hacked_reagents + hackedcheck = 1 + return + + else + to_chat(user, unhack_message) + dispensable_reagents -= hacked_reagents + hackedcheck = 0 + return + +/obj/machinery/chem_dispenser/attack_ai(mob/user) + return attack_hand(user) + +/obj/machinery/chem_dispenser/attack_ghost(mob/user) + return attack_hand(user) + +/obj/machinery/chem_dispenser/attack_hand(mob/user) + if(stat & BROKEN) + return + + ui_interact(user) + +/obj/machinery/chem_dispenser/soda + icon_state = "soda_dispenser" + name = "soda fountain" + desc = "A drink fabricating machine, capable of producing many sugary drinks with just one touch." + ui_title = "Soda Dispens-o-matic" + energy = 100 + max_energy = 100 + dispensable_reagents = list("water", "ice", "milk", "soymilk", "coffee", "tea", "hot_coco", "cola", "spacemountainwind", "dr_gibb", "space_up", + "tonic", "sodawater", "lemon_lime", "grapejuice", "sugar", "orangejuice", "lemonjuice", "limejuice", "tomatojuice", "banana", + "watermelonjuice", "carrotjuice", "potato", "berryjuice") + hack_message = "You change the mode from 'McNano' to 'Pizza King'." + unhack_message = "You change the mode from 'Pizza King' to 'McNano'." + hacked_reagents = list("thirteenloko") + +/obj/machinery/chem_dispenser/beer + icon_state = "booze_dispenser" + name = "booze dispenser" + ui_title = "Booze Portal 9001" + energy = 100 + max_energy = 100 + desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one." + dispensable_reagents = list("ice", "cream", "cider", "beer", "kahlua", "whiskey", "wine", "vodka", "gin", "rum", "tequila", "vermouth", "cognac", "ale", "mead", "synthanol") + hack_message = "You disable the 'nanotrasen-are-cheap-bastards' lock, enabling hidden and very expensive boozes." + unhack_message = "You re-enable the 'nanotrasen-are-cheap-bastards' lock, disabling hidden and very expensive boozes." + hacked_reagents = list("goldschlager", "patron", "absinthe", "ethanol", "nothing") + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/obj/machinery/chem_dispenser/constructable + name = "portable chem dispenser" + icon = 'icons/obj/chemical.dmi' + icon_state = "minidispenser" + energy = 5 + max_energy = 5 + amount = 5 + recharge_delay = 10 + dispensable_reagents = list() + var/list/special_reagents = list(list("hydrogen", "oxygen", "silicon", "phosphorus", "sulfur", "carbon", "nitrogen", "water"), + list("lithium", "sugar", "copper", "mercury", "sodium","iodine","bromine"), + list("ethanol", "chlorine", "potassium", "aluminum","plasma", "radium", "fluorine", "iron", "silver"), + list("oil", "ash", "acetone", "saltpetre", "ammonia", "diethylamine", "fuel")) + +/obj/machinery/chem_dispenser/constructable/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(null) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + component_parts += new /obj/item/weapon/stock_parts/capacitor(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/weapon/stock_parts/cell/super(null) + RefreshParts() + +/obj/machinery/chem_dispenser/constructable/upgraded/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(null) + component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null) + component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null) + component_parts += new /obj/item/weapon/stock_parts/capacitor/super(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/weapon/stock_parts/cell/hyper(null) + RefreshParts() + +/obj/machinery/chem_dispenser/constructable/RefreshParts() + var/time = 0 + var/temp_energy = 0 + var/i + for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) + temp_energy += M.rating + temp_energy-- + max_energy = temp_energy * 5 //max energy = (bin1.rating + bin2.rating - 1) * 5, 5 on lowest 25 on highest + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + time += C.rating + for(var/obj/item/weapon/stock_parts/cell/P in component_parts) + time += round(P.maxcharge, 10000) / 10000 + recharge_delay = 10 / (time/2) //delay between recharges, double the usual time on lowest 33% less than usual on highest + for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) + for(i=1, i<=M.rating, i++) + dispensable_reagents = sortList(dispensable_reagents | special_reagents[i]) + +/obj/machinery/chem_dispenser/constructable/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/reagent_containers/glass)) + if(panel_open) + to_chat(user, "Close the maintenance panel first.") + return + ..() + else + ..() + + if(default_deconstruction_screwdriver(user, "minidispenser-o", "minidispenser", I)) + return + + if(exchange_parts(user, I)) + return + + if(istype(I, /obj/item/weapon/wrench)) + playsound(src, 'sound/items/Ratchet.ogg', 50, 1) + if(anchored) + anchored = 0 + to_chat(user, "[src] can now be moved.") + else if(!anchored) + anchored = 1 + to_chat(user, "[src] is now secured.") + + if(panel_open) + if(istype(I, /obj/item/weapon/crowbar)) + if(beaker) + var/obj/item/weapon/reagent_containers/glass/B = beaker + B.forceMove(loc) + beaker = null + default_deconstruction_crowbar(I) + return 1 + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/obj/machinery/chem_master + name = "\improper ChemMaster 3000" + density = 1 + anchored = 1 + icon = 'icons/obj/chemical.dmi' + icon_state = "mixer0" + use_power = 1 + idle_power_usage = 20 + var/obj/item/weapon/reagent_containers/beaker = null + var/obj/item/weapon/storage/pill_bottle/loaded_pill_bottle = null + var/mode = 0 + var/condi = 0 + var/useramount = 30 // Last used amount + var/pillamount = 10 + var/patchamount = 10 + var/bottlesprite = "bottle" + var/pillsprite = "1" + var/client/has_sprites = list() + var/printing = null + +/obj/machinery/chem_master/New() + var/datum/reagents/R = new/datum/reagents(100) + reagents = R + R.my_atom = src + overlays += "waitlight" + +/obj/machinery/chem_master/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if(prob(50)) + qdel(src) + return + +/obj/machinery/chem_master/blob_act() + if(prob(50)) + qdel(src) + +/obj/machinery/chem_master/power_change() + if(powered()) + stat &= ~NOPOWER + else + spawn(rand(0, 15)) + stat |= NOPOWER + +/obj/machinery/chem_master/attackby(obj/item/weapon/B, mob/user, params) + + if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B, /obj/item/weapon/reagent_containers/food/drinks/drinkingglass)) + + if(beaker) + to_chat(user, "A beaker is already loaded into the machine.") + return + if(!user.drop_item()) + to_chat(user, "[B] is stuck to you!") + return + beaker = B + B.forceMove(src) + to_chat(user, "You add the beaker to the machine!") + nanomanager.update_uis(src) + icon_state = "mixer1" + + else if(istype(B, /obj/item/weapon/storage/pill_bottle)) + + if(loaded_pill_bottle) + to_chat(user, "A pill bottle is already loaded into the machine.") + return + + if(!user.drop_item()) + to_chat(user, "[B] is stuck to you!") + return + loaded_pill_bottle = B + B.forceMove(src) + to_chat(user, "You add the pill bottle into the dispenser slot!") + nanomanager.update_uis(src) + return + +/obj/machinery/chem_master/Topic(href, href_list) + if(..()) + return 1 + + add_fingerprint(usr) + usr.set_machine(src) + + + if(href_list["ejectp"]) + if(loaded_pill_bottle) + loaded_pill_bottle.forceMove(loc) + loaded_pill_bottle = null + else if(href_list["close"]) + usr << browse(null, "window=chem_master") + onclose(usr, "chem_master") + usr.unset_machine() + return + + if(href_list["print_p"]) + if(!(printing)) + printing = 1 + visible_message("[src] rattles and prints out a sheet of paper.") + playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc) + P.info = "
Chemical Analysis

" + P.info += "Time of analysis: [worldtime2text(world.time)]

" + P.info += "Chemical name: [href_list["name"]]
" + if(href_list["name"] == "Blood") + var/datum/reagents/R = beaker.reagents + var/datum/reagent/blood/G + for(var/datum/reagent/F in R.reagent_list) + if(F.name == href_list["name"]) + G = F + break + var/B = G.data["blood_type"] + var/C = G.data["blood_DNA"] + P.info += "Description:
Blood Type: [B]
DNA: [C]" + else + P.info += "Description: [href_list["desc"]]" + P.info += "

Notes:
" + P.name = "Chemical Analysis - [href_list["name"]]" + printing = null + + if(beaker) + var/datum/reagents/R = beaker.reagents + if(href_list["analyze"]) + var/dat = "" + if(!condi) + if(href_list["name"] == "Blood") + var/datum/reagent/blood/G + for(var/datum/reagent/F in R.reagent_list) + if(F.name == href_list["name"]) + G = F + break + var/A = G.name + var/B = G.data["blood_type"] + var/C = G.data["blood_DNA"] + dat += "Chemmaster 3000Chemical infos:

Name:
[A]

Description:
Blood Type: [B]
DNA: [C]" + else + dat += "Chemmaster 3000Chemical infos:

Name:
[href_list["name"]]

Description:
[href_list["desc"]]" + dat += "

(Print Analysis)
" + dat += "(Back)" + else + dat += "Condimaster 3000Condiment infos:

Name:
[href_list["name"]]

Description:
[href_list["desc"]]


(Back)" + usr << browse(dat, "window=chem_master;size=575x400") + return + + else if(href_list["add"]) + + if(href_list["amount"]) + var/id = href_list["add"] + var/amount = text2num(href_list["amount"]) + R.trans_id_to(src, id, amount) + + else if(href_list["addcustom"]) + + var/id = href_list["addcustom"] + useramount = input("Select the amount to transfer.", 30, useramount) as num + useramount = isgoodnumber(useramount) + Topic(null, list("amount" = "[useramount]", "add" = "[id]")) + + else if(href_list["remove"]) + + if(href_list["amount"]) + var/id = href_list["remove"] + var/amount = text2num(href_list["amount"]) + if(mode) + reagents.trans_id_to(beaker, id, amount) + else + reagents.remove_reagent(id, amount) + + + else if(href_list["removecustom"]) + + var/id = href_list["removecustom"] + useramount = input("Select the amount to transfer.", 30, useramount) as num + useramount = isgoodnumber(useramount) + Topic(null, list("amount" = "[useramount]", "remove" = "[id]")) + + else if(href_list["toggle"]) + mode = !mode + + else if(href_list["main"]) + attack_hand(usr) + return + else if(href_list["eject"]) + if(beaker) + beaker.forceMove(get_turf(src)) + beaker = null + reagents.clear_reagents() + icon_state = "mixer0" + else if(href_list["createpill"] || href_list["createpill_multiple"]) + if(!condi) + var/count = 1 + if(href_list["createpill_multiple"]) + count = input("Select the number of pills to make.", 10, pillamount) as num|null + if(count == null) + return + count = isgoodnumber(count) + if(count > 20) count = 20 //Pevent people from creating huge stacks of pills easily. Maybe move the number to defines? + if(count <= 0) return + var/amount_per_pill = reagents.total_volume/count + if(amount_per_pill > 50) amount_per_pill = 50 + var/name = input(usr,"Name:","Name your pill!","[reagents.get_master_reagent_name()] ([amount_per_pill]u)") as text|null + if(!name) + return + name = reject_bad_text(name) + while(count--) + var/obj/item/weapon/reagent_containers/food/pill/P = new/obj/item/weapon/reagent_containers/food/pill(loc) + if(!name) name = reagents.get_master_reagent_name() + P.name = "[name] pill" + P.pixel_x = rand(-7, 7) //random position + P.pixel_y = rand(-7, 7) + P.icon_state = "pill"+pillsprite + reagents.trans_to(P,amount_per_pill) + if(loaded_pill_bottle) + if(loaded_pill_bottle.contents.len < loaded_pill_bottle.storage_slots) + P.forceMove(loaded_pill_bottle) + updateUsrDialog() + else + var/name = input(usr,"Name:","Name your bag!",reagents.get_master_reagent_name()) as text|null + if(!name) + return + name = reject_bad_text(name) + var/obj/item/weapon/reagent_containers/food/condiment/pack/P = new/obj/item/weapon/reagent_containers/food/condiment/pack(loc) + if(!name) name = reagents.get_master_reagent_name() + P.originalname = name + P.name = "[name] pack" + P.desc = "A small condiment pack. The label says it contains [name]." + reagents.trans_to(P,10) + else if(href_list["createpatch"] || href_list["createpatch_multiple"]) + if(!condi) + var/count = 1 + if(href_list["createpatch_multiple"]) + count = input("Select the number of patches to make.", 10, patchamount) as num|null + if(count == null) + return + count = isgoodnumber(count) + if(!count || count <= 0) + return + if(count > 20) count = 20 //Pevent people from creating huge stacks of patches easily. Maybe move the number to defines? + var/amount_per_patch = reagents.total_volume/count + if(amount_per_patch > 40) amount_per_patch = 40 + var/name = input(usr,"Name:","Name your patch!","[reagents.get_master_reagent_name()] ([amount_per_patch]u)") as text|null + if(!name) + return + name = reject_bad_text(name) + var/is_medical_patch = chemical_safety_check(reagents) + while(count--) + var/obj/item/weapon/reagent_containers/food/pill/patch/P = new/obj/item/weapon/reagent_containers/food/pill/patch(loc) + if(!name) name = reagents.get_master_reagent_name() + P.name = "[name] patch" + P.pixel_x = rand(-7, 7) //random position + P.pixel_y = rand(-7, 7) + reagents.trans_to(P,amount_per_patch) + if(is_medical_patch) + P.instant_application = 1 + P.icon_state = "bandaid_med" + else if(href_list["createbottle"]) + if(!condi) + var/name = input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name()) as text|null + if(!name) + return + name = reject_bad_text(name) + var/obj/item/weapon/reagent_containers/glass/bottle/P = new/obj/item/weapon/reagent_containers/glass/bottle(loc) + if(!name) name = reagents.get_master_reagent_name() + P.name = "[name] bottle" + P.pixel_x = rand(-7, 7) //random position + P.pixel_y = rand(-7, 7) + P.icon_state = bottlesprite + reagents.trans_to(P,30) + else + var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(loc) + reagents.trans_to(P,50) + else if(href_list["change_pill"]) + #define MAX_PILL_SPRITE 20 //max icon state of the pill sprites + var/dat = "" + var/j = 0 + for(var/i = 1 to MAX_PILL_SPRITE) + j++ + if(j == 1) + dat += "" + dat += "" + if(j == 5) + dat += "" + j = 0 + dat += "
" + usr << browse(dat, "window=chem_master_iconsel;size=225x193") + return + else if(href_list["change_bottle"]) + var/dat = "" + var/j = 0 + for(var/i in list("bottle", "small_bottle", "wide_bottle", "round_bottle")) + j++ + if(j == 1) + dat += "" + dat += "" + if(j == 5) + dat += "" + j = 0 + dat += "
" + usr << browse(dat, "window=chem_master_iconsel;size=225x193") + return + else if(href_list["pill_sprite"]) + pillsprite = href_list["pill_sprite"] + usr << browse(null, "window=chem_master_iconsel") + else if(href_list["bottle_sprite"]) + bottlesprite = href_list["bottle_sprite"] + usr << browse(null, "window=chem_master_iconsel") + + nanomanager.update_uis(src) + return + +/obj/machinery/chem_master/attack_ai(mob/user) + return attack_hand(user) + +/obj/machinery/chem_master/attack_ghost(mob/user) + return attack_hand(user) + +/obj/machinery/chem_master/attack_hand(mob/user) + if(..()) + return 1 + ui_interact(user) + return + +/obj/machinery/chem_master/ui_interact(mob/user, ui_key="main", datum/nanoui/ui = null, force_open = 1) + + var/datum/asset/chem_master/assets = get_asset_datum(/datum/asset/chem_master) + assets.send(user) + + var/data = list() + + data["condi"] = condi + data["loaded_pill_bottle"] = (loaded_pill_bottle ? 1 : 0) + if(loaded_pill_bottle) + data["loaded_pill_bottle_contents_len"] = loaded_pill_bottle.contents.len + data["loaded_pill_bottle_storage_slots"] = loaded_pill_bottle.storage_slots + + data["beaker"] = (beaker ? 1 : 0) + if(beaker) + var/list/beaker_reagents_list = list() + data["beaker_reagents"] = beaker_reagents_list + for(var/datum/reagent/R in beaker.reagents.reagent_list) + beaker_reagents_list[++beaker_reagents_list.len] = list("name" = R.name, "volume" = R.volume, "id" = R.id, "description" = R.description) + var/list/buffer_reagents_list = list() + data["buffer_reagents"] = buffer_reagents_list + for(var/datum/reagent/R in reagents.reagent_list) + buffer_reagents_list[++buffer_reagents_list.len] = list("name" = R.name, "volume" = R.volume, "id" = R.id, "description" = R.description) + + data["pillsprite"] = pillsprite + data["bottlesprite"] = bottlesprite + data["mode"] = mode + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "chem_master.tmpl", name, 575, 400) + ui.set_initial_data(data) + ui.open() + +/obj/machinery/chem_master/proc/isgoodnumber(num) + if(isnum(num)) + if(num > 200) + num = 200 + else if(num < 0) + num = 1 + else + num = round(num) + return num + else + return 0 + +/obj/machinery/chem_master/proc/chemical_safety_check(datum/reagents/R) + var/all_safe = 1 + for(var/datum/reagent/A in R.reagent_list) + if(!safe_chem_list.Find(A.id)) + all_safe = 0 + return all_safe + +/obj/machinery/chem_master/condimaster + name = "\improper CondiMaster 3000" + condi = 1 + +/obj/machinery/chem_master/constructable + name = "ChemMaster 2999" + desc = "Used to seperate chemicals and distribute them in a variety of forms." + +/obj/machinery/chem_master/constructable/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/chem_master(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null) + component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null) + +/obj/machinery/chem_master/constructable/attackby(obj/item/B, mob/user, params) + + if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", B)) + if(beaker) + beaker.forceMove(get_turf(src)) + beaker = null + reagents.clear_reagents() + if(loaded_pill_bottle) + loaded_pill_bottle.forceMove(get_turf(src)) + loaded_pill_bottle = null + return + + if(exchange_parts(user, B)) + return + + if(panel_open) + if(istype(B, /obj/item/weapon/crowbar)) + default_deconstruction_crowbar(B) + return 1 + else + to_chat(user, "You can't use the [name] while it's panel is opened!") + return 1 + else + ..() + +/obj/machinery/reagentgrinder + + name = "\improper All-In-One Grinder" + icon = 'icons/obj/kitchen.dmi' + icon_state = "juicer1" + layer = 2.9 + density = 1 + anchored = 1 + use_power = 1 + idle_power_usage = 5 + active_power_usage = 100 + var/inuse = 0 + var/obj/item/weapon/reagent_containers/beaker = null + var/limit = 10 + + //IMPORTANT NOTE! A negative number is a multiplier, a positive number is a flat amount to add. 0 means equal to the amount of the original reagent + var/list/blend_items = list ( + + //Sheets + /obj/item/stack/sheet/mineral/plasma = list("plasma_dust" = 20), + /obj/item/stack/sheet/mineral/uranium = list("uranium" = 20), + /obj/item/stack/sheet/mineral/bananium = list("banana" = 20), + /obj/item/stack/sheet/mineral/tranquillite = list("nothing" = 20), + /obj/item/stack/sheet/mineral/silver = list("silver" = 20), + /obj/item/stack/sheet/mineral/gold = list("gold" = 20), + /obj/item/weapon/grown/novaflower = list("capsaicin" = 0), + + //archaeology! + ///obj/item/weapon/rocksliver = list("ground_rock" = 50), + + + //All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.! + /obj/item/weapon/reagent_containers/food = list(), + /obj/item/weapon/reagent_containers/honeycomb = list() + ) + + var/list/blend_tags = list ( + "nettle" = list("sacid" = 0), + "deathnettle" = list("facid" = 0), + "soybeans" = list("soymilk" = 0), + "tomato" = list("ketchup" = 0), + "wheat" = list("flour" = -5), + "rice" = list("rice" = -5), + "cherries" = list("cherryjelly" = 0), + ) + + var/list/juice_items = list ( + /obj/item/weapon/reagent_containers/food/snacks/watermelonslice = list("watermelonjuice" = 0), + ) + + var/list/juice_tags = list ( + "tomato" = list("tomatojuice" = 0), + "carrot" = list("carrotjuice" = 0), + "berries" = list("berryjuice" = 0), + "banana" = list("banana" = 0), + "potato" = list("potato" = 0), + "lemon" = list("lemonjuice" = 0), + "orange" = list("orangejuice" = 0), + "lime" = list("limejuice" = 0), + "poisonberries" = list("poisonberryjuice" = 0), + "grapes" = list("grapejuice" = 0), + "corn" = list("cornoil" = 0), + ) + + var/list/holdingitems = list() + +/obj/machinery/reagentgrinder/New() + ..() + beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) + return + +/obj/machinery/reagentgrinder/update_icon() + icon_state = "juicer"+num2text(!isnull(beaker)) + return + +/obj/machinery/reagentgrinder/attackby(obj/item/O, mob/user, params) + + if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ + istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \ + istype(O,/obj/item/weapon/reagent_containers/food/drinks/shaker)) + + if(beaker) + return 1 + else + if(!user.drop_item()) + to_chat(user, "[O] is stuck to you!") + return + beaker = O + O.forceMove(src) + update_icon() + updateUsrDialog() + return 0 + + if(holdingitems && holdingitems.len >= limit) + to_chat(usr, "The machine cannot hold anymore items.") + return 1 + + //Fill machine with a plantbag! + if(istype(O, /obj/item/weapon/storage/bag/plants)) + var/obj/item/weapon/storage/bag/plants/PB = O + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in PB.contents) + PB.remove_from_storage(G, src) + holdingitems += G + if(holdingitems && holdingitems.len >= limit) //Sanity checking so the blender doesn't overfill + to_chat(user, "You empty [PB] into the All-In-One grinder.") + + updateUsrDialog() + return 0 + + + if(!is_type_in_list(O, blend_items) && !is_type_in_list(O, juice_items)) + to_chat(user, "Cannot refine into a reagent.") + return 1 + + user.unEquip(O) + O.forceMove(src) + holdingitems += O + updateUsrDialog() + return 0 + +/obj/machinery/reagentgrinder/attack_ai(mob/user) + return 0 + +/obj/machinery/reagentgrinder/attack_hand(mob/user) + user.set_machine(src) + interact(user) + +/obj/machinery/reagentgrinder/interact(mob/user) // The microwave Menu + var/is_chamber_empty = 0 + var/is_beaker_ready = 0 + var/processing_chamber = "" + var/beaker_contents = "" + var/dat = "" + + if(!inuse) + for(var/obj/item/O in holdingitems) + processing_chamber += "\A [O.name]
" + + if(!processing_chamber) + is_chamber_empty = 1 + processing_chamber = "Nothing." + if(!beaker) + beaker_contents = "No beaker attached.
" + else + is_beaker_ready = 1 + beaker_contents = "The beaker contains:
" + var/anything = 0 + for(var/datum/reagent/R in beaker.reagents.reagent_list) + anything = 1 + beaker_contents += "[R.volume] - [R.name]
" + if(!anything) + beaker_contents += "Nothing
" + + + dat = {" + Processing chamber contains:
+ [processing_chamber]
+ [beaker_contents]
+ "} + if(is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) + dat += "Grind the reagents
" + dat += "Juice the reagents

" + if(holdingitems && holdingitems.len > 0) + dat += "Eject the reagents
" + if(beaker) + dat += "Detach the beaker
" + else + dat += "Please wait..." + user << browse("All-In-One Grinder[dat]", "window=reagentgrinder") + onclose(user, "reagentgrinder") + return + +/obj/machinery/reagentgrinder/Topic(href, href_list) + if(..()) + return + usr.set_machine(src) + switch(href_list["action"]) + if("grind") + grind() + if("juice") + juice() + if("eject") + eject() + if("detach") + detach() + updateUsrDialog() + return + +/obj/machinery/reagentgrinder/proc/detach() + + if(usr.stat != 0) + return + if(!beaker) + return + beaker.forceMove(loc) + beaker = null + update_icon() + +/obj/machinery/reagentgrinder/proc/eject() + + if(usr.stat != 0) + return + if(holdingitems && holdingitems.len == 0) + return + + for(var/obj/item/O in holdingitems) + O.forceMove(loc) + holdingitems -= O + holdingitems = list() + +/obj/machinery/reagentgrinder/proc/is_allowed(obj/item/weapon/reagent_containers/O) + for(var/i in blend_items) + if(istype(O, i)) + return 1 + return 0 + +/obj/machinery/reagentgrinder/proc/get_allowed_by_id(obj/item/weapon/grown/O) + for(var/i in blend_items) + if(istype(O, i)) + return blend_items[i] + +/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_id(obj/item/weapon/reagent_containers/food/snacks/O) + for(var/i in blend_items) + if(istype(O, i)) + return blend_items[i] + +/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_id(obj/item/weapon/reagent_containers/food/snacks/O) + for(var/i in juice_items) + if(istype(O, i)) + return juice_items[i] + +/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_tag(obj/item/weapon/reagent_containers/food/snacks/grown/O) + for(var/i in blend_tags) + if(O.seed.kitchen_tag == i) + return blend_tags[i] + +/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_tag(obj/item/weapon/reagent_containers/food/snacks/grown/O) + for(var/i in juice_tags) + if(O.seed.kitchen_tag == i) + return juice_tags[i] + +/obj/machinery/reagentgrinder/proc/get_grownweapon_amount(obj/item/weapon/grown/O) + if(!istype(O)) + return 5 + else if(O.potency == -1) + return 5 + else + return round(O.potency) + +/obj/machinery/reagentgrinder/proc/get_juice_amount(obj/item/weapon/reagent_containers/food/snacks/grown/O) + if(!istype(O)) + return 5 + else if(O.potency == -1) + return 5 + else + return round(5*sqrt(O.potency)) + +/obj/machinery/reagentgrinder/proc/remove_object(obj/item/O) + holdingitems -= O + qdel(O) + +/obj/machinery/reagentgrinder/proc/juice() + power_change() + if(stat & (NOPOWER|BROKEN)) + return + if(!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) + return + playsound(loc, 'sound/machines/juicer.ogg', 20, 1) + var/offset = prob(50) ? -2 : 2 + animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking + inuse = 1 + spawn(50) + pixel_x = initial(pixel_x) //return to its spot after shaking + inuse = 0 + interact(usr) + //Snacks + for(var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems) + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + + var/allowed = null + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) + allowed = get_allowed_juice_by_tag(O) + else + allowed = get_allowed_juice_by_id(O) + if(isnull(allowed)) + break + + for(var/r_id in allowed) + + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + var/amount = get_juice_amount(O) + + beaker.reagents.add_reagent(r_id, min(amount, space)) + + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + + remove_object(O) + +/obj/machinery/reagentgrinder/proc/grind() + + power_change() + if(stat & (NOPOWER|BROKEN)) + return + if(!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) + return + playsound(loc, 'sound/machines/blender.ogg', 50, 1) + var/offset = prob(50) ? -2 : 2 + animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking + inuse = 1 + spawn(60) + pixel_x = initial(pixel_x) //return to its spot after shaking + inuse = 0 + interact(usr) + //Snacks and Plants + for(var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems) + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + + var/allowed = null + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) + allowed = get_allowed_snack_by_tag(O) + else + allowed = get_allowed_snack_by_id(O) + if(isnull(allowed)) + break + + for(var/r_id in allowed) + + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + var/amount = allowed[r_id] + if(amount <= 0) //Negative amounts are multipliers for the reagent amount (Example: "amount = -5" means "reagent_amount * 5") + if(amount == 0) + if(O.reagents != null && O.reagents.has_reagent("nutriment")) + beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("nutriment"), space)) + O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) + if(O.reagents != null && O.reagents.has_reagent("plantmatter")) + beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("plantmatter"), space)) + O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) + else + if(O.reagents != null && O.reagents.has_reagent("nutriment")) + beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("nutriment")*abs(amount)), space)) + O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) + if(O.reagents != null && O.reagents.has_reagent("plantmatter")) + beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("plantmatter")*abs(amount)), space)) + O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) + + else + O.reagents.trans_id_to(beaker, r_id, min(amount, space)) + + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + + if(O.reagents.reagent_list.len == 0) + remove_object(O) + + //Sheets + for(var/obj/item/stack/sheet/O in holdingitems) + var/allowed = get_allowed_by_id(O) + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + for(var/i = 1; i <= round(O.amount, 1); i++) + for(var/r_id in allowed) + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + var/amount = allowed[r_id] + beaker.reagents.add_reagent(r_id,min(amount, space)) + if(space < amount) + break + if(i == round(O.amount, 1)) + remove_object(O) + break + //Plants + for(var/obj/item/weapon/grown/O in holdingitems) + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + var/allowed = get_allowed_by_id(O) + for(var/r_id in allowed) + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + var/amount = allowed[r_id] + if(amount == 0) + if(O.reagents != null && O.reagents.has_reagent(r_id)) + beaker.reagents.add_reagent(r_id,min(O.reagents.get_reagent_amount(r_id), space)) + else + beaker.reagents.add_reagent(r_id,min(amount, space)) + + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + remove_object(O) + + //xenoarch + /*for(var/obj/item/weapon/rocksliver/O in holdingitems) + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + var/allowed = get_allowed_by_id(O) + for(var/r_id in allowed) + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + var/amount = allowed[r_id] + beaker.reagents.add_reagent(r_id,min(amount, space), O.geological_data) + + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + remove_object(O)*/ + + //Everything else - Transfers reagents from it into beaker + for(var/obj/item/weapon/reagent_containers/O in holdingitems) + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + var/amount = O.reagents.total_volume + O.reagents.trans_to(beaker, amount) + if(!O.reagents.total_volume) remove_object(O) \ No newline at end of file diff --git a/code/modules/reagents/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm similarity index 100% rename from code/modules/reagents/pandemic.dm rename to code/modules/reagents/chemistry/machinery/pandemic.dm diff --git a/code/modules/reagents/Chemistry-Readme.dm b/code/modules/reagents/chemistry/readme.dm similarity index 97% rename from code/modules/reagents/Chemistry-Readme.dm rename to code/modules/reagents/chemistry/readme.dm index cae0c31162c..1fe946a10d1 100644 --- a/code/modules/reagents/Chemistry-Readme.dm +++ b/code/modules/reagents/chemistry/readme.dm @@ -1,249 +1,249 @@ -/* -NOTE: IF YOU UPDATE THE REAGENT-SYSTEM, ALSO UPDATE THIS README. - -Structure: /////////////////// ////////////////////////// - // Mob or object // -------> // Reagents var (datum) // Is a reference to the datum that holds the reagents. - /////////////////// ////////////////////////// - | | - The object that holds everything. V - reagent_list var (list) A List of datums, each datum is a reagent. - - | | | - V V V - - reagents (datums) Reagents. I.e. Water , antitoxins or mercury. - - -Random important notes: - - An objects on_reagent_change will be called every time the objects reagents change. - Useful if you want to update the objects icon etc. - -About the Holder: - - The holder (reagents datum) is the datum that holds a list of all reagents - currently in the object.It also has all the procs needed to manipulate reagents - - remove_any(amount) - This proc removes reagents from the holder until the passed amount - is matched. It'll try to remove some of ALL reagents contained. - - trans_to(obj/target, amount) - This proc equally transfers the contents of the holder to another - objects holder. You need to pass it the object (not the holder) you want - to transfer to and the amount you want to transfer. Its return value is the - actual amount transfered (if one of the objects is full/empty) - - trans_id_to(obj/target, reagent, amount) - Same as above but only for a specific reagent in the reagent list. - If the specified amount is greater than what is available, it will use - the amount of the reagent that is available. If no reagent exists, returns null. - - metabolize(mob/living/M) - This proc is called by the mobs life proc. It simply calls on_mob_life for - all contained reagents. You shouldnt have to use this one directly. - - handle_reactions() - This proc check all recipes and, on a match, uses them. - It will also call the recipe's on_reaction proc (for explosions or w/e). - Currently, this proc is automatically called by trans_to. - - Modified from the original to preserve reagent data across reactions (originally for xenoarchaeology) - - isolate_reagent(reagent) - Pass it a reagent id and it will remove all reagents but that one. - It's that simple. - - del_reagent(reagent) - Completely remove the reagent with the matching id. - - update_total() - This one simply updates the total volume of the holder. - (the volume of all reagents added together) - - clear_reagents() - This proc removes ALL reagents from the holder. - - reaction(atom/A, method=TOUCH, volume_modifier=0) - This proc calls the appropriate reaction procs of the reagents. - I.e. if A is an object, it will call the reagents reaction_obj - proc. The method var is used for reaction on mobs. It simply tells - us if the mob TOUCHed the reagent or if it INGESTed the reagent. - Since the volume can be checked in a reagents proc, you might want to - use the volume_modifier var to modifiy the passed value without actually - changing the volume of the reagents. - If you're not sure if you need to use this the answer is very most likely 'No'. - You'll want to use this proc whenever an atom first comes in - contact with the reagents of a holder. (in the 'splash' part of a beaker i.e.) - More on the reaction in the reagent part of this readme. - - add_reagent(reagent, amount, data) - Attempts to add X of the matching reagent to the holder. - You wont use this much. Mostly in new procs for pre-filled - objects. - - remove_reagent(reagent, amount) - The exact opposite of the add_reagent proc. - - Modified from original to return the reagent's data, in order to preserve reagent data across reactions (originally for xenoarchaeology) - - has_reagent(reagent, amount) - Returns 1 if the holder contains this reagent. - Or 0 if not. - If you pass it an amount it will additionally check - if the amount is matched. This is optional. - - get_reagent_amount(reagent) - Returns the amount of the matching reagent inside the - holder. Returns 0 if the reagent is missing. - - overdose_list() - Returns a list of all the chemical IDs in the reagent holder that are overdosing - - Important variables: - - total_volume - This variable contains the total volume of all reagents in this holder. - - reagent_list - This is a list of all contained reagents. More specifically, references - to the reagent datums. - - maximum_volume - This is the maximum volume of the holder. - - my_atom - This is the atom the holder is 'in'. Useful if you need to find the location. - (i.e. for explosions) - - -About Reagents: - - Reagents are all the things you can mix and fille in bottles etc. This can be anything from - rejuvs over water to ... iron. Each reagent also has a few procs - i'll explain those below. - - reaction_mob(mob/living/M, method=TOUCH) - This is called by the holder's reation proc. - This version is only called when the reagent - reacts with a mob. The method var can be either - TOUCH or INGEST. You'll want to put stuff like - acid-facemelting in here. Should only ever be - called, directly, on living mobs. - - reaction_obj(obj/O) - This is called by the holder's reation proc. - This version is called when the reagents reacts - with an object. You'll want to put stuff like - object melting in here ... or something. i dunno. - - reaction_turf(turf/T) - This is called by the holder's reation proc. - This version is called when the reagents reacts - with a turf. You'll want to put stuff like extra - slippery floors for lube or something in here. - - on_mob_life(mob/living/M) - This proc is called everytime the mobs life proc executes. - This is the place where you put damage for toxins , - drowsyness for sleep toxins etc etc. - You'll want to call the parents proc by using ..() . - If you dont, the chemical will stay in the mob forever - - unless you write your own piece of code to slowly remove it. - (Should be pretty easy, 1 line of code) - - Important variables: - - holder - This variable contains a reference to the holder the chemical is 'in' - - volume - This is the volume of the reagent. - - id - The id of the reagent - - name - The name of the reagent. - - data - This var can be used for whatever the fuck you want.You could use this - for DNA in a blood reagent or ... well whatever you want. - - color - This is a hexadecimal color that represents the reagent outside of containers, - you define it as "#RRGGBB", or, red green blue. You can also define it using the - rgb() proc, which returns a hexadecimal value too. The color is black by default. - - A good website for color calculations: http://www.psyclops.com/tools/rgb/ - - - - -About Recipes: - - Recipes are simple datums that contain a list of required reagents and a result. - They also have a proc that is called when the recipe is matched. - - on_reaction(datum/reagents/holder, created_volume) - This proc is called when the recipe is matched. - You'll want to add explosions etc here. - To find the location you'll have to do something - like get_turf(holder.my_atom) - - name & id - Should be pretty obvious. - - result - This var contains the id of the resulting reagent. - - required_reagents - This is a list of ids of the required reagents. - Each id also needs an associated value that gives us the minimum required amount - of that reagent. The handle_reaction proc can detect mutiples of the same recipes - so for most cases you want to set the required amount to 1. - - required_catalysts (Added May 2011) - This is a list of the ids of the required catalysts. - Functionally similar to required_reagents, it is a list of reagents that are required - for the reaction. However, unlike required_reagents, catalysts are NOT consumed. - They mearly have to be present in the container. - - result_amount - This is the amount of the resulting reagent this recipe will produce. - I recommend you set this to the total volume of all required reagent. - - required_container - The container the recipe has to take place in in order to happen. Leave this blank/null - if you want the reaction to happen anywhere. - - required_other - Basically like a reagent's data variable. You can set extra requirements for a - reaction with this. - - -About the Tools: - - By default, all atom have a reagents var - but its empty. if you want to use an object for the chem. - system you'll need to add something like this in its new proc: - - var/datum/reagents/R = new/datum/reagents(100), <<< create a new datum, 100 is the maximum_volume of the new holder datum. - reagents = R, <<< assign the new datum to the objects reagents var - R.my_atom = src, <<< set the holders my_atom to src so that we know where we are. - - This can also be done by calling a convenience proc: - atom/proc/create_reagents(max_volume) - - Other important stuff: - - amount_per_transfer_from_this var - This var is mostly used by beakers and bottles. - It simply tells us how much to transfer when - 'pouring' our reagents into something else. - - atom/proc/is_open_container() - Checks atom/var/flags & OPENCONTAINER. - If this returns 1 , you can use syringes, beakers etc - to manipulate the contents of this object. - If it's 0, you'll need to write your own custom reagent - transfer code since you will not be able to use the standard - tools to manipulate it. - +/* +NOTE: IF YOU UPDATE THE REAGENT-SYSTEM, ALSO UPDATE THIS README. + +Structure: /////////////////// ////////////////////////// + // Mob or object // -------> // Reagents var (datum) // Is a reference to the datum that holds the reagents. + /////////////////// ////////////////////////// + | | + The object that holds everything. V + reagent_list var (list) A List of datums, each datum is a reagent. + + | | | + V V V + + reagents (datums) Reagents. I.e. Water , antitoxins or mercury. + + +Random important notes: + + An objects on_reagent_change will be called every time the objects reagents change. + Useful if you want to update the objects icon etc. + +About the Holder: + + The holder (reagents datum) is the datum that holds a list of all reagents + currently in the object.It also has all the procs needed to manipulate reagents + + remove_any(amount) + This proc removes reagents from the holder until the passed amount + is matched. It'll try to remove some of ALL reagents contained. + + trans_to(obj/target, amount) + This proc equally transfers the contents of the holder to another + objects holder. You need to pass it the object (not the holder) you want + to transfer to and the amount you want to transfer. Its return value is the + actual amount transfered (if one of the objects is full/empty) + + trans_id_to(obj/target, reagent, amount) + Same as above but only for a specific reagent in the reagent list. + If the specified amount is greater than what is available, it will use + the amount of the reagent that is available. If no reagent exists, returns null. + + metabolize(mob/living/M) + This proc is called by the mobs life proc. It simply calls on_mob_life for + all contained reagents. You shouldnt have to use this one directly. + + handle_reactions() + This proc check all recipes and, on a match, uses them. + It will also call the recipe's on_reaction proc (for explosions or w/e). + Currently, this proc is automatically called by trans_to. + - Modified from the original to preserve reagent data across reactions (originally for xenoarchaeology) + + isolate_reagent(reagent) + Pass it a reagent id and it will remove all reagents but that one. + It's that simple. + + del_reagent(reagent) + Completely remove the reagent with the matching id. + + update_total() + This one simply updates the total volume of the holder. + (the volume of all reagents added together) + + clear_reagents() + This proc removes ALL reagents from the holder. + + reaction(atom/A, method=TOUCH, volume_modifier=0) + This proc calls the appropriate reaction procs of the reagents. + I.e. if A is an object, it will call the reagents reaction_obj + proc. The method var is used for reaction on mobs. It simply tells + us if the mob TOUCHed the reagent or if it INGESTed the reagent. + Since the volume can be checked in a reagents proc, you might want to + use the volume_modifier var to modifiy the passed value without actually + changing the volume of the reagents. + If you're not sure if you need to use this the answer is very most likely 'No'. + You'll want to use this proc whenever an atom first comes in + contact with the reagents of a holder. (in the 'splash' part of a beaker i.e.) + More on the reaction in the reagent part of this readme. + + add_reagent(reagent, amount, data) + Attempts to add X of the matching reagent to the holder. + You wont use this much. Mostly in new procs for pre-filled + objects. + + remove_reagent(reagent, amount) + The exact opposite of the add_reagent proc. + - Modified from original to return the reagent's data, in order to preserve reagent data across reactions (originally for xenoarchaeology) + + has_reagent(reagent, amount) + Returns 1 if the holder contains this reagent. + Or 0 if not. + If you pass it an amount it will additionally check + if the amount is matched. This is optional. + + get_reagent_amount(reagent) + Returns the amount of the matching reagent inside the + holder. Returns 0 if the reagent is missing. + + overdose_list() + Returns a list of all the chemical IDs in the reagent holder that are overdosing + + Important variables: + + total_volume + This variable contains the total volume of all reagents in this holder. + + reagent_list + This is a list of all contained reagents. More specifically, references + to the reagent datums. + + maximum_volume + This is the maximum volume of the holder. + + my_atom + This is the atom the holder is 'in'. Useful if you need to find the location. + (i.e. for explosions) + + +About Reagents: + + Reagents are all the things you can mix and fille in bottles etc. This can be anything from + rejuvs over water to ... iron. Each reagent also has a few procs - i'll explain those below. + + reaction_mob(mob/living/M, method=TOUCH) + This is called by the holder's reation proc. + This version is only called when the reagent + reacts with a mob. The method var can be either + TOUCH or INGEST. You'll want to put stuff like + acid-facemelting in here. Should only ever be + called, directly, on living mobs. + + reaction_obj(obj/O) + This is called by the holder's reation proc. + This version is called when the reagents reacts + with an object. You'll want to put stuff like + object melting in here ... or something. i dunno. + + reaction_turf(turf/T) + This is called by the holder's reation proc. + This version is called when the reagents reacts + with a turf. You'll want to put stuff like extra + slippery floors for lube or something in here. + + on_mob_life(mob/living/M) + This proc is called everytime the mobs life proc executes. + This is the place where you put damage for toxins , + drowsyness for sleep toxins etc etc. + You'll want to call the parents proc by using ..() . + If you dont, the chemical will stay in the mob forever - + unless you write your own piece of code to slowly remove it. + (Should be pretty easy, 1 line of code) + + Important variables: + + holder + This variable contains a reference to the holder the chemical is 'in' + + volume + This is the volume of the reagent. + + id + The id of the reagent + + name + The name of the reagent. + + data + This var can be used for whatever the fuck you want.You could use this + for DNA in a blood reagent or ... well whatever you want. + + color + This is a hexadecimal color that represents the reagent outside of containers, + you define it as "#RRGGBB", or, red green blue. You can also define it using the + rgb() proc, which returns a hexadecimal value too. The color is black by default. + + A good website for color calculations: http://www.psyclops.com/tools/rgb/ + + + + +About Recipes: + + Recipes are simple datums that contain a list of required reagents and a result. + They also have a proc that is called when the recipe is matched. + + on_reaction(datum/reagents/holder, created_volume) + This proc is called when the recipe is matched. + You'll want to add explosions etc here. + To find the location you'll have to do something + like get_turf(holder.my_atom) + + name & id + Should be pretty obvious. + + result + This var contains the id of the resulting reagent. + + required_reagents + This is a list of ids of the required reagents. + Each id also needs an associated value that gives us the minimum required amount + of that reagent. The handle_reaction proc can detect mutiples of the same recipes + so for most cases you want to set the required amount to 1. + + required_catalysts (Added May 2011) + This is a list of the ids of the required catalysts. + Functionally similar to required_reagents, it is a list of reagents that are required + for the reaction. However, unlike required_reagents, catalysts are NOT consumed. + They mearly have to be present in the container. + + result_amount + This is the amount of the resulting reagent this recipe will produce. + I recommend you set this to the total volume of all required reagent. + + required_container + The container the recipe has to take place in in order to happen. Leave this blank/null + if you want the reaction to happen anywhere. + + required_other + Basically like a reagent's data variable. You can set extra requirements for a + reaction with this. + + +About the Tools: + + By default, all atom have a reagents var - but its empty. if you want to use an object for the chem. + system you'll need to add something like this in its new proc: + + var/datum/reagents/R = new/datum/reagents(100), <<< create a new datum, 100 is the maximum_volume of the new holder datum. + reagents = R, <<< assign the new datum to the objects reagents var + R.my_atom = src, <<< set the holders my_atom to src so that we know where we are. + + This can also be done by calling a convenience proc: + atom/proc/create_reagents(max_volume) + + Other important stuff: + + amount_per_transfer_from_this var + This var is mostly used by beakers and bottles. + It simply tells us how much to transfer when + 'pouring' our reagents into something else. + + atom/proc/is_open_container() + Checks atom/var/flags & OPENCONTAINER. + If this returns 1 , you can use syringes, beakers etc + to manipulate the contents of this object. + If it's 0, you'll need to write your own custom reagent + transfer code since you will not be able to use the standard + tools to manipulate it. + */ \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/_reagent_base.dm b/code/modules/reagents/chemistry/reagents.dm similarity index 55% rename from code/modules/reagents/oldchem/reagents/_reagent_base.dm rename to code/modules/reagents/chemistry/reagents.dm index fbf1398decb..f9e0a664e1a 100644 --- a/code/modules/reagents/oldchem/reagents/_reagent_base.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -1,3 +1,9 @@ +#define SOLID 1 +#define LIQUID 2 +#define GAS 3 +#define FOOD_METABOLISM 0.4 +#define REM REAGENTS_EFFECT_MULTIPLIER + /datum/reagent var/name = "Reagent" var/id = "reagent" @@ -20,6 +26,16 @@ //By default, all reagents will ONLY affect organics, not synthetics. Re-define in the reagent's definition if the reagent is meant to affect synths var/process_flags = ORGANIC var/admin_only = 0 + var/overdose_threshold = 0 + var/addiction_chance = 0 + var/addiction_stage = 1 + var/last_addiction_dose = 0 + var/overdosed = 0 // You fucked up and this is now triggering it's overdose effects, purge that shit quick. + var/current_cycle = 1 + +/datum/reagent/Destroy() + . = ..() + holder = null /datum/reagent/proc/reaction_mob(mob/living/M, method=TOUCH, volume) //Some reagents transfer on touch, others don't; dependent on if they penetrate the skin or not. if(holder) //for catching rare runtimes @@ -61,20 +77,78 @@ /datum/reagent/proc/on_mob_death(mob/living/M) //use this to have chems have a "death-triggered" effect return -// Called when two reagents of the same are mixing. -/datum/reagent/proc/on_merge(data) +// Called when this reagent is removed while inside a mob +/datum/reagent/proc/on_mob_delete(mob/living/M) return /datum/reagent/proc/on_move(mob/M) return -/datum/reagent/proc/on_update(atom/A) - return - // Called after add_reagents creates a new reagent. /datum/reagent/proc/on_new(data) return -/datum/reagent/Destroy() - . = ..() - holder = null \ No newline at end of file +// Called when two reagents of the same are mixing. +/datum/reagent/proc/on_merge(data) + return + +/datum/reagent/proc/on_update(atom/A) + return + +// Called every time reagent containers process. +/datum/reagent/proc/on_tick(data) + return + +// Called when the reagent container is hit by an explosion +/datum/reagent/proc/on_ex_act(severity) + return + +// Called if the reagent has passed the overdose threshold and is set to be triggering overdose effects +/datum/reagent/proc/overdose_process(mob/living/M, severity) + var/effect = rand(1, 100) - severity + if(effect <= 8) + M.adjustToxLoss(severity) + return effect + +/datum/reagent/proc/overdose_start(mob/living/M) + return + +/datum/reagent/proc/addiction_act_stage1(mob/living/M) + return + +/datum/reagent/proc/addiction_act_stage2(mob/living/M) + if(prob(8)) + M.emote("shiver") + if(prob(8)) + M.emote("sneeze") + if(prob(4)) + to_chat(M, "You feel a dull headache.") + +/datum/reagent/proc/addiction_act_stage3(mob/living/M) + if(prob(8)) + M.emote("twitch_s") + if(prob(8)) + M.emote("shiver") + if(prob(4)) + to_chat(M, "You begin craving [name]!") + +/datum/reagent/proc/addiction_act_stage4(mob/living/M) + if(prob(8)) + M.emote("twitch") + if(prob(4)) + to_chat(M, "You have the strong urge for some [name]!") + if(prob(4)) + to_chat(M, "You REALLY crave some [name]!") + +/datum/reagent/proc/addiction_act_stage5(mob/living/M) + if(prob(8)) + M.emote("twitch") + if(prob(6)) + to_chat(M, "Your stomach lurches painfully!") + M.visible_message("[M] gags and retches!") + M.Stun(rand(2,4)) + M.Weaken(rand(2,4)) + if(prob(5)) + to_chat(M, "You feel like you can't live without [name]!") + if(prob(5)) + to_chat(M, "You would DIE for some [name] right now!") \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_admin.dm b/code/modules/reagents/chemistry/reagents/admin.dm similarity index 69% rename from code/modules/reagents/oldchem/reagents/reagents_admin.dm rename to code/modules/reagents/chemistry/reagents/admin.dm index 09636bd111f..024b78c3cb0 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_admin.dm +++ b/code/modules/reagents/chemistry/reagents/admin.dm @@ -57,27 +57,4 @@ /datum/reagent/adminordrazine/nanites name = "Nanites" id = "nanites" - description = "Nanomachines that aid in rapid cellular regeneration." - - -// For random item spawning. Takes a list of paths, and returns the same list without anything that contains admin only reagents - -/proc/adminReagentCheck(var/list/incoming) - var/list/outgoing[0] - for(var/tocheck in incoming) - if(ispath(tocheck)) - var/check = new tocheck - if(istype(check, /atom)) - var/atom/reagentCheck = check - var/datum/reagents/reagents = reagentCheck.reagents - var/admin = 0 - for(var/reag in reagents.reagent_list) - var/datum/reagent/reagent = reag - if(reagent.admin_only) - admin = 1 - break - if(!(admin)) - outgoing += tocheck - else - outgoing += tocheck - return outgoing + description = "Nanomachines that aid in rapid cellular regeneration." \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm similarity index 100% rename from code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm rename to code/modules/reagents/chemistry/reagents/alcohol.dm diff --git a/code/modules/reagents/newchem/Blob-Reagents.dm b/code/modules/reagents/chemistry/reagents/blob.dm similarity index 100% rename from code/modules/reagents/newchem/Blob-Reagents.dm rename to code/modules/reagents/chemistry/reagents/blob.dm diff --git a/code/modules/reagents/newchem/disease.dm b/code/modules/reagents/chemistry/reagents/disease.dm similarity index 57% rename from code/modules/reagents/newchem/disease.dm rename to code/modules/reagents/chemistry/reagents/disease.dm index cdc2d0b8d43..b4c76ac1338 100644 --- a/code/modules/reagents/newchem/disease.dm +++ b/code/modules/reagents/chemistry/reagents/disease.dm @@ -180,141 +180,4 @@ /datum/reagent/plasma_dust/plasmavirusfood/weak name = "weakened virus plasma" id = "weakplasmavirusfood" - color = "#CEC3C6" // rgb: 206,195,198 - -//reactions -/datum/chemical_reaction/virus_food - name = "Virus Food" - id = "virusfood" - result = "virusfood" - required_reagents = list("water" = 1, "milk" = 1, "oxygen" = 1) - result_amount = 3 - -/datum/chemical_reaction/virus_food_mutagen - name = "mutagenic agar" - id = "mutagenvirusfood" - result = "mutagenvirusfood" - required_reagents = list("mutagen" = 1, "virusfood" = 1) - result_amount = 1 - -/datum/chemical_reaction/virus_food_diphenhydramine - name = "virus rations" - id = "diphenhydraminevirusfood" - result = "diphenhydraminevirusfood" - required_reagents = list("diphenhydramine" = 1, "virusfood" = 1) - result_amount = 1 - -/datum/chemical_reaction/virus_food_plasma - name = "virus plasma" - id = "plasmavirusfood" - result = "plasmavirusfood" - required_reagents = list("plasma_dust" = 1, "virusfood" = 1) - result_amount = 1 - -/datum/chemical_reaction/virus_food_plasma_diphenhydramine - name = "weakened virus plasma" - id = "weakplasmavirusfood" - result = "weakplasmavirusfood" - required_reagents = list("diphenhydramine" = 1, "plasmavirusfood" = 1) - result_amount = 2 - -/datum/chemical_reaction/virus_food_mutagen_sugar - name = "sucrose agar" - id = "sugarvirusfood" - result = "sugarvirusfood" - required_reagents = list("sugar" = 1, "mutagenvirusfood" = 1) - result_amount = 2 - -/datum/chemical_reaction/virus_food_mutagen_salineglucose - name = "sucrose agar" - id = "salineglucosevirusfood" - result = "sugarvirusfood" - required_reagents = list("salglu_solution" = 1, "mutagenvirusfood" = 1) - result_amount = 2 - - -//mix virus -/datum/chemical_reaction/mix_virus - name = "Mix Virus" - id = "mixvirus" - required_reagents = list("virusfood" = 1) - required_catalysts = list("blood" = 1) - var/level_min = 0 - var/level_max = 2 - -/datum/chemical_reaction/mix_virus/on_reaction(datum/reagents/holder, created_volume) - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list - if(B && B.data) - var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] - if(D) - D.Evolve(level_min, level_max) - - -/datum/chemical_reaction/mix_virus/mix_virus_2 - name = "Mix Virus 2" - id = "mixvirus2" - required_reagents = list("mutagen" = 1) - level_min = 2 - level_max = 4 - -/datum/chemical_reaction/mix_virus/mix_virus_3 - name = "Mix Virus 3" - id = "mixvirus3" - required_reagents = list("plasma_dust" = 1) - level_min = 4 - level_max = 6 - -/datum/chemical_reaction/mix_virus/mix_virus_4 - name = "Mix Virus 4" - id = "mixvirus4" - required_reagents = list("uranium" = 1) - level_min = 5 - level_max = 6 - -/datum/chemical_reaction/mix_virus/mix_virus_5 - name = "Mix Virus 5" - id = "mixvirus5" - required_reagents = list("mutagenvirusfood" = 1) - level_min = 3 - level_max = 3 - -/datum/chemical_reaction/mix_virus/mix_virus_6 - name = "Mix Virus 6" - id = "mixvirus6" - required_reagents = list("sugarvirusfood" = 1) - level_min = 4 - level_max = 4 - -/datum/chemical_reaction/mix_virus/mix_virus_7 - name = "Mix Virus 7" - id = "mixvirus7" - required_reagents = list("weakplasmavirusfood" = 1) - level_min = 5 - level_max = 5 - -/datum/chemical_reaction/mix_virus/mix_virus_8 - name = "Mix Virus 8" - id = "mixvirus8" - required_reagents = list("plasmavirusfood" = 1) - level_min = 6 - level_max = 6 - -/datum/chemical_reaction/mix_virus/mix_virus_9 - name = "Mix Virus 9" - id = "mixvirus9" - required_reagents = list("diphenhydraminevirusfood" = 1) - level_min = 1 - level_max = 1 - -/datum/chemical_reaction/mix_virus/rem_virus - name = "Devolve Virus" - id = "remvirus" - required_reagents = list("diphenhydramine" = 1) - required_catalysts = list("blood" = 1) - -/datum/chemical_reaction/mix_virus/rem_virus/on_reaction(datum/reagents/holder, created_volume) - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list - if(B && B.data) - var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] - if(D) - D.Devolve() + color = "#CEC3C6" // rgb: 206,195,198 \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm b/code/modules/reagents/chemistry/reagents/drink_base.dm similarity index 100% rename from code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm rename to code/modules/reagents/chemistry/reagents/drink_base.dm diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm b/code/modules/reagents/chemistry/reagents/drink_cold.dm similarity index 97% rename from code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm rename to code/modules/reagents/chemistry/reagents/drink_cold.dm index 26164571769..3e3c2670608 100644 --- a/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm +++ b/code/modules/reagents/chemistry/reagents/drink_cold.dm @@ -54,7 +54,7 @@ M.status_flags |= GOTTAGOFAST ..() -/datum/reagent/drink/cold/nuka_cola/reagent_deleted(mob/living/M) +/datum/reagent/drink/cold/nuka_cola/on_mob_delete(mob/living/M) M.status_flags &= ~GOTTAGOFAST ..() diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm b/code/modules/reagents/chemistry/reagents/drinks.dm similarity index 63% rename from code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm rename to code/modules/reagents/chemistry/reagents/drinks.dm index 869e9295bf5..b415d0f8d08 100644 --- a/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm +++ b/code/modules/reagents/chemistry/reagents/drinks.dm @@ -283,3 +283,150 @@ M.adjustBruteLoss(-1) M.adjustFireLoss(-1) ..() + +/datum/reagent/ginsonic/on_mob_life(mob/living/M) + M.AdjustDrowsy(-5) + if(prob(25)) + M.AdjustParalysis(-1) + M.AdjustStunned(-1) + M.AdjustWeakened(-1) + if(prob(8)) + M.reagents.add_reagent("methamphetamine",1.2) + var/sonic_message = pick("Gotta go fast!", "Time to speed, keed!", "I feel a need for speed!", "Let's juice.", "Juice time.", "Way Past Cool!") + if(prob(50)) + M.say("[sonic_message]") + else + to_chat(M, "[sonic_message ]") + ..() + +/datum/reagent/ethanol/applejack + name = "Applejack" + id = "applejack" + description = "A highly concentrated alcoholic beverage made by repeatedly freezing cider and removing the ice." + color = "#997A00" + alcohol_perc = 0.4 + +/datum/reagent/ethanol/jackrose + name = "Jack Rose" + id = "jackrose" + description = "A classic cocktail that had fallen out of fashion, but never out of taste," + color = "#664300" + alcohol_perc = 0.4 + +/datum/reagent/ethanol/dragons_breath //inaccessible to players, but here for admin shennanigans + name = "Dragon's Breath" + id = "dragonsbreath" + description = "Possessing this stuff probably breaks the Geneva convention." + reagent_state = LIQUID + color = "#DC0000" + alcohol_perc = 1 + +/datum/reagent/ethanol/dragons_breath/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == INGEST && prob(20)) + if(M.on_fire) + M.adjust_fire_stacks(3) + +/datum/reagent/ethanol/dragons_breath/on_mob_life(mob/living/M) + if(M.reagents.has_reagent("milk")) + to_chat(M, "The milk stops the burning. Ahhh.") + M.reagents.del_reagent("milk") + M.reagents.del_reagent("dragonsbreath") + return + if(prob(8)) + to_chat(M, "Oh god! Oh GODD!!") + if(prob(50)) + to_chat(M, "Your throat burns terribly!") + M.emote(pick("scream","cry","choke","gasp")) + M.Stun(1) + if(prob(8)) + to_chat(M, "Why!? WHY!?") + if(prob(8)) + to_chat(M, "ARGHHHH!") + if(prob(2 * volume)) + to_chat(M, "OH GOD OH GOD PLEASE NO!!
") + if(M.on_fire) + M.adjust_fire_stacks(5) + if(prob(50)) + to_chat(M, "IT BURNS!!!!") + M.visible_message("[M] is consumed in flames!") + M.dust() + return + ..() + +// ROBOT ALCOHOL PAST THIS POINT +// WOOO! + + +/datum/reagent/ethanol/synthanol + name = "Synthanol" + id = "synthanol" + description = "A runny liquid with conductive capacities. Its effects on synthetics are similar to those of alcohol on organics." + reagent_state = LIQUID + color = "#1BB1FF" + process_flags = ORGANIC | SYNTHETIC + metabolization_rate = 0.4 + alcohol_perc = 0.5 + +/datum/reagent/ethanol/synthanol/on_mob_life(mob/living/M) + if(!M.isSynthetic()) + holder.remove_reagent(id, 3.6) //gets removed from organics very fast + if(prob(25)) + holder.remove_reagent(id, 15) + M.fakevomit() + ..() + +/datum/reagent/ethanol/synthanol/reaction_mob(mob/living/M, method=TOUCH, volume) + if(M.isSynthetic()) + return + if(method == INGEST) + to_chat(M, pick("That was awful!", "Yuck!")) + +/datum/reagent/ethanol/synthanol/robottears + name = "Robot Tears" + id = "robottears" + description = "An oily substance that an IPC could technically consider a 'drink'." + reagent_state = LIQUID + color = "#363636" + alcohol_perc = 0.25 + +/datum/reagent/ethanol/synthanol/trinary + name = "Trinary" + id = "trinary" + description = "A fruit drink meant only for synthetics, however that works." + reagent_state = LIQUID + color = "#adb21f" + alcohol_perc = 0.2 + +/datum/reagent/ethanol/synthanol/servo + name = "Servo" + id = "servo" + description = "A drink containing some organic ingredients, but meant only for synthetics." + reagent_state = LIQUID + color = "#5b3210" + alcohol_perc = 0.25 + +/datum/reagent/ethanol/synthanol/uplink + name = "Uplink" + id = "uplink" + description = "A potent mix of alcohol and synthanol. Will only work on synthetics." + reagent_state = LIQUID + color = "#e7ae04" + alcohol_perc = 0.15 + +/datum/reagent/ethanol/synthanol/synthnsoda + name = "Synth 'n Soda" + id = "synthnsoda" + description = "The classic drink adjusted for a robot's tastes." + reagent_state = LIQUID + color = "#7204e7" + alcohol_perc = 0.25 + +/datum/reagent/ethanol/synthanol/synthignon + name = "Synthignon" + id = "synthignon" + description = "Someone mixed wine and alcohol for robots. Hope you're proud of yourself." + reagent_state = LIQUID + color = "#d004e7" + alcohol_perc = 0.25 + +// ROBOT ALCOHOL ENDS \ No newline at end of file diff --git a/code/modules/reagents/newchem/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm similarity index 81% rename from code/modules/reagents/newchem/drugs.dm rename to code/modules/reagents/chemistry/reagents/drugs.dm index bc5b10be569..f70360baf28 100644 --- a/code/modules/reagents/newchem/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -1,8 +1,118 @@ -#define SOLID 1 -#define LIQUID 2 -#define GAS 3 +/datum/reagent/serotrotium + name = "Serotrotium" + id = "serotrotium" + description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans." + reagent_state = LIQUID + color = "#202040" // rgb: 20, 20, 40 + metabolization_rate = 0.25 * REAGENTS_METABOLISM -#define REM REAGENTS_EFFECT_MULTIPLIER +/datum/reagent/serotrotium/on_mob_life(mob/living/M) + if(ishuman(M)) + if(prob(7)) + M.emote(pick("twitch","drool","moan","gasp")) + ..() + + +/datum/reagent/lithium + name = "Lithium" + id = "lithium" + description = "A chemical element." + reagent_state = SOLID + color = "#808080" // rgb: 128, 128, 128 + +/datum/reagent/lithium/on_mob_life(mob/living/M) + if(isturf(M.loc) && !istype(M.loc, /turf/space)) + if(M.canmove && !M.restrained()) + step(M, pick(cardinal)) + if(prob(5)) M.emote(pick("twitch","drool","moan")) + ..() + + +/datum/reagent/hippies_delight + name = "Hippie's Delight" + id = "hippiesdelight" + description = "You just don't get it maaaan." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + metabolization_rate = 0.2 * REAGENTS_METABOLISM + +/datum/reagent/hippies_delight/on_mob_life(mob/living/M) + M.Druggy(50) + switch(current_cycle) + if(1 to 5) + if(!M.stuttering) M.stuttering = 1 + M.Dizzy(10) + if(prob(10)) M.emote(pick("twitch","giggle")) + if(5 to 10) + if(!M.stuttering) M.stuttering = 1 + M.Jitter(20) + M.Dizzy(20) + M.Druggy(45) + if(prob(20)) M.emote(pick("twitch","giggle")) + if(10 to INFINITY) + if(!M.stuttering) M.stuttering = 1 + M.Jitter(40) + M.Dizzy(40) + M.Druggy(60) + if(prob(30)) M.emote(pick("twitch","giggle")) + ..() + +/datum/reagent/lsd + name = "Lysergic acid diethylamide" + id = "lsd" + description = "A highly potent hallucinogenic substance. Far out, maaaan." + reagent_state = LIQUID + color = "#0000D8" + +/datum/reagent/lsd/on_mob_life(mob/living/M) + M.Druggy(15) + M.AdjustHallucinate(10) + ..() + +/datum/reagent/space_drugs + name = "Space drugs" + id = "space_drugs" + description = "An illegal chemical compound used as drug." + reagent_state = LIQUID + color = "#9087A2" + metabolization_rate = 0.2 + addiction_chance = 65 + heart_rate_decrease = 1 + +/datum/reagent/space_drugs/on_mob_life(mob/living/M) + M.Druggy(15) + if(isturf(M.loc) && !istype(M.loc, /turf/space)) + if(M.canmove && !M.restrained()) + step(M, pick(cardinal)) + if(prob(7)) M.emote(pick("twitch","drool","moan","giggle")) + ..() + +/datum/reagent/psilocybin + name = "Psilocybin" + id = "psilocybin" + description = "A strong psycotropic derived from certain species of mushroom." + color = "#E700E7" // rgb: 231, 0, 231 + +/datum/reagent/psilocybin/on_mob_life(mob/living/M) + M.Druggy(30) + switch(current_cycle) + if(1 to 5) + M.Stuttering(1) + M.Dizzy(5) + if(prob(10)) M.emote(pick("twitch","giggle")) + if(5 to 10) + M.Stuttering(1) + M.Jitter(10) + M.Dizzy(10) + M.Druggy(35) + if(prob(20)) M.emote(pick("twitch","giggle")) + if(10 to INFINITY) + M.Stuttering(1) + M.Jitter(20) + M.Dizzy(20) + M.Druggy(40) + if(prob(30)) M.emote(pick("twitch","giggle")) + ..() /datum/reagent/nicotine name = "Nicotine" @@ -133,22 +243,6 @@ M.adjustBruteLoss(5) M.emote("twitch_s") -/datum/chemical_reaction/crank - name = "Crank" - id = "crank" - result = "crank" - required_reagents = list("diphenhydramine" = 1, "ammonia" = 1, "lithium" = 1, "sacid" = 1, "fuel" = 1) - result_amount = 5 - mix_message = "The mixture violently reacts, leaving behind a few crystalline shards." - mix_sound = 'sound/goonstation/effects/crystalshatter.ogg' - min_temp = 390 - -/datum/chemical_reaction/crank/on_reaction(datum/reagents/holder, created_volume) - var/turf/T = get_turf(holder.my_atom) - for(var/turf/turf in range(1,T)) - new /obj/effect/hotspot(turf) - explosion(T,0,0,2) - /datum/reagent/krokodil name = "Krokodil" id = "krokodil" @@ -216,16 +310,6 @@ M.emote("shiver") M.bodytemperature -= 70 -/datum/chemical_reaction/krokodil - name = "Krokodil" - id = "krokodil" - result = "krokodil" - required_reagents = list("diphenhydramine" = 1, "morphine" = 1, "cleaner" = 1, "potassium" = 1, "phosphorus" = 1, "fuel" = 1) - result_amount = 6 - mix_message = "The mixture dries into a pale blue powder." - min_temp = 380 - mix_sound = 'sound/goonstation/misc/fuse.ogg' - /datum/reagent/methamphetamine name = "Methamphetamine" id = "methamphetamine" @@ -253,7 +337,7 @@ M.adjustBrainLoss(1.0) ..() -/datum/reagent/methamphetamine/reagent_deleted(mob/living/M) +/datum/reagent/methamphetamine/on_mob_delete(mob/living/M) M.status_flags &= ~GOTTAGOREALLYFAST ..() @@ -282,32 +366,6 @@ else if(effect <= 7) M.emote("laugh") -/datum/chemical_reaction/methamphetamine - name = "methamphetamine" - id = "methamphetamine" - result = "methamphetamine" - required_reagents = list("ephedrine" = 1, "iodine" = 1, "phosphorus" = 1, "hydrogen" = 1) - result_amount = 4 - min_temp = 374 - -/datum/chemical_reaction/methamphetamine/on_reaction(datum/reagents/holder) - var/turf/T = get_turf(holder.my_atom) - T.visible_message("The solution generates a strong vapor!") - for(var/mob/living/carbon/C in range(T, 1)) - if(C.can_breathe_gas()) - C.emote("gasp") - C.AdjustLoseBreath(1) - C.reagents.add_reagent("toxin", 10) - C.reagents.add_reagent("neurotoxin2", 20) - -/datum/chemical_reaction/saltpetre - name = "saltpetre" - id = "saltpetre" - result = "saltpetre" - required_reagents = list("potassium" = 1, "nitrogen" = 1, "oxygen" = 3) - result_amount = 3 - mix_sound = 'sound/goonstation/misc/fuse.ogg' - /datum/reagent/saltpetre name = "Saltpetre" id = "saltpetre" @@ -411,32 +469,6 @@ M.reagents.add_reagent("jagged_crystals", 5) M.emote("twitch") -/datum/chemical_reaction/bath_salts - name = "bath_salts" - id = "bath_salts" - result = "bath_salts" - required_reagents = list("????" = 1, "saltpetre" = 1, "msg" = 1, "cleaner" = 1, "enzyme" = 1, "mugwort" = 1, "mercury" = 1) - result_amount = 6 - min_temp = 374 - mix_message = "Tiny cubic crystals precipitate out of the mixture. Huh." - mix_sound = 'sound/goonstation/misc/fuse.ogg' - -/datum/chemical_reaction/jenkem - name = "Jenkem" - id = "jenkem" - result = "jenkem" - required_reagents = list("toiletwater" = 1, "ammonia" = 1, "water" = 1) - result_amount = 3 - mix_message = "The mixture ferments into a filthy morass." - mix_sound = 'sound/effects/blobattack.ogg' - -/datum/chemical_reaction/jenkem/on_reaction(datum/reagents/holder) - var/turf/T = get_turf(holder.my_atom) - T.visible_message("The solution generates a strong vapor!") - for(var/mob/living/carbon/C in range(T, 1)) - if(C.can_breathe_gas()) - C.reagents.add_reagent("jenkem", 25) - /datum/reagent/jenkem name = "Jenkem" id = "jenkem" @@ -452,13 +484,6 @@ M.adjustToxLoss(1) ..() -/datum/chemical_reaction/aranesp - name = "Aranesp" - id = "aranesp" - result = "aranesp" - required_reagents = list("epinephrine" = 1, "atropine" = 1, "insulin" = 1) - result_amount = 3 - /datum/reagent/aranesp name = "Aranesp" id = "aranesp" @@ -514,14 +539,6 @@ process_flags = ORGANIC | SYNTHETIC //Flipping for everyone! addiction_chance = 10 -/datum/chemical_reaction/fliptonium - name = "fliptonium" - id = "fliptonium" - result = "fliptonium" - required_reagents = list("ephedrine" = 1, "liquid_dark_matter" = 1, "chocolate" = 1, "ginsonic" = 1) - result_amount = 4 - mix_message = "The mixture swirls around excitedly!" - /datum/reagent/fliptonium/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == INGEST || method == TOUCH) M.SpinAnimation(speed = 12, loops = -1) @@ -553,7 +570,7 @@ M.SetSleeping(0) ..() -/datum/reagent/fliptonium/reagent_deleted(mob/living/M) +/datum/reagent/fliptonium/on_mob_delete(mob/living/M) M.SpinAnimation(speed = 12, loops = -1) /datum/reagent/fliptonium/overdose_process(mob/living/M, severity) @@ -592,20 +609,11 @@ description = "Ultra-Lube is an enhanced lubricant which induces effect similar to Methamphetamine in synthetic users by drastically reducing internal friction and increasing cooling capabilities." reagent_state = LIQUID color = "#1BB1FF" - process_flags = SYNTHETIC overdose_threshold = 20 addiction_chance = 60 metabolization_rate = 0.6 -/datum/chemical_reaction/lube/ultra - name = "Ultra-Lube" - id = "ultralube" - result = "ultralube" - required_reagents = list("lube" = 2, "formaldehyde" = 1, "cryostylane" = 1) - result_amount = 2 - mix_message = "The mixture darkens and appears to partially vaporize into a chilling aerosol." - /datum/reagent/lube/ultra/on_mob_life(mob/living/M) var/high_message = pick("You feel your servos whir!", "You feel like you need to go faster.", "You feel like you were just overclocked!") if(prob(1)) @@ -624,7 +632,7 @@ M.emote(pick("twitch", "shiver")) ..() -/datum/reagent/lube/ultra/reagent_deleted(mob/living/M) +/datum/reagent/lube/ultra/on_mob_delete(mob/living/M) M.status_flags &= ~GOTTAGOREALLYFAST ..() @@ -681,12 +689,4 @@ B.pixel_y = rand(-20, 0) B.icon = I M.adjustFireLoss(rand(1,5)*REM) - M.adjustBruteLoss(rand(1,5)*REM) - -/datum/chemical_reaction/surge - name = "Surge" - id = "surge" - result = "surge" - required_reagents = list("thermite" = 3, "uranium" = 1, "fluorosurfactant" = 1, "sacid" = 1) - result_amount = 6 - mix_message = "The mixture congeals into a metallic green gel that crackles with electrical activity." + M.adjustBruteLoss(rand(1,5)*REM) \ No newline at end of file diff --git a/code/modules/reagents/newchem/food.dm b/code/modules/reagents/chemistry/reagents/food.dm similarity index 54% rename from code/modules/reagents/newchem/food.dm rename to code/modules/reagents/chemistry/reagents/food.dm index 7f529b6b815..83e0cbb031e 100644 --- a/code/modules/reagents/newchem/food.dm +++ b/code/modules/reagents/chemistry/reagents/food.dm @@ -1,3 +1,397 @@ +/////////////////////////Food Reagents//////////////////////////// +// Part of the food code. Nutriment is used instead of the old "heal_amt" code. Also is where all the food +// condiments, additives, and such go. +/datum/reagent/nutriment // Pure nutriment, universally digestable and thus slightly less effective + name = "Nutriment" + id = "nutriment" + description = "A questionable mixture of various pure nutrients commonly found in processed foods." + reagent_state = SOLID + nutriment_factor = 12 * REAGENTS_METABOLISM + color = "#664330" // rgb: 102, 67, 48 + var/diet_flags = DIET_OMNI | DIET_HERB | DIET_CARN + +/datum/reagent/nutriment/on_mob_life(mob/living/M) + if(!(M.mind in ticker.mode.vampires)) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients + H.nutrition += nutriment_factor // For hunger and fatness + if(prob(50)) + M.adjustBruteLoss(-1) + if(H.species.exotic_blood) + H.vessel.add_reagent(H.species.exotic_blood, 0.4) + else + if(!(H.species.flags & NO_BLOOD)) + H.vessel.add_reagent("blood", 0.4) + ..() + +/datum/reagent/nutriment/protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores + name = "Protein" + id = "protein" + description = "Various essential proteins and fats commonly found in animal flesh and blood." + nutriment_factor = 15 * REAGENTS_METABOLISM + diet_flags = DIET_CARN | DIET_OMNI + +/datum/reagent/nutriment/plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores + name = "Plant-matter" + id = "plantmatter" + description = "Vitamin-rich fibers and natural sugars commonly found in fresh produce." + nutriment_factor = 15 * REAGENTS_METABOLISM + diet_flags = DIET_HERB | DIET_OMNI + + +/datum/reagent/vitamin + name = "Vitamin" + id = "vitamin" + description = "All the best vitamins, minerals, and carbohydrates the body needs in pure form." + reagent_state = SOLID + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#664330" // rgb: 102, 67, 48 + +/datum/reagent/vitamin/on_mob_life(mob/living/M) //everyone needs vitamins, so this works on everyone, regardless of diet or if they're a vampire. + M.nutrition += nutriment_factor + if(prob(50)) + M.adjustBruteLoss(-1) + M.adjustFireLoss(-1) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species.exotic_blood) + H.vessel.add_reagent(H.species.exotic_blood, 0.5) + else + if(!(H.species.flags & NO_BLOOD)) + H.vessel.add_reagent("blood", 0.5) + ..() + +/datum/reagent/soysauce + name = "Soysauce" + id = "soysauce" + description = "A salty sauce made from the soy plant." + reagent_state = LIQUID + nutriment_factor = 2 * REAGENTS_METABOLISM + color = "#792300" // rgb: 121, 35, 0 + +/datum/reagent/ketchup + name = "Ketchup" + id = "ketchup" + description = "Ketchup, catsup, whatever. It's tomato paste." + reagent_state = LIQUID + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#731008" // rgb: 115, 16, 8 + + +/datum/reagent/capsaicin + name = "Capsaicin Oil" + id = "capsaicin" + description = "This is what makes chilis hot." + reagent_state = LIQUID + color = "#B31008" // rgb: 179, 16, 8 + +/datum/reagent/capsaicin/on_mob_life(mob/living/M) + switch(current_cycle) + if(1 to 15) + M.bodytemperature += 5 * TEMPERATURE_DAMAGE_COEFFICIENT + if(holder.has_reagent("frostoil")) + holder.remove_reagent("frostoil", 5) + if(isslime(M)) + M.bodytemperature += rand(5,20) + if(15 to 25) + M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT + if(isslime(M)) + M.bodytemperature += rand(10,20) + if(25 to 35) + M.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT + if(isslime(M)) + M.bodytemperature += rand(15,20) + if(35 to INFINITY) + M.bodytemperature += 20 * TEMPERATURE_DAMAGE_COEFFICIENT + if(isslime(M)) + M.bodytemperature += rand(20,25) + ..() + +/datum/reagent/frostoil + name = "Frost Oil" + id = "frostoil" + description = "A special oil that noticably chills the body. Extraced from Icepeppers." + reagent_state = LIQUID + color = "#8BA6E9" // rgb: 139, 166, 233 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/frostoil/on_mob_life(mob/living/M) + switch(current_cycle) + if(1 to 15) + M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT + if(holder.has_reagent("capsaicin")) + holder.remove_reagent("capsaicin", 5) + if(isslime(M)) + M.bodytemperature -= rand(5,20) + if(15 to 25) + M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT + if(isslime(M)) + M.bodytemperature -= rand(10,20) + if(25 to 35) + M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT + if(prob(1)) + M.emote("shiver") + if(isslime(M)) + M.bodytemperature -= rand(15,20) + if(35 to INFINITY) + M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT + if(prob(1)) + M.emote("shiver") + if(isslime(M)) + M.bodytemperature -= rand(20,25) + ..() + +/datum/reagent/frostoil/reaction_turf(turf/T, volume) + if(volume >= 5) + for(var/mob/living/carbon/slime/M in T) + M.adjustToxLoss(rand(15,30)) + + +/datum/reagent/sodiumchloride + name = "Salt" + id = "sodiumchloride" + description = "Sodium chloride, common table salt." + reagent_state = SOLID + color = "#B1B0B0" + overdose_threshold = 100 + +/datum/reagent/sodiumchloride/overdose_process(mob/living/M, severity) + if(prob(70)) + M.adjustBrainLoss(1) + ..() + +/datum/reagent/blackpepper + name = "Black Pepper" + id = "blackpepper" + description = "A powder ground from peppercorns. *AAAACHOOO*" + reagent_state = SOLID + +/datum/reagent/cocoa + name = "Cocoa Powder" + id = "cocoa" + description = "A fatty, bitter paste made from cocoa beans." + reagent_state = SOLID + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/cocoa/on_mob_life(mob/living/M) + M.nutrition += nutriment_factor + ..() + +/datum/reagent/hot_coco + name = "Hot Chocolate" + id = "hot_coco" + description = "Made with love! And cocoa beans." + reagent_state = LIQUID + nutriment_factor = 2 * REAGENTS_METABOLISM + color = "#403010" // rgb: 64, 48, 16 + +/datum/reagent/hot_coco/on_mob_life(mob/living/M) + if(M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 + M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + M.nutrition += nutriment_factor + ..() + +/datum/reagent/sprinkles + name = "Sprinkles" + id = "sprinkles" + description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops." + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#FF00FF" // rgb: 255, 0, 255 + +/datum/reagent/sprinkles/on_mob_life(mob/living/M) + M.nutrition += nutriment_factor + if(ishuman(M) && M.job in list("Security Officer", "Security Pod Pilot", "Detective", "Warden", "Head of Security", "Brig Physician", "Internal Affairs Agent", "Magistrate")) + M.adjustBruteLoss(-1) + M.adjustFireLoss(-1) + ..() + + +/datum/reagent/cornoil + name = "Corn Oil" + id = "cornoil" + description = "An oil derived from various types of corn." + reagent_state = LIQUID + nutriment_factor = 20 * REAGENTS_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/cornoil/on_mob_life(mob/living/M) + M.nutrition += nutriment_factor + ..() + +/datum/reagent/cornoil/reaction_turf(turf/simulated/T, volume) + if(!istype(T)) + return + if(volume >= 3) + T.MakeSlippery() + var/hotspot = (locate(/obj/effect/hotspot) in T) + if(hotspot) + var/datum/gas_mixture/lowertemp = T.remove_air( T.air.total_moles()) + lowertemp.temperature = max(min(lowertemp.temperature-2000, lowertemp.temperature / 2), 0) + lowertemp.react() + T.assume_air(lowertemp) + qdel(hotspot) + + +/datum/reagent/enzyme + name = "Denatured Enzyme" + id = "enzyme" + description = "Heated beyond usefulness, this enzyme is now worthless." + reagent_state = LIQUID + color = "#282314" // rgb: 54, 94, 48 + + +/datum/reagent/dry_ramen + name = "Dry Ramen" + id = "dry_ramen" + description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water." + reagent_state = SOLID + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/dry_ramen/on_mob_life(mob/living/M) + M.nutrition += nutriment_factor + ..() + + +/datum/reagent/hot_ramen + name = "Hot Ramen" + id = "hot_ramen" + description = "The noodles are boiled, the flavors are artificial, just like being back in school." + reagent_state = LIQUID + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/hot_ramen/on_mob_life(mob/living/M) + M.nutrition += nutriment_factor + if(M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 + M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT)) + ..() + + +/datum/reagent/hell_ramen + name = "Hell Ramen" + id = "hell_ramen" + description = "The noodles are boiled, the flavors are artificial, just like being back in school." + reagent_state = LIQUID + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/hell_ramen/on_mob_life(mob/living/M) + M.nutrition += nutriment_factor + M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT + ..() + + +/datum/reagent/flour + name = "flour" + id = "flour" + description = "This is what you rub all over yourself to pretend to be a ghost." + reagent_state = SOLID + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#FFFFFF" // rgb: 0, 0, 0 + +/datum/reagent/flour/on_mob_life(mob/living/M) + M.nutrition += nutriment_factor + ..() + +/datum/reagent/flour/reaction_turf(turf/T, volume) + if(!istype(T, /turf/space)) + new /obj/effect/decal/cleanable/flour(T) + + +/datum/reagent/rice + name = "Rice" + id = "rice" + description = "Enjoy the great taste of nothing." + reagent_state = SOLID + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#FFFFFF" // rgb: 0, 0, 0 + +/datum/reagent/rice/on_mob_life(mob/living/M) + M.nutrition += nutriment_factor + ..() + + +/datum/reagent/cherryjelly + name = "Cherry Jelly" + id = "cherryjelly" + description = "Totally the best. Only to be spread on foods with excellent lateral symmetry." + reagent_state = LIQUID + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#801E28" // rgb: 128, 30, 40 + +/datum/reagent/cherryjelly/on_mob_life(mob/living/M) + M.nutrition += nutriment_factor + ..() + +/datum/reagent/toxin/coffeepowder + name = "Coffee Grounds" + id = "coffeepowder" + description = "Finely ground Coffee beans, used to make coffee." + reagent_state = SOLID + color = "#5B2E0D" // rgb: 91, 46, 13 + +/datum/reagent/toxin/teapowder + name = "Ground Tea Leaves" + id = "teapowder" + description = "Finely shredded Tea leaves, used for making tea." + reagent_state = SOLID + color = "#7F8400" // rgb: 127, 132, 0 + +//Reagents used for plant fertilizers. +/datum/reagent/toxin/fertilizer + name = "fertilizer" + id = "fertilizer" + description = "A chemical mix good for growing plants with." + reagent_state = LIQUID + color = "#664330" // rgb: 102, 67, 48 + +/datum/reagent/toxin/fertilizer/eznutrient + name = "EZ Nutrient" + id = "eznutrient" + +/datum/reagent/toxin/fertilizer/left4zed + name = "Left-4-Zed" + id = "left4zed" + +/datum/reagent/toxin/fertilizer/robustharvest + name = "Robust Harvest" + id = "robustharvest" + + +/datum/reagent/sugar + name = "Sugar" + id = "sugar" + description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste." + reagent_state = SOLID + color = "#FFFFFF" // rgb: 255, 255, 255 + overdose_threshold = 200 // Hyperglycaemic shock + +/datum/reagent/sugar/on_mob_life(mob/living/M) + M.AdjustDrowsy(-5) + if(current_cycle >= 90) + M.AdjustJitter(2) + if(prob(50)) + M.AdjustParalysis(-1) + M.AdjustStunned(-1) + M.AdjustWeakened(-1) + if(prob(4)) + M.reagents.add_reagent("epinephrine", 1.2) + ..() + +/datum/reagent/sugar/overdose_start(mob/living/M) + to_chat(M, "You pass out from hyperglycemic shock!") + M.emote("collapse") + ..() + +/datum/reagent/sugar/overdose_process(mob/living/M, severity) + M.Paralyse(3 * severity) + M.Weaken(4 * severity) + if(prob(8)) + M.adjustToxLoss(severity) + /datum/reagent/questionmark // food poisoning name = "????" id = "????" @@ -34,15 +428,6 @@ reagent_state = LIQUID color = "#23A046" -/datum/chemical_reaction/triple_citrus - name = "triple_citrus" - id = "triple_citrus" - result = "triple_citrus" - required_reagents = list("lemonjuice" = 1, "limejuice" = 1, "orangejuice" = 1) - result_amount = 3 - mix_message = "The citrus juices begin to blend together." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - /datum/reagent/triple_citrus/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == INGEST) M.adjustToxLoss(-rand(1,2)) @@ -54,15 +439,6 @@ reagent_state = LIQUID color = "#C8A5DC" -/datum/chemical_reaction/corn_syrup - name = "corn_syrup" - id = "corn_syrup" - result = "corn_syrup" - required_reagents = list("corn_starch" = 1, "sacid" = 1) - result_amount = 2 - min_temp = 374 - mix_message = "The mixture forms a viscous, clear fluid!" - /datum/reagent/corn_syrup name = "Corn Syrup" id = "corn_syrup" @@ -74,15 +450,6 @@ M.reagents.add_reagent("sugar", 1.2) ..() -/datum/chemical_reaction/vhfcs - name = "vhfcs" - id = "vhfcs" - result = "vhfcs" - required_reagents = list("corn_syrup" = 1) - required_catalysts = list("enzyme" = 1) - result_amount = 1 - mix_message = "The mixture emits a sickly-sweet smell." - /datum/reagent/vhfcs name = "Very-high-fructose corn syrup" id = "vhfcs" @@ -94,15 +461,6 @@ M.reagents.add_reagent("sugar", 2.4) ..() -/datum/chemical_reaction/cola - name = "cola" - id = "cola" - result = "cola" - required_reagents = list("carbon" = 1, "oxygen" = 1, "water" = 1, "sugar" = 1) - result_amount = 4 - mix_message = "The mixture begins to fizz." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - /datum/reagent/honey name = "Honey" id = "honey" @@ -236,18 +594,6 @@ if(volume >= 5 && !istype(T, /turf/space)) new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge(T) -/datum/chemical_reaction/cheese - name = "cheese" - id = "cheese" - result = "cheese" - required_reagents = list("vomit" = 1, "milk" = 1) - result_amount = 1 - mix_message = "The mixture curdles up." - -/datum/chemical_reaction/cheese/on_reaction(datum/reagents/holder) - var/turf/T = get_turf(holder.my_atom) - T.visible_message("A faint cheesy smell drifts through the air...") - /datum/reagent/fake_cheese name = "Cheese substitute" id = "fake_cheese" @@ -279,19 +625,6 @@ if(volume >= 5 && !istype(T, /turf/space)) new /obj/item/weapon/reagent_containers/food/snacks/weirdcheesewedge(T) -/datum/chemical_reaction/weird_cheese - name = "Weird cheese" - id = "weird_cheese" - result = "weird_cheese" - required_reagents = list("green_vomit" = 1, "milk" = 1) - result_amount = 1 - mix_message = "The disgusting mixture sloughs together horribly, emitting a foul stench." - mix_sound = 'sound/goonstation/misc/gurggle.ogg' - -/datum/chemical_reaction/weird_cheese/on_reaction(datum/reagents/holder) - var/turf/T = get_turf(holder.my_atom) - T.visible_message("A horrible smell assaults your nose! What in space is it?") - /datum/reagent/beans name = "Refried beans" id = "beans" @@ -409,15 +742,6 @@ M.Stun(5) M.Paralyse(10) -/datum/chemical_reaction/hydrogenated_soybeanoil - name = "Partially hydrogenated space-soybean oil" - id = "hydrogenated_soybeanoil" - result = "hydrogenated_soybeanoil" - required_reagents = list("soybeanoil" = 1, "hydrogen" = 1) - result_amount = 2 - min_temp = 520 - mix_message = "The mixture emits a burnt, oily smell." - /datum/reagent/meatslurry name = "Meat Slurry" id = "meatslurry" @@ -435,15 +759,6 @@ new /obj/effect/decal/cleanable/blood/gibs/cleangibs(T) playsound(T, 'sound/effects/splat.ogg', 50, 1, -3) -/datum/chemical_reaction/meatslurry - name = "Meat Slurry" - id = "meatslurry" - result = "meatslurry" - required_reagents = list("corn_starch" = 1, "blood" = 1) - result_amount = 2 - mix_message = "The mixture congeals into a bloody mass." - mix_sound = 'sound/effects/blobattack.ogg' - /datum/reagent/mashedpotatoes name = "Mashed potatoes" id = "mashedpotatoes" @@ -458,15 +773,6 @@ reagent_state = LIQUID color = "#B4641B" -/datum/chemical_reaction/gravy - name = "Gravy" - id = "gravy" - result = "gravy" - required_reagents = list("porktonium" = 1, "corn_starch" = 1, "milk" = 1) - result_amount = 3 - min_temp = 374 - mix_message = "The substance thickens and takes on a meaty odor." - /datum/reagent/beff name = "Beff" id = "beff" @@ -484,15 +790,6 @@ M.emote(pick("groan","moan")) ..() -/datum/chemical_reaction/beff - name = "Beff" - id = "beff" - result = "beff" - required_reagents = list("hydrogenated_soybeanoil" = 2, "meatslurry" = 1, "plasma" = 1) - result_amount = 4 - mix_message = "The mixture solidifies, taking a crystalline appearance." - mix_sound = 'sound/effects/blobattack.ogg' - /datum/reagent/pepperoni name = "Pepperoni" id = "pepperoni" @@ -521,16 +818,6 @@ M.emote("burp") to_chat(M, "My goodness, that was tasty!") - -/datum/chemical_reaction/pepperoni - name = "Pepperoni" - id = "pepperoni" - result = "pepperoni" - required_reagents = list("beff" = 1, "saltpetre" = 1, "synthflesh" = 1) - result_amount = 2 - mix_message = "The beff and the synthflesh combine to form a smoky red log." - mix_sound = 'sound/effects/blobattack.ogg' - /datum/reagent/cholesterol name = "cholesterol" id = "cholesterol" diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm similarity index 75% rename from code/modules/reagents/newchem/medicine.dm rename to code/modules/reagents/chemistry/reagents/medicine.dm index a84ac83f385..2cbf4bdbd00 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -1,8 +1,146 @@ -#define SOLID 1 -#define LIQUID 2 -#define GAS 3 +/datum/reagent/hydrocodone + name = "Hydrocodone" + id = "hydrocodone" + description = "An extremely effective painkiller; may have long term abuse consequences." + reagent_state = LIQUID + color = "#C805DC" + metabolization_rate = 0.3 // Lasts 1.5 minutes for 15 units + shock_reduction = 200 + +/datum/reagent/hydrocodone/on_mob_life(mob/living/M) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.traumatic_shock < 100) + H.shock_stage = 0 + ..() + +/datum/reagent/sterilizine + name = "Sterilizine" + id = "sterilizine" + description = "Sterilizes wounds in preparation for surgery." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + + //makes you squeaky clean +/datum/reagent/sterilizine/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == TOUCH) + M.germ_level -= min(volume*20, M.germ_level) + +/datum/reagent/sterilizine/reaction_obj(obj/O, volume) + O.germ_level -= min(volume*20, O.germ_level) + +/datum/reagent/sterilizine/reaction_turf(turf/T, volume) + T.germ_level -= min(volume*20, T.germ_level) + +/datum/reagent/synaptizine + name = "Synaptizine" + id = "synaptizine" + description = "Synaptizine is used to treat neuroleptic shock. Can be used to help remove disabling symptoms such as paralysis." + reagent_state = LIQUID + color = "#FA46FA" + overdose_threshold = 40 + +/datum/reagent/synaptizine/on_mob_life(mob/living/M) + M.AdjustDrowsy(-5) + M.AdjustParalysis(-1) + M.AdjustStunned(-1) + M.AdjustWeakened(-1) + M.SetSleeping(0) + if(prob(50)) + M.adjustBrainLoss(-1.0) + ..() + +/datum/reagent/synaptizine/overdose_process(mob/living/M, severity) + var/effect = ..() + if(severity == 1) + if(effect <= 1) + M.visible_message("[M] suddenly and violently vomits!") + M.fakevomit(no_text = 1) + else if(effect <= 3) + M.emote(pick("groan","moan")) + if(effect <= 8) + M.adjustToxLoss(1) + else if(severity == 2) + if(effect <= 2) + M.visible_message("[M] suddenly and violently vomits!") + M.fakevomit(no_text = 1) + else if(effect <= 5) + M.visible_message("[M] staggers and drools, their eyes bloodshot!") + M.Dizzy(8) + M.Weaken(4) + if(effect <= 15) + M.adjustToxLoss(1) + +/datum/reagent/mitocholide + name = "Mitocholide" + id = "mitocholide" + description = "A specialized drug that stimulates the mitochondria of cells to encourage healing of internal organs." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +/datum/reagent/mitocholide/on_mob_life(mob/living/M) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + + //Mitocholide is hard enough to get, it's probably fair to make this all internal organs + for(var/name in H.internal_organs) + var/obj/item/organ/internal/I = H.get_int_organ(name) + if(I.damage > 0) + I.damage = max(I.damage-0.4, 0) + ..() + +/datum/reagent/mitocholide/reaction_obj(obj/O, volume) + if(istype(O, /obj/item/organ)) + var/obj/item/organ/Org = O + Org.rejuvenate() + +/datum/reagent/cryoxadone + name = "Cryoxadone" + id = "cryoxadone" + description = "A plasma mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 265K for it to metabolise correctly." + reagent_state = LIQUID + color = "#0000C8" // rgb: 200, 165, 220 + heart_rate_decrease = 1 + +/datum/reagent/cryoxadone/on_mob_life(mob/living/M) + if(M.bodytemperature < 265) + M.adjustCloneLoss(-4) + M.adjustOxyLoss(-10) + M.adjustToxLoss(-3) + M.adjustBruteLoss(-12) + M.adjustFireLoss(-12) + M.status_flags &= ~DISFIGURED + ..() + +/datum/reagent/rezadone + name = "Rezadone" + id = "rezadone" + description = "A powder derived from fish toxin, Rezadone can effectively treat genetic damage as well as restoring minor wounds. Overdose will cause intense nausea and minor toxin damage." + reagent_state = SOLID + color = "#669900" // rgb: 102, 153, 0 + overdose_threshold = 30 + +/datum/reagent/rezadone/on_mob_life(mob/living/M) + M.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that. + M.adjustCloneLoss(-1) //What? We just set cloneloss to 0. Why? Simple; this is so external organs properly unmutate. + M.adjustBruteLoss(-1) + M.adjustFireLoss(-1) + M.status_flags &= ~DISFIGURED + ..() + +/datum/reagent/rezadone/overdose_process(mob/living/M, severity) + M.adjustToxLoss(1) + M.Dizzy(5) + M.Jitter(5) + +/datum/reagent/spaceacillin + name = "Spaceacillin" + id = "spaceacillin" + description = "An all-purpose antibiotic agent extracted from space fungus." + reagent_state = LIQUID + color = "#0AB478" + metabolization_rate = 0.2 -#define REM REAGENTS_EFFECT_MULTIPLIER /datum/reagent/silver_sulfadiazine name = "Silver Sulfadiazine" @@ -108,49 +246,6 @@ M.reagents.remove_reagent(R.id,1) ..() -/datum/chemical_reaction/charcoal - name = "Charcoal" - id = "charcoal" - result = "charcoal" - required_reagents = list("ash" = 1, "sodiumchloride" = 1) - result_amount = 2 - mix_message = "The mixture yields a fine black powder." - min_temp = 380 - mix_sound = 'sound/goonstation/misc/fuse.ogg' - -/datum/chemical_reaction/silver_sulfadiazine - name = "Silver Sulfadiazine" - id = "silver_sulfadiazine" - result = "silver_sulfadiazine" - required_reagents = list("ammonia" = 1, "silver" = 1, "sulfur" = 1, "oxygen" = 1, "chlorine" = 1) - result_amount = 5 - mix_message = "A strong and cloying odor begins to bubble from the mixture." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - -/datum/chemical_reaction/salglu_solution - name = "Saline-Glucose Solution" - id = "salglu_solution" - result = "salglu_solution" - required_reagents = list("sodiumchloride" = 1, "water" = 1, "sugar" = 1) - result_amount = 3 - -/datum/chemical_reaction/synthflesh - name = "Synthflesh" - id = "synthflesh" - result = "synthflesh" - required_reagents = list("blood" = 1, "carbon" = 1, "styptic_powder" = 1) - result_amount = 3 - mix_message = "The mixture knits together into a fibrous, bloody mass." - mix_sound = 'sound/effects/blobattack.ogg' - -/datum/chemical_reaction/styptic_powder - name = "Styptic Powder" - id = "styptic_powder" - result = "styptic_powder" - required_reagents = list("aluminum" = 1, "hydrogen" = 1, "oxygen" = 1, "sacid" = 1) - result_amount = 4 - mix_message = "The solution yields an astringent powder." - /datum/reagent/omnizine name = "Omnizine" id = "omnizine" @@ -222,15 +317,6 @@ M.fakevomit() ..() -/datum/chemical_reaction/calomel - name = "Calomel" - id = "calomel" - result = "calomel" - required_reagents = list("mercury" = 1, "chlorine" = 1) - result_amount = 2 - min_temp = 374 - mix_message = "Stinging vapors rise from the solution." - /datum/reagent/potass_iodide name = "Potassium Iodide" id = "potass_iodide" @@ -243,14 +329,6 @@ M.radiation = max(0, M.radiation-1) ..() -/datum/chemical_reaction/potass_iodide - name = "Potassium Iodide" - id = "potass_iodide" - result = "potass_iodide" - required_reagents = list("potassium" = 1, "iodine" = 1) - result_amount = 2 - mix_message = "The solution settles calmly and emits gentle fumes." - /datum/reagent/pen_acid name = "Pentetic Acid" id = "pen_acid" @@ -269,15 +347,6 @@ M.adjustBruteLoss(1*REM) M.adjustFireLoss(1*REM) ..() - return - -/datum/chemical_reaction/pen_acid - name = "Pentetic Acid" - id = "pen_acid" - result = "pen_acid" - required_reagents = list("fuel" = 1, "chlorine" = 1, "ammonia" = 1, "formaldehyde" = 1, "sodium" = 1, "cyanide" = 1) - result_amount = 6 - mix_message = "The substance becomes very still, emitting a curious haze." /datum/reagent/sal_acid name = "Salicylic Acid" @@ -298,15 +367,6 @@ H.shock_stage = 0 ..() -/datum/chemical_reaction/sal_acid - name = "Salicyclic Acid" - id = "sal_acid" - result = "sal_acid" - required_reagents = list("sodium" = 1, "phenol" = 1, "carbon" = 1, "oxygen" = 1, "sacid" = 1) - result_amount = 5 - mix_message = "The mixture crystallizes." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - /datum/reagent/salbutamol name = "Salbutamol" id = "salbutamol" @@ -320,15 +380,6 @@ M.AdjustLoseBreath(-4) ..() -/datum/chemical_reaction/salbutamol - name = "Salbutamol" - id = "salbutamol" - result = "salbutamol" - required_reagents = list("sal_acid" = 1, "lithium" = 1, "aluminum" = 1, "bromine" = 1, "ammonia" = 1) - result_amount = 5 - mix_message = "The solution bubbles freely, creating a head of bluish foam." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - /datum/reagent/perfluorodecalin name = "Perfluorodecalin" id = "perfluorodecalin" @@ -348,16 +399,6 @@ M.adjustFireLoss(-1*REM) ..() -/datum/chemical_reaction/perfluorodecalin - name = "Perfluorodecalin" - id = "perfluorodecalin" - result = "perfluorodecalin" - required_reagents = list("hydrogen" = 1, "fluorine" = 1, "oil" = 1) - result_amount = 3 - min_temp = 370 - mix_message = "The mixture rapidly turns into a dense pink liquid." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - /datum/reagent/ephedrine name = "Ephedrine" id = "ephedrine" @@ -404,14 +445,6 @@ if(effect <= 15) M.emote("collapse") -/datum/chemical_reaction/ephedrine - name = "Ephedrine" - id = "ephedrine" - result = "ephedrine" - required_reagents = list("sugar" = 1, "oil" = 1, "hydrogen" = 1, "diethylamine" = 1) - result_amount = 4 - mix_message = "The solution fizzes and gives off toxic fumes." - /datum/reagent/diphenhydramine name = "Diphenhydramine" id = "diphenhydramine" @@ -432,15 +465,6 @@ M.visible_message("[M] looks a bit dazed.") ..() -/datum/chemical_reaction/diphenhydramine - name = "Diphenhydramine" - id = "diphenhydramine" - result = "diphenhydramine" - required_reagents = list("oil" = 1, "carbon" = 1, "bromine" = 1, "diethylamine" = 1, "ethanol" = 1) - result_amount = 4 - mix_message = "The mixture fizzes gently." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - /datum/reagent/morphine name = "Morphine" id = "morphine" @@ -487,14 +511,6 @@ M.SetEarDeaf(0) ..() -/datum/chemical_reaction/oculine - name = "Oculine" - id = "oculine" - result = "oculine" - required_reagents = list("atropine" = 1, "spaceacillin" = 1, "salglu_solution" = 1) - result_amount = 3 - mix_message = "The mixture settles, becoming a milky white." - /datum/reagent/oculine name = "Oculine" id = "oculine" @@ -530,14 +546,6 @@ M.reagents.remove_reagent("sarin", 20) ..() -/datum/chemical_reaction/atropine - name = "Atropine" - id = "atropine" - result = "atropine" - required_reagents = list("ethanol" = 1, "acetone" = 1, "diethylamine" = 1, "phenol" = 1, "sacid" = 1) - result_amount = 5 - mix_message = "A horrid smell like something died drifts from the mixture." - /datum/reagent/epinephrine name = "Epinephrine" id = "epinephrine" @@ -590,15 +598,6 @@ if(effect <= 15) M.emote("collapse") -/datum/chemical_reaction/epinephrine - name = "Epinephrine" - id = "epinephrine" - result = "epinephrine" - required_reagents = list("phenol" = 1, "acetone" = 1, "diethylamine" = 1, "oxygen" = 1, "chlorine" = 1, "hydrogen" = 1) - result_amount = 6 - mix_message = "Tiny white crystals precipitate out of the solution." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - /datum/reagent/strange_reagent name = "Strange Reagent" id = "strange_reagent" @@ -645,14 +644,6 @@ M.adjustToxLoss(2*REM) ..() -/datum/chemical_reaction/strange_reagent - name = "Strange Reagent" - id = "strange_reagent" - result = "strange_reagent" - required_reagents = list("omnizine" = 1, "holywater" = 1, "mutagen" = 1) - result_amount = 3 - mix_message = "The substance begins moving on its own somehow." - /datum/reagent/life name = "Life" id = "life" @@ -661,29 +652,10 @@ color = "#C8A5DC" metabolization_rate = 0.2 -/datum/chemical_reaction/life - name = "Life" - id = "life" - result = null - required_reagents = list("strange_reagent" = 1, "synthflesh" = 1, "blood" = 1) - result_amount = 3 - min_temp = 374 - -/datum/chemical_reaction/life/on_reaction(datum/reagents/holder, created_volume) - chemical_mob_spawn(holder, 1, "Life") - /datum/reagent/mannitol/on_mob_life(mob/living/M) M.adjustBrainLoss(-3) ..() -/datum/chemical_reaction/mannitol - name = "Mannitol" - id = "mannitol" - result = "mannitol" - required_reagents = list("sugar" = 1, "hydrogen" = 1, "water" = 1) - result_amount = 3 - mix_message = "The mixture bubbles slowly, making a slightly sweet odor." - /datum/reagent/mannitol name = "Mannitol" id = "mannitol" @@ -708,15 +680,6 @@ H.update_mutations() ..() -/datum/chemical_reaction/mutadone - name = "Mutadone" - id = "mutadone" - result = "mutadone" - required_reagents = list("mutagen" = 1, "acetone" = 1, "bromine" = 1) - result_amount = 3 - mix_message = "A foul astringent liquid emerges from the reaction." - - /datum/reagent/mutadone name = "Mutadone" id = "mutadone" @@ -737,15 +700,6 @@ M.adjustToxLoss(-2.0) ..() -/datum/chemical_reaction/antihol - name = "antihol" - id = "antihol" - result = "antihol" - required_reagents = list("ethanol" = 1, "charcoal" = 1) - result_amount = 2 - mix_message = "A minty and refreshing smell drifts from the effervescent mixture." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - /datum/reagent/stimulants name = "Stimulants" id = "stimulants" @@ -775,7 +729,7 @@ M.Stun(3) ..() -/datum/reagent/stimulants/reagent_deleted(mob/living/M) +/datum/reagent/stimulants/on_mob_delete(mob/living/M) M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE ..() @@ -800,7 +754,7 @@ M.adjustStaminaLoss(-5*REM) ..() -/datum/reagent/medicine/stimulative_agent/reagent_deleted(mob/living/M) +/datum/reagent/medicine/stimulative_agent/on_mob_delete(mob/living/M) M.status_flags &= ~GOTTAGOFAST ..() @@ -828,14 +782,6 @@ description = "This strange liquid seems to have no bubbles on the surface." color = "#14AA46" -/datum/chemical_reaction/Simethicone - name = "Simethicone" - id = "simethicone" - result = "simethicone" - required_reagents = list("hydrogen" = 1, "chlorine" = 1, "silicon" = 1, "oxygen" = 1) - result_amount = 4 - - /datum/reagent/teporone name = "Teporone" id = "teporone" @@ -852,15 +798,6 @@ M.bodytemperature = min(310, M.bodytemperature + (40 * TEMPERATURE_DAMAGE_COEFFICIENT)) ..() -/datum/chemical_reaction/teporone - name = "Teporone" - id = "teporone" - result = "teporone" - required_reagents = list("acetone" = 1, "silicon" = 1, "plasma" = 1) - result_amount = 2 - mix_message = "The mixture turns an odd lavender color." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - /datum/reagent/haloperidol name = "Haloperidol" id = "haloperidol" @@ -890,15 +827,6 @@ M.adjustBrainLoss(1) ..() -/datum/chemical_reaction/haloperidol - name = "Haloperidol" - id = "haloperidol" - result = "haloperidol" - required_reagents = list("chlorine" = 1, "fluorine" = 1, "aluminum" = 1, "potass_iodide" = 1, "oil" = 1) - result_amount = 4 - mix_message = "The chemicals mix into an odd pink slush." - - /datum/reagent/ether name = "Ether" id = "ether" @@ -919,14 +847,6 @@ M.Drowsy(20) ..() -/datum/chemical_reaction/ether - name = "Ether" - id = "ether" - result = "ether" - required_reagents = list("sacid" = 1, "ethanol" = 1, "oxygen" = 1) - result_amount = 1 - mix_message = "The mixture yields a pungent odor, which makes you tired." - ////////////////////////////// // Synth-Meds // ////////////////////////////// @@ -940,13 +860,6 @@ color = "#CC7A00" process_flags = SYNTHETIC -/datum/chemical_reaction/degreaser - name = "Degreaser" - id = "degreaser" - result = "degreaser" - required_reagents = list("oil" = 1, "sterilizine" = 1) - result_amount = 2 - /datum/reagent/degreaser/reaction_turf(turf/simulated/T, volume) if(volume >= 1 && istype(T)) if(T.wet) @@ -980,16 +893,6 @@ M.adjustBrainLoss(-3) ..() -/datum/chemical_reaction/liquid_solder - name = "Liquid Solder" - id = "liquid_solder" - result = "liquid_solder" - required_reagents = list("ethanol" = 1, "copper" = 1, "silver" = 1) - result_amount = 3 - min_temp = 370 - mix_message = "The solution gently swirls with a metallic sheen." - - /datum/reagent/medicine/syndicate_nanites //Used exclusively by Syndicate medical cyborgs name = "Restorative Nanites" id = "syndicate_nanites" @@ -1055,4 +958,4 @@ else if(effect <= 8) M.visible_message("[M] stumbles and staggers.") M.Dizzy(5) - M.Weaken(3) + M.Weaken(3) \ No newline at end of file diff --git a/code/modules/reagents/newchem/other.dm b/code/modules/reagents/chemistry/reagents/misc.dm similarity index 61% rename from code/modules/reagents/newchem/other.dm rename to code/modules/reagents/chemistry/reagents/misc.dm index 2ff4a18c3d0..2b0b51ad89e 100644 --- a/code/modules/reagents/newchem/other.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -1,7 +1,192 @@ -#define SOLID 1 -#define LIQUID 2 -#define GAS 3 -#define REM REAGENTS_EFFECT_MULTIPLIER +/*/datum/reagent/silicate + name = "Silicate" + id = "silicate" + description = "A compound that can be used to reinforce glass." + reagent_state = LIQUID + color = "#C7FFFF" // rgb: 199, 255, 255 + +/datum/reagent/silicate/reaction_obj(obj/O, volume) + if(istype(O, /obj/structure/window)) + if(O:silicate <= 200) + + O:silicate += volume + O:health += volume * 3 + + if(!O:silicateIcon) + var/icon/I = icon(O.icon,O.icon_state,O.dir) + + var/r = (volume / 100) + 1 + var/g = (volume / 70) + 1 + var/b = (volume / 50) + 1 + I.SetIntensity(r,g,b) + O.icon = I + O:silicateIcon = I + else + var/icon/I = O:silicateIcon + + var/r = (volume / 100) + 1 + var/g = (volume / 70) + 1 + var/b = (volume / 50) + 1 + I.SetIntensity(r,g,b) + O.icon = I + O:silicateIcon = I */ + + +/datum/reagent/oxygen + name = "Oxygen" + id = "oxygen" + description = "A colorless, odorless gas." + reagent_state = GAS + color = "#808080" // rgb: 128, 128, 128 + + +/datum/reagent/nitrogen + name = "Nitrogen" + id = "nitrogen" + description = "A colorless, odorless, tasteless gas." + reagent_state = GAS + color = "#808080" // rgb: 128, 128, 128 + + +/datum/reagent/hydrogen + name = "Hydrogen" + id = "hydrogen" + description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas." + reagent_state = GAS + color = "#808080" // rgb: 128, 128, 128 + + +/datum/reagent/potassium + name = "Potassium" + id = "potassium" + description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water." + reagent_state = SOLID + color = "#A0A0A0" // rgb: 160, 160, 160 + + +/datum/reagent/sulfur + name = "Sulfur" + id = "sulfur" + description = "A chemical element." + reagent_state = SOLID + color = "#BF8C00" // rgb: 191, 140, 0 + + +/datum/reagent/sodium + name = "Sodium" + id = "sodium" + description = "A chemical element." + reagent_state = SOLID + color = "#808080" // rgb: 128, 128, 128 + + +/datum/reagent/phosphorus + name = "Phosphorus" + id = "phosphorus" + description = "A chemical element." + reagent_state = SOLID + color = "#832828" // rgb: 131, 40, 40 + + +/datum/reagent/carbon + name = "Carbon" + id = "carbon" + description = "A chemical element." + reagent_state = SOLID + color = "#1C1300" // rgb: 30, 20, 0 + +/datum/reagent/carbon/reaction_turf(turf/T, volume) + if(!istype(T, /turf/space) && !(locate(/obj/effect/decal/cleanable/dirt) in T)) // Only add one dirt per turf. Was causing people to crash. + new /obj/effect/decal/cleanable/dirt(T) + +/datum/reagent/gold + name = "Gold" + id = "gold" + description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known." + reagent_state = SOLID + color = "#F7C430" // rgb: 247, 196, 48 + + +/datum/reagent/silver + name = "Silver" + id = "silver" + description = "A lustrous metallic element regarded as one of the precious metals." + reagent_state = SOLID + color = "#D0D0D0" // rgb: 208, 208, 208 + + +/datum/reagent/aluminum + name = "Aluminum" + id = "aluminum" + description = "A silvery white and ductile member of the boron group of chemical elements." + reagent_state = SOLID + color = "#A8A8A8" // rgb: 168, 168, 168 + + +/datum/reagent/silicon + name = "Silicon" + id = "silicon" + description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon." + reagent_state = SOLID + color = "#A8A8A8" // rgb: 168, 168, 168 + + +/datum/reagent/copper + name = "Copper" + id = "copper" + description = "A highly ductile metal." + color = "#6E3B08" // rgb: 110, 59, 8 + + +/datum/reagent/iron + name = "Iron" + id = "iron" + description = "Pure iron is a metal." + reagent_state = SOLID + color = "#C8A5DC" // rgb: 200, 165, 220 + +/datum/reagent/iron/on_mob_life(mob/living/M) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(!H.species.exotic_blood && !(H.species.flags & NO_BLOOD)) + H.vessel.add_reagent("blood", 0.8) + ..() + + +//foam +/datum/reagent/fluorosurfactant + name = "Fluorosurfactant" + id = "fluorosurfactant" + description = "A perfluoronated sulfonic acid that forms a foam when mixed with water." + reagent_state = LIQUID + color = "#9E6B38" // rgb: 158, 107, 56 + +// metal foaming agent +// this is lithium hydride. Add other recipies (e.g. LiH + H2O -> LiOH + H2) eventually +/datum/reagent/ammonia + name = "Ammonia" + id = "ammonia" + description = "A caustic substance commonly used in fertilizer or household cleaners." + reagent_state = GAS + color = "#404030" // rgb: 64, 64, 48 + +/datum/reagent/diethylamine + name = "Diethylamine" + id = "diethylamine" + description = "A secondary amine, useful as a plant nutrient and as building block for other compounds." + reagent_state = LIQUID + color = "#322D00" + + +// Ported from Bay as part of the Botany Update +// Allows you to make planks from any plant that has this reagent in it. +// Also vines with this reagent are considered dense. +/datum/reagent/woodpulp + name = "Wood Pulp" + id = "woodpulp" + description = "A mass of wood fibers." + reagent_state = LIQUID + color = "#B97A57" var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700") @@ -64,50 +249,6 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 M.adjustToxLoss(1.5) ..() -/datum/chemical_reaction/acetone - name = "acetone" - id = "acetone" - result = "acetone" - required_reagents = list("oil" = 1, "fuel" = 1, "oxygen" = 1) - result_amount = 3 - mix_message = "The smell of paint thinner assaults you as the solution bubbles." - -/datum/chemical_reaction/carpet - name = "carpet" - id = "carpet" - result = "carpet" - required_reagents = list("fungus" = 1, "blood" = 1) - result_amount = 2 - mix_message = "The substance turns thick and stiff, yet soft." - - -/datum/chemical_reaction/oil - name = "Oil" - id = "oil" - result = "oil" - required_reagents = list("fuel" = 1, "carbon" = 1, "hydrogen" = 1) - result_amount = 3 - mix_message = "An iridescent black chemical forms in the container." - -/datum/chemical_reaction/phenol - name = "phenol" - id = "phenol" - result = "phenol" - required_reagents = list("water" = 1, "chlorine" = 1, "oil" = 1) - result_amount = 3 - mix_message = "The mixture bubbles and gives off an unpleasant medicinal odor." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - -/datum/chemical_reaction/ash - name = "Ash" - id = "ash" - result = "ash" - required_reagents = list("oil" = 1) - result_amount = 0.5 - min_temp = 480 - mix_sound = null - no_message = 1 - /datum/reagent/colorful_reagent name = "Colorful Reagent" id = "colorful_reagent" @@ -115,14 +256,6 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 reagent_state = LIQUID color = "#FFFFFF" -/datum/chemical_reaction/colorful_reagent - name = "colorful_reagent" - id = "colorful_reagent" - result = "colorful_reagent" - required_reagents = list("plasma" = 1, "radium" = 1, "space_drugs" = 1, "cryoxadone" = 1, "triple_citrus" = 1, "stabilizing_agent" = 1) - result_amount = 6 - mix_message = "The substance flashes multiple colors and emits the smell of a pocket protector." - /datum/reagent/colorful_reagent/reaction_mob(mob/living/simple_animal/M, method=TOUCH, volume) if(isanimal(M)) M.color = pick(random_color_list) @@ -138,14 +271,6 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 T.color = pick(random_color_list) ..() -/datum/chemical_reaction/corgium - name = "corgium" - id = "corgium" - result = null - required_reagents = list("nutriment" = 1, "colorful_reagent" = 1, "strange_reagent" = 1, "blood" = 1) - result_amount = 3 - min_temp = 374 - /datum/reagent/corgium name = "Corgium" id = "corgium" @@ -153,25 +278,6 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 reagent_state = LIQUID color = "#F9A635" -/datum/chemical_reaction/corgium/on_reaction(datum/reagents/holder, created_volume) - var/location = get_turf(holder.my_atom) - new /mob/living/simple_animal/pet/corgi(location) - ..() - -/datum/chemical_reaction/flaptonium - name = "Flaptonium" - id = "flaptonium" - result = null - required_reagents = list("egg" = 1, "colorful_reagent" = 1, "chicken_soup" = 1, "strange_reagent" = 1, "blood" = 1) - result_amount = 5 - min_temp = 374 - mix_message = "The substance turns an airy sky-blue and foams up into a new shape." - -/datum/chemical_reaction/flaptonium/on_reaction(datum/reagents/holder, created_volume) - var/location = get_turf(holder.my_atom) - new /mob/living/simple_animal/parrot(location) - ..() - /datum/reagent/hair_dye name = "Quantum Hair Dye" id = "hair_dye" @@ -179,13 +285,6 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 reagent_state = LIQUID color = "#960096" -/datum/chemical_reaction/hair_dye - name = "hair_dye" - id = "hair_dye" - result = "hair_dye" - required_reagents = list("colorful_reagent" = 1, "hairgrownium" = 1) - result_amount = 2 - /datum/reagent/hair_dye/reaction_mob(mob/living/M, volume) if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -208,14 +307,6 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 color = "#5DDA5D" penetrates_skin = 1 -/datum/chemical_reaction/hairgrownium - name = "hairgrownium" - id = "hairgrownium" - result = "hairgrownium" - required_reagents = list("carpet" = 1, "synthflesh" = 1, "ephedrine" = 1) - result_amount = 3 - mix_message = "The liquid becomes slightly hairy." - /datum/reagent/hairgrownium/reaction_mob(mob/living/M, volume) if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -234,15 +325,6 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 color = "#5DD95D" penetrates_skin = 1 - -/datum/chemical_reaction/super_hairgrownium - name = "Super Hairgrownium" - id = "super_hairgrownium" - result = "super_hairgrownium" - required_reagents = list("iron" = 1, "methamphetamine" = 1, "hairgrownium" = 1) - result_amount = 3 - mix_message = "The liquid becomes amazingly furry and smells peculiar." - /datum/reagent/super_hairgrownium/reaction_mob(mob/living/M, volume) if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -275,14 +357,6 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 reagent_state = GAS color = "#D06E27" -/datum/chemical_reaction/fartonium - name = "Fartonium" - id = "fartonium" - result = "fartonium" - required_reagents = list("fake_cheese" = 1, "beans" = 1, "????" = 1, "egg" = 1) - result_amount = 2 - mix_message = "The substance makes a little 'toot' noise and starts to smell pretty bad." - /datum/reagent/fartonium/on_mob_life(mob/living/M) if(prob(66)) M.emote("fart") @@ -299,49 +373,6 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 M.adjustBruteLoss(4) ..() -/datum/chemical_reaction/soapification - name = "Soapification" - id = "soapification" - result = null - required_reagents = list("liquidgibs" = 10, "lye" = 10) // requires two scooped gib tiles - min_temp = 374 - result_amount = 1 - - -/datum/chemical_reaction/soapification/on_reaction(datum/reagents/holder, created_volume) - var/location = get_turf(holder.my_atom) - new /obj/item/weapon/soap/homemade(location) - -/datum/chemical_reaction/candlefication - name = "Candlefication" - id = "candlefication" - result = null - required_reagents = list("liquidgibs" = 5, "oxygen" = 5) // - min_temp = 374 - result_amount = 1 - -/datum/chemical_reaction/candlefication/on_reaction(datum/reagents/holder, created_volume) - var/location = get_turf(holder.my_atom) - new /obj/item/candle(location) - -/datum/chemical_reaction/meatification - name = "Meatification" - id = "meatification" - result = null - required_reagents = list("liquidgibs" = 10, "nutriment" = 10, "carbon" = 10) - result_amount = 1 - -/datum/chemical_reaction/meatification/on_reaction(datum/reagents/holder, created_volume) - var/location = get_turf(holder.my_atom) - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/meatproduct(location) - -/datum/chemical_reaction/lye - name = "lye" - id = "lye" - result = "lye" - required_reagents = list("sodium" = 1, "hydrogen" = 1, "oxygen" = 1) - result_amount = 3 - /datum/reagent/hugs name = "Pure hugs" id = "hugs" @@ -378,14 +409,6 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 break ..() -/datum/chemical_reaction/love - name = "pure love" - id = "love" - result = "love" - required_reagents = list("hugs" = 1, "chocolate" = 1) - result_amount = 2 - mix_message = "The substance gives off a lovely scent!" - ///Alchemical Reagents /datum/reagent/eyenewt @@ -432,11 +455,4 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 /datum/reagent/royal_bee_jelly/on_mob_life(mob/living/M) if(prob(2)) M.say(pick("Bzzz...","BZZ BZZ","Bzzzzzzzzzzz...")) - ..() - -/datum/chemical_reaction/royal_bee_jelly - name = "royal bee jelly" - id = "royal_bee_jelly" - result = "royal_bee_jelly" - required_reagents = list("mutagen" = 10, "honey" = 40) - result_amount = 5 \ No newline at end of file + ..() \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_paint.dm b/code/modules/reagents/chemistry/reagents/paint.dm similarity index 100% rename from code/modules/reagents/oldchem/reagents/reagents_paint.dm rename to code/modules/reagents/chemistry/reagents/paint.dm diff --git a/code/modules/reagents/newchem/paradise_pop.dm b/code/modules/reagents/chemistry/reagents/paradise_pop.dm similarity index 100% rename from code/modules/reagents/newchem/paradise_pop.dm rename to code/modules/reagents/chemistry/reagents/paradise_pop.dm diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm new file mode 100644 index 00000000000..73b20340962 --- /dev/null +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm @@ -0,0 +1,325 @@ +/datum/reagent/fuel + name = "Welding fuel" + id = "fuel" + description = "A highly flammable blend of basic hydrocarbons, mostly Acetylene. Useful for both welding and organic chemistry, and can be fortified into a heavier oil." + reagent_state = LIQUID + color = "#060606" + +/datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with welding fuel to make them easy to ignite! + if(method == TOUCH) + M.adjust_fire_stacks(volume / 10) + return + ..() + +/datum/reagent/fuel/unholywater //if you somehow managed to extract this from someone, dont splash it on yourself and have a smoke + name = "Unholy Water" + id = "unholywater" + description = "Something that shouldn't exist on this plane of existance." + process_flags = ORGANIC | SYNTHETIC //ethereal means everything processes it. + metabolization_rate = 1 + +/datum/reagent/fuel/unholywater/on_mob_life(mob/living/M) + M.adjustBrainLoss(3) + if(iscultist(M)) + M.status_flags |= GOTTAGOFAST + M.AdjustDrowsy(-5) + M.AdjustParalysis(-2) + M.AdjustStunned(-2) + M.AdjustWeakened(-2) + else + M.adjustToxLoss(2) + M.adjustFireLoss(2) + M.adjustOxyLoss(2) + M.adjustBruteLoss(2) + ..() + +/datum/reagent/fuel/unholywater/on_mob_delete(mob/living/M) + M.status_flags &= ~GOTTAGOFAST + ..() + +/datum/reagent/plasma + name = "Plasma" + id = "plasma" + description = "The liquid phase of an unusual extraterrestrial compound." + reagent_state = LIQUID + color = "#7A2B94" + +/datum/reagent/plasma/on_mob_life(mob/living/M) + M.adjustToxLoss(1*REM) + if(holder.has_reagent("epinephrine")) + holder.remove_reagent("epinephrine", 2) + if(iscarbon(M)) + var/mob/living/carbon/C = M + C.adjustPlasma(10) + ..() + +/datum/reagent/plasma/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with plasma is stronger than fuel! + if(method == TOUCH) + M.adjust_fire_stacks(volume / 5) + ..() + + +/datum/reagent/thermite + name = "Thermite" + id = "thermite" + description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls." + reagent_state = SOLID + color = "#673910" // rgb: 103, 57, 16 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/thermite/reaction_turf(turf/simulated/wall/W, volume) + if(volume >= 5 && istype(W)) + W.thermite = 1 + W.overlays.Cut() + W.overlays = image('icons/effects/effects.dmi',icon_state = "thermite") + +/datum/reagent/glycerol + name = "Glycerol" + id = "glycerol" + description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity." + reagent_state = LIQUID + color = "#808080" // rgb: 128, 128, 128 + +/datum/reagent/stabilizing_agent + name = "Stabilizing Agent" + id = "stabilizing_agent" + description = "A chemical that stabilises normally volatile compounds, preventing them from reacting immediately." + reagent_state = LIQUID + color = "#FFFF00" + +/datum/reagent/clf3 + name = "Chlorine Trifluoride" + id = "clf3" + description = "An extremely volatile substance, handle with the utmost care." + reagent_state = LIQUID + color = "#FF0000" + metabolization_rate = 4 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/clf3/on_mob_life(mob/living/M) + M.adjust_fire_stacks(2) + var/burndmg = max(0.3*M.fire_stacks, 0.3) + M.adjustFireLoss(burndmg) + ..() + +/datum/reagent/clf3/reaction_turf(turf/simulated/T, volume) + if(istype(T, /turf/simulated/floor/plating)) + var/turf/simulated/floor/plating/F = T + if(prob(1)) + F.ChangeTurf(/turf/space) + if(istype(T, /turf/simulated/floor/)) + var/turf/simulated/floor/F = T + if(prob(volume/10)) + F.make_plating() + if(istype(F, /turf/simulated/floor/)) + new /obj/effect/hotspot(F) + if(istype(T, /turf/simulated/wall/)) + var/turf/simulated/wall/W = T + if(prob(volume/10)) + W.ChangeTurf(/turf/simulated/floor) + if(istype(T, /turf/simulated/shuttle/)) + new /obj/effect/hotspot(T) + +/datum/reagent/clf3/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == TOUCH) + M.adjust_fire_stacks(min(volume/5, 10)) + M.IgniteMob() + M.bodytemperature += 30 + +/datum/reagent/sorium + name = "Sorium" + id = "sorium" + description = "Sends everything flying from the detonation point." + reagent_state = LIQUID + color = "#FFA500" + +/datum/reagent/liquid_dark_matter + name = "Liquid Dark Matter" + id = "liquid_dark_matter" + description = "Sucks everything into the detonation point." + reagent_state = LIQUID + color = "#800080" + +/datum/reagent/blackpowder + name = "Black Powder" + id = "blackpowder" + description = "Explodes. Violently." + reagent_state = LIQUID + color = "#000000" + metabolization_rate = 0.05 + penetrates_skin = 1 + +/datum/reagent/blackpowder/reaction_turf(turf/T, volume) //oh shit + if(volume >= 5 && !istype(T, /turf/space)) + if(!locate(/obj/effect/decal/cleanable/dirt/blackpowder) in T) //let's not have hundreds of decals of black powder on the same turf + new /obj/effect/decal/cleanable/dirt/blackpowder(T) + +/* +/datum/reagent/blackpowder/on_ex_act() + var/location = get_turf(holder.my_atom) + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread + s.set_up(2, 1, location) + s.start() + sleep(rand(10,15)) + blackpowder_detonate(holder, volume) + holder.remove_reagent("blackpowder", volume) + return */ + +/datum/reagent/flash_powder + name = "Flash Powder" + id = "flash_powder" + description = "Makes a very bright flash." + reagent_state = LIQUID + color = "#FFFF00" + +/datum/reagent/smoke_powder + name = "Smoke Powder" + id = "smoke_powder" + description = "Makes a large cloud of smoke that can carry reagents." + reagent_state = LIQUID + color = "#808080" + +/datum/reagent/sonic_powder + name = "Sonic Powder" + id = "sonic_powder" + description = "Makes a deafening noise." + reagent_state = LIQUID + color = "#0000FF" + +/datum/reagent/phlogiston + name = "Phlogiston" + id = "phlogiston" + description = "Catches you on fire and makes you ignite." + reagent_state = LIQUID + color = "#FF9999" + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/phlogiston/reaction_mob(mob/living/M, method=TOUCH, volume) + M.IgniteMob() + ..() + +/datum/reagent/phlogiston/on_mob_life(mob/living/M) + M.adjust_fire_stacks(1) + var/burndmg = max(0.3*M.fire_stacks, 0.3) + M.adjustFireLoss(burndmg) + ..() + +/datum/reagent/napalm + name = "Napalm" + id = "napalm" + description = "Very flammable." + reagent_state = LIQUID + color = "#FF9999" + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/napalm/on_mob_life(mob/living/M) + M.adjust_fire_stacks(1) + ..() + +/datum/reagent/napalm/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == TOUCH) + M.adjust_fire_stacks(min(volume/4, 20)) + +/datum/reagent/cryostylane + name = "Cryostylane" + id = "cryostylane" + description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Cryostylane slowly cools all other reagents in the mob down to 0K." + color = "#B2B2FF" // rgb: 139, 166, 233 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/cryostylane/on_mob_life(mob/living/M) //TODO: code freezing into an ice cube + if(M.reagents.has_reagent("oxygen")) + M.reagents.remove_reagent("oxygen", 1) + M.bodytemperature -= 30 + ..() + +/datum/reagent/cryostylane/on_tick() + if(holder.has_reagent("oxygen")) + holder.remove_reagent("oxygen", 1) + holder.chem_temp -= 10 + holder.handle_reactions() + ..() + +/datum/reagent/cryostylane/reaction_turf(turf/T, volume) + if(volume >= 5) + for(var/mob/living/carbon/slime/M in T) + M.adjustToxLoss(rand(15,30)) + +/datum/reagent/pyrosium + name = "Pyrosium" + id = "pyrosium" + description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Pyrosium slowly cools all other reagents in the mob down to 0K." + color = "#B20000" // rgb: 139, 166, 233 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/pyrosium/on_mob_life(mob/living/M) + if(M.reagents.has_reagent("oxygen")) + M.reagents.remove_reagent("oxygen", 1) + M.bodytemperature += 30 + ..() + +/datum/reagent/pyrosium/on_tick() + if(holder.has_reagent("oxygen")) + holder.remove_reagent("oxygen", 1) + holder.chem_temp += 10 + holder.handle_reactions() + ..() + +/datum/reagent/firefighting_foam + name = "Firefighting foam" + id = "firefighting_foam" + description = "Carbon Tetrachloride is a foam used for fire suppression." + reagent_state = LIQUID + color = "#A0A090" + var/cooling_temperature = 3 // more effective than water + +/datum/reagent/firefighting_foam/reaction_mob(mob/living/M, method=TOUCH, volume) +// Put out fire + if(method == TOUCH) + M.adjust_fire_stacks(-(volume / 5)) // more effective than water + M.ExtinguishMob() + +/datum/reagent/firefighting_foam/reaction_obj(obj/O, volume) + if(istype(O)) + O.extinguish() + +/datum/reagent/firefighting_foam/reaction_turf(turf/simulated/T, volume) + if(!istype(T)) + return + var/CT = cooling_temperature + new /obj/effect/decal/cleanable/flour/foam(T) //foam mess; clears up quickly. + var/hotspot = (locate(/obj/effect/hotspot) in T) + if(hotspot) + var/datum/gas_mixture/lowertemp = T.remove_air(T.air.total_moles()) + lowertemp.temperature = max(min(lowertemp.temperature-(CT*1000), lowertemp.temperature / CT), 0) + lowertemp.react() + T.assume_air(lowertemp) + qdel(hotspot) + +/datum/reagent/plasma_dust + name = "Plasma Dust" + id = "plasma_dust" + description = "A fine dust of plasma. This chemical has unusual mutagenic properties for viruses and slimes alike." + color = "#500064" // rgb: 80, 0, 100 + +/datum/reagent/plasma_dust/on_mob_life(mob/living/M) + M.adjustToxLoss(3) + if(iscarbon(M)) + var/mob/living/carbon/C = M + C.adjustPlasma(20) + ..() + +/datum/reagent/plasma_dust/reaction_obj(obj/O, volume) + if((!O) || (!volume)) + return 0 + O.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C, volume) + +/datum/reagent/plasma_dust/reaction_turf(turf/simulated/T, volume) + if(istype(T)) + T.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C, volume) + +/datum/reagent/plasma_dust/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with plasma dust is stronger than fuel! + if(method == TOUCH) + M.adjust_fire_stacks(volume / 5) + return + ..() diff --git a/code/modules/reagents/newchem/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm similarity index 63% rename from code/modules/reagents/newchem/toxins.dm rename to code/modules/reagents/chemistry/reagents/toxins.dm index d8e8205b1f7..4585e8df667 100644 --- a/code/modules/reagents/newchem/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -1,8 +1,417 @@ -#define SOLID 1 -#define LIQUID 2 -#define GAS 3 +/datum/reagent/toxin + name = "Toxin" + id = "toxin" + description = "A Toxic chemical." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 -#define REM REAGENTS_EFFECT_MULTIPLIER +/datum/reagent/toxin/on_mob_life(mob/living/M) + M.adjustToxLoss(2) + ..() + +/datum/reagent/spider_venom + name = "Spider venom" + id = "spidertoxin" + description = "A toxic venom injected by spacefaring arachnids." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + +/datum/reagent/spider_venom/on_mob_life(mob/living/M) + M.adjustToxLoss(1.5) + ..() + +/datum/reagent/plasticide + name = "Plasticide" + id = "plasticide" + description = "Liquid plastic, do not eat." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + +/datum/reagent/plasticide/on_mob_life(mob/living/M) + M.adjustToxLoss(1.5) + ..() + + +/datum/reagent/minttoxin + name = "Mint Toxin" + id = "minttoxin" + description = "Useful for dealing with undesirable customers." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + +/datum/reagent/minttoxin/on_mob_life(mob/living/M) + if(FAT in M.mutations) + M.gib() + ..() + +/datum/reagent/slimejelly + name = "Slime Jelly" + id = "slimejelly" + description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL." + reagent_state = LIQUID + color = "#801E28" // rgb: 128, 30, 40 + +/datum/reagent/slimejelly/on_mob_life(mob/living/M) + if(prob(10)) + to_chat(M, "Your insides are burning!") + M.adjustToxLoss(rand(20,60)*REM) + else if(prob(40)) + M.adjustBruteLoss(-5*REM) + ..() + +/datum/reagent/slimetoxin + name = "Mutation Toxin" + id = "mutationtoxin" + description = "A corruptive toxin produced by slimes." + reagent_state = LIQUID + color = "#13BC5E" // rgb: 19, 188, 94 + +/datum/reagent/slimetoxin/on_mob_life(mob/living/M) + if(ishuman(M)) + var/mob/living/carbon/human/human = M + if(human.species.name != "Shadow") + to_chat(M, "Your flesh rapidly mutates!") + to_chat(M, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.") + to_chat(M, "Your body reacts violently to light. \green However, it naturally heals in darkness.") + to_chat(M, "Aside from your new traits, you are mentally unchanged and retain your prior obligations.") + human.set_species("Shadow") + ..() + +/datum/reagent/aslimetoxin + name = "Advanced Mutation Toxin" + id = "amutationtoxin" + description = "An advanced corruptive toxin produced by slimes." + reagent_state = LIQUID + color = "#13BC5E" // rgb: 19, 188, 94 + +/datum/reagent/aslimetoxin/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method != TOUCH) + M.ForceContractDisease(new /datum/disease/transformation/slime(0)) + + +/datum/reagent/mercury + name = "Mercury" + id = "mercury" + description = "A chemical element." + reagent_state = LIQUID + color = "#484848" // rgb: 72, 72, 72 + metabolization_rate = 0.2 + penetrates_skin = 1 + +/datum/reagent/mercury/on_mob_life(mob/living/M) + if(prob(70)) + M.adjustBrainLoss(1) + ..() + +/datum/reagent/chlorine + name = "Chlorine" + id = "chlorine" + description = "A chemical element." + reagent_state = GAS + color = "#808080" // rgb: 128, 128, 128 + penetrates_skin = 1 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/chlorine/on_mob_life(mob/living/M) + M.adjustFireLoss(1) + ..() + +/datum/reagent/fluorine + name = "Fluorine" + id = "fluorine" + description = "A highly-reactive chemical element." + reagent_state = GAS + color = "#6A6054" + penetrates_skin = 1 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/fluorine/on_mob_life(mob/living/M) + M.adjustFireLoss(1) + M.adjustToxLoss(1*REM) + ..() + +/datum/reagent/radium + name = "Radium" + id = "radium" + description = "Radium is an alkaline earth metal. It is extremely radioactive." + reagent_state = SOLID + color = "#C7C7C7" // rgb: 199,199,199 + metabolization_rate = 0.4 + penetrates_skin = 1 + +/datum/reagent/radium/on_mob_life(mob/living/M) + if(M.radiation < 80) + M.apply_effect(4, IRRADIATE, negate_armor = 1) + ..() + +/datum/reagent/radium/reaction_turf(turf/T, volume) + if(volume >= 3 && !istype(T, /turf/space)) + new /obj/effect/decal/cleanable/greenglow(T) + +/datum/reagent/mutagen + name = "Unstable mutagen" + id = "mutagen" + description = "Might cause unpredictable mutations. Keep away from children." + reagent_state = LIQUID + color = "#04DF27" + metabolization_rate = 0.3 + +/datum/reagent/mutagen/reaction_mob(mob/living/M, method=TOUCH, volume) + if(!..()) + return + if(!M.dna) + return //No robots, AIs, aliens, Ians or other mobs should be affected by this. + if((method==TOUCH && prob(33)) || method==INGEST) + randmutb(M) + domutcheck(M, null) + M.UpdateAppearance() + +/datum/reagent/mutagen/on_mob_life(mob/living/M) + if(!M.dna) + return //No robots, AIs, aliens, Ians or other mobs should be affected by this. + M.apply_effect(2*REM, IRRADIATE, negate_armor = 1) + if(prob(4)) + randmutb(M) + ..() + + +/datum/reagent/uranium + name ="Uranium" + id = "uranium" + description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive." + reagent_state = SOLID + color = "#B8B8C0" // rgb: 184, 184, 192 + +/datum/reagent/uranium/on_mob_life(mob/living/M) + M.apply_effect(2, IRRADIATE, negate_armor = 1) + ..() + +/datum/reagent/uranium/reaction_turf(turf/T, volume) + if(volume >= 3 && !istype(T, /turf/space)) + new /obj/effect/decal/cleanable/greenglow(T) + + +/datum/reagent/lexorin + name = "Lexorin" + id = "lexorin" + description = "Lexorin temporarily stops respiration. Causes tissue damage." + reagent_state = LIQUID + color = "#52685D" + metabolization_rate = 0.2 + +/datum/reagent/lexorin/on_mob_life(mob/living/M) + M.adjustToxLoss(1) + ..() + + +/datum/reagent/sacid + name = "Sulphuric acid" + id = "sacid" + description = "A strong mineral acid with the molecular formula H2SO4." + reagent_state = LIQUID + color = "#00D72B" + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/sacid/on_mob_life(mob/living/M) + M.adjustFireLoss(1) + ..() + +/datum/reagent/sacid/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == TOUCH) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + + if(volume > 25) + + if(H.wear_mask) + to_chat(H, "Your mask protects you from the acid!") + return + + if(H.head) + to_chat(H, "Your helmet protects you from the acid!") + return + + if(!M.unacidable) + if(prob(75)) + var/obj/item/organ/external/affecting = H.get_organ("head") + if(affecting) + affecting.take_damage(5, 10) + H.UpdateDamageIcon() + H.emote("scream") + else + M.take_organ_damage(5,10) + else + M.take_organ_damage(5,10) + + if(method == INGEST) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + + if(volume < 10) + to_chat(M, "The greenish acidic substance stings you, but isn't concentrated enough to harm you!") + + if(volume >=10 && volume <=25) + if(!H.unacidable) + M.take_organ_damage(0,min(max(volume-10,2)*2,20)) + M.emote("scream") + + + if(volume > 25) + if(!M.unacidable) + if(prob(75)) + var/obj/item/organ/external/affecting = H.get_organ("head") + if(affecting) + affecting.take_damage(0, 20) + H.UpdateDamageIcon() + H.emote("scream") + else + M.take_organ_damage(0,20) + +/datum/reagent/sacid/reaction_obj(obj/O, volume) + if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(40)) + if(!O.unacidable) + var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc) + I.desc = "Looks like this was \an [O] some time ago." + O.visible_message("[O] melts.") + qdel(O) + + +/datum/reagent/hellwater + name = "Hell Water" + id = "hell_water" + description = "YOUR FLESH! IT BURNS!" + process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL. + metabolization_rate = 1 + +/datum/reagent/hellwater/on_mob_life(mob/living/M) + M.fire_stacks = min(5, M.fire_stacks + 3) + M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire + M.adjustToxLoss(1) + M.adjustFireLoss(1) //Hence the other damages... ain't I a bastard? + M.adjustBrainLoss(5) + ..() + + +/datum/reagent/carpotoxin + name = "Carpotoxin" + id = "carpotoxin" + description = "A deadly neurotoxin produced by the dreaded spess carp." + reagent_state = LIQUID + color = "#003333" // rgb: 0, 51, 51 + +/datum/reagent/carpotoxin/on_mob_life(mob/living/M) + M.adjustToxLoss(2*REM) + ..() + +/datum/reagent/staminatoxin + name = "Tirizene" + id = "tirizene" + description = "A toxin that affects the stamina of a person when injected into the bloodstream." + reagent_state = LIQUID + color = "#6E2828" + data = 13 + +/datum/reagent/staminatoxin/on_mob_life(mob/living/M) + M.adjustStaminaLoss(REM * data) + data = max(data - 1, 3) + ..() + + +/datum/reagent/spore + name = "Spore Toxin" + id = "spore" + description = "A natural toxin produced by blob spores that inhibits vision when ingested." + color = "#9ACD32" + +/datum/reagent/spores/on_mob_life(mob/living/M) + M.adjustToxLoss(1) + M.damageoverlaytemp = 60 + M.EyeBlurry(3) + ..() + +/datum/reagent/beer2 //disguised as normal beer for use by emagged brobots + name = "Beer" + id = "beer2" + description = "An alcoholic beverage made from malted grains, hops, yeast, and water." + color = "#664300" // rgb: 102, 67, 0 + metabolization_rate = 1.5 * REAGENTS_METABOLISM + +/datum/reagent/beer2/on_mob_life(mob/living/M) + switch(current_cycle) + if(1 to 50) + M.AdjustSleeping(1) + if(51 to INFINITY) + M.AdjustSleeping(1) + M.adjustToxLoss((current_cycle - 50)*REM) + ..() + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/datum/reagent/condensedcapsaicin + name = "Condensed Capsaicin" + id = "condensedcapsaicin" + description = "This shit goes in pepperspray." + reagent_state = LIQUID + color = "#B31008" // rgb: 179, 16, 8 + +/datum/reagent/condensedcapsaicin/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == TOUCH) + if(ishuman(M)) + var/mob/living/carbon/human/victim = M + var/mouth_covered = 0 + var/eyes_covered = 0 + var/obj/item/safe_thing = null + if( victim.wear_mask ) + if( victim.wear_mask.flags & MASKCOVERSEYES ) + eyes_covered = 1 + safe_thing = victim.wear_mask + if( victim.wear_mask.flags & MASKCOVERSMOUTH ) + mouth_covered = 1 + safe_thing = victim.wear_mask + if( victim.head ) + if( victim.head.flags & MASKCOVERSEYES ) + eyes_covered = 1 + safe_thing = victim.head + if( victim.head.flags & MASKCOVERSMOUTH ) + mouth_covered = 1 + safe_thing = victim.head + if(victim.glasses) + eyes_covered = 1 + if( !safe_thing ) + safe_thing = victim.glasses + if( eyes_covered && mouth_covered ) + to_chat(victim, "Your [safe_thing] protects you from the pepperspray!") + return + else if( mouth_covered ) // Reduced effects if partially protected + to_chat(victim, "Your [safe_thing] protect you from most of the pepperspray!") + if(prob(5)) + victim.emote("scream") + victim.EyeBlurry(3) + victim.EyeBlind(1) + victim.Confused(3) + victim.damageoverlaytemp = 60 + victim.Weaken(3) + victim.drop_item() + return + else if( eyes_covered ) // Eye cover is better than mouth cover + to_chat(victim, "Your [safe_thing] protects your eyes from the pepperspray!") + victim.EyeBlurry(3) + victim.damageoverlaytemp = 30 + return + else // Oh dear :D + if(prob(5)) + victim.emote("scream") + to_chat(victim, "You're sprayed directly in the eyes with pepperspray!") + victim.EyeBlurry(5) + victim.EyeBlind(2) + victim.Confused(6) + victim.damageoverlaytemp = 75 + victim.Weaken(5) + victim.drop_item() + +/datum/reagent/condensedcapsaicin/on_mob_life(mob/living/M) + if(prob(5)) + M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]") + ..() /datum/reagent/polonium name = "Polonium" @@ -105,15 +514,6 @@ M.reagents.add_reagent("histamine",rand(5,15)) ..() -/datum/chemical_reaction/formaldehyde - name = "formaldehyde" - id = "formaldehyde" - result = "formaldehyde" - required_reagents = list("ethanol" = 1, "oxygen" = 1, "silver" = 1) - result_amount = 3 - min_temp = 420 - mix_message = "Ugh, it smells like the morgue in here." - /datum/reagent/venom name = "Venom" id = "venom" @@ -182,16 +582,6 @@ M.adjustToxLoss(1) ..() -/datum/chemical_reaction/neurotoxin2 - name = "neurotoxin2" - id = "neurotoxin2" - result = "neurotoxin2" - required_reagents = list("space_drugs" = 1) - result_amount = 1 - min_temp = 674 - mix_sound = null - no_message = 1 - /datum/reagent/cyanide name = "Cyanide" id = "cyanide" @@ -215,23 +605,6 @@ M.adjustToxLoss(2) ..() -/datum/chemical_reaction/cyanide - name = "Cyanide" - id = "cyanide" - result = "cyanide" - required_reagents = list("oil" = 1, "ammonia" = 1, "oxygen" = 1) - result_amount = 3 - min_temp = 380 - mix_message = "The mixture gives off a faint scent of almonds." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - -/datum/chemical_reaction/cyanide/on_reaction(datum/reagents/holder) - var/turf/T = get_turf(holder.my_atom) - T.visible_message("The solution generates a strong vapor!") - for(var/mob/living/carbon/C in range(T, 1)) - if(C.can_breathe_gas()) - C.reagents.add_reagent("cyanide", 7) - /datum/reagent/itching_powder name = "Itching Powder" id = "itching_powder" @@ -266,15 +639,6 @@ M.emote("scream") ..() -/datum/chemical_reaction/itching_powder - name = "Itching Powder" - id = "itching_powder" - result = "itching_powder" - required_reagents = list("fuel" = 1, "ammonia" = 1, "fungus" = 1) - result_amount = 3 - mix_message = "The mixture congeals and dries up, leaving behind an abrasive powder." - mix_sound = 'sound/effects/blobattack.ogg' - /datum/reagent/facid/on_mob_life(mob/living/M) M.adjustToxLoss(1*REM) M.adjustFireLoss(1) @@ -338,15 +702,6 @@ O.visible_message("[O] melts.") qdel(O) -/datum/chemical_reaction/facid - name = "Fluorosulfuric Acid" - id = "facid" - result = "facid" - required_reagents = list("sacid" = 1, "fluorine" = 1, "hydrogen" = 1, "potassium" = 1) - result_amount = 4 - min_temp = 380 - mix_message = "The mixture deepens to a dark blue, and slowly begins to corrode its container." - /datum/reagent/initropidril name = "Initropidril" id = "initropidril" @@ -377,15 +732,6 @@ H.heart_attack = 1 // rip in pepperoni ..() -/datum/chemical_reaction/initropidril - name = "Initropidril" - id = "initropidril" - result = "initropidril" - required_reagents = list("crank" = 1, "histamine" = 1, "krokodil" = 1, "bath_salts" = 1, "atropine" = 1, "nicotine" = 1, "morphine" = 1) - result_amount = 4 - mix_message = "A sweet and sugary scent drifts from the unpleasant milky substance." - - /datum/reagent/concentrated_initro name = "Concentrated Initropidril" id = "concentrated_initro" @@ -492,15 +838,6 @@ color = "#6BA688" metabolization_rate = 0.1 -/datum/chemical_reaction/sulfonal - name = "sulfonal" - id = "sulfonal" - result = "sulfonal" - required_reagents = list("acetone" = 1, "diethylamine" = 1, "sulfur" = 1) - result_amount = 3 - mix_message = "The mixture gives off quite a stench." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - /datum/reagent/sulfonal/on_mob_life(mob/living/M) M.AdjustJitter(-30) switch(current_cycle) @@ -526,7 +863,7 @@ reagent_state = LIQUID color = "#D9D9D9" -/datum/reagent/amanitin/reagent_deleted(mob/living/M) +/datum/reagent/amanitin/on_mob_delete(mob/living/M) M.adjustToxLoss(current_cycle*rand(2,4)) ..() @@ -538,13 +875,6 @@ color = "#D1DED1" metabolization_rate = 0.2 -/datum/chemical_reaction/lipolicide - name = "lipolicide" - id = "lipolicide" - result = "lipolicide" - required_reagents = list("mercury" = 1, "diethylamine" = 1, "ephedrine" = 1) - result_amount = 3 - /datum/reagent/lipolicide/on_mob_life(mob/living/M) if(!M.nutrition) switch(rand(1,3)) @@ -616,23 +946,6 @@ penetrates_skin = 1 overdose_threshold = 25 -/datum/chemical_reaction/sarin - name = "sarin" - id = "sarin" - result = "sarin" - required_reagents = list("chlorine" = 1, "fuel" = 1, "oxygen" = 1, "phosphorus" = 1, "fluorine" = 1, "hydrogen" = 1, "acetone" = 1, "atrazine" = 1) - result_amount = 3 - mix_message = "The mixture yields a colorless, odorless liquid." - min_temp = 374 - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - -/datum/chemical_reaction/sarin/on_reaction(datum/reagents/holder) - var/turf/T = get_turf(holder.my_atom) - T.visible_message("The solution generates a strong vapor!") - for(var/mob/living/carbon/C in range(T, 2)) - if(C.can_breathe_gas()) - C.reagents.add_reagent("sarin", 4) - /datum/reagent/sarin/on_mob_life(mob/living/M) switch(current_cycle) if(1 to 15) @@ -727,14 +1040,6 @@ D.adjustHealth(100) ..() -/datum/chemical_reaction/atrazine - name = "atrazine" - id = "atrazine" - result = "atrazine" - required_reagents = list("chlorine" = 1, "hydrogen" = 1, "nitrogen" = 1) - result_amount = 3 - mix_message = "The mixture gives off a harsh odor" - /datum/reagent/capulettium name = "Capulettium" id = "capulettium" @@ -743,14 +1048,6 @@ color = "#60A584" heart_rate_stop = 1 -/datum/chemical_reaction/capulettium - name = "capulettium" - id = "capulettium" - result = "capulettium" - required_reagents = list("neurotoxin2" = 1, "chlorine" = 1, "hydrogen" = 1) - result_amount = 1 - mix_message = "The smell of death wafts up from the solution." - /datum/reagent/capulettium/on_mob_life(mob/living/M) switch(current_cycle) if(1 to 5) @@ -774,14 +1071,6 @@ color = "#60A584" heart_rate_stop = 1 -/datum/chemical_reaction/capulettium_plus - name = "capulettium_plus" - id = "capulettium_plus" - result = "capulettium_plus" - required_reagents = list("capulettium" = 1, "ephedrine" = 1, "methamphetamine" = 1) - result_amount = 3 - mix_message = "The solution begins to slosh about violently by itself." - /datum/reagent/capulettium_plus/on_mob_life(mob/living/M) M.Silence(2) ..() @@ -868,20 +1157,4 @@ shock_timer = 0 M.electrocute_act(rand(5,20), "Teslium in their body", 1, 1) //Override because it's caused from INSIDE of you playsound(M, "sparks", 50, 1) - ..() - -/datum/chemical_reaction/teslium - name = "Teslium" - id = "teslium" - result = "teslium" - required_reagents = list("plasma" = 1, "silver" = 1, "blackpowder" = 1) - result_amount = 3 - mix_message = "A jet of sparks flies from the mixture as it merges into a flickering slurry." - min_temp = 400 - mix_sound = null - -/datum/chemical_reaction/teslium/on_reaction(datum/reagents/holder, created_volume) - var/location = get_turf(holder.my_atom) - var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread - s.set_up(6, 1, location) - s.start() + ..() \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_water.dm b/code/modules/reagents/chemistry/reagents/water.dm similarity index 100% rename from code/modules/reagents/oldchem/reagents/reagents_water.dm rename to code/modules/reagents/chemistry/reagents/water.dm diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm new file mode 100644 index 00000000000..28994d10fb2 --- /dev/null +++ b/code/modules/reagents/chemistry/recipes.dm @@ -0,0 +1,81 @@ +/////////////////////////////////////////////////////////////////////////////////// +/datum/chemical_reaction + var/name = null + var/id = null + var/result = null + var/list/required_reagents = list() + var/list/required_catalysts = list() + + // Both of these variables are mostly going to be used with slime cores - but if you want to, you can use them for other things + var/atom/required_container = null // the container required for the reaction to happen + var/required_other = 0 // an integer required for the reaction to happen + + var/result_amount = 0 + var/secondary = 0 // set to nonzero if secondary reaction + var/list/secondary_results = list() //additional reagents produced by the reaction + var/min_temp = 0 //Minimum temperature required for the reaction to occur (heat to/above this). min_temp = 0 means no requirement + var/max_temp = 9999 //Maximum temperature allowed for the reaction to occur (cool to/below this). + var/mix_message = "The solution begins to bubble." + var/mix_sound = 'sound/effects/bubbles.ogg' + var/no_message = 0 + +/datum/chemical_reaction/proc/on_reaction(datum/reagents/holder, created_volume) + return + +var/list/chemical_mob_spawn_meancritters = list() // list of possible hostile mobs +var/list/chemical_mob_spawn_nicecritters = list() // and possible friendly mobs +/datum/chemical_reaction/proc/chemical_mob_spawn(datum/reagents/holder, amount_to_spawn, reaction_name, mob_faction = "chemicalsummon") + if(holder && holder.my_atom) + if(chemical_mob_spawn_meancritters.len <= 0 || chemical_mob_spawn_nicecritters.len <= 0) + for(var/T in typesof(/mob/living/simple_animal)) + var/mob/living/simple_animal/SA = T + switch(initial(SA.gold_core_spawnable)) + if(CHEM_MOB_SPAWN_HOSTILE) + chemical_mob_spawn_meancritters += T + if(CHEM_MOB_SPAWN_FRIENDLY) + chemical_mob_spawn_nicecritters += T + var/atom/A = holder.my_atom + var/turf/T = get_turf(A) + var/area/my_area = get_area(T) + var/message = "A [reaction_name] reaction has occured in [my_area.name]. (JMP)" + message += " (VV)" + + var/mob/M = get(A, /mob) + if(M) + message += " - Carried By: [key_name_admin(M)](?) (FLW)" + else + message += " - Last Fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]" + + message_admins(message, 0, 1) + + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + + for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null)) + C.flash_eyes() + for(var/i = 1, i <= amount_to_spawn, i++) + var/chosen + if(reaction_name == "Friendly Gold Slime") + chosen = pick(chemical_mob_spawn_nicecritters) + else + chosen = pick(chemical_mob_spawn_meancritters) + var/mob/living/simple_animal/C = new chosen + C.faction |= mob_faction + C.forceMove(get_turf(holder.my_atom)) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(C, pick(NORTH,SOUTH,EAST,WEST)) + +/proc/goonchem_vortex(turf/simulated/T, setting_type, range, pull_times) + for(var/atom/movable/X in orange(range, T)) + if(istype(X, /obj/effect)) + continue //stop pulling smoke and hotspots please + if(istype(X, /atom/movable)) + if((X) && !X.anchored) + if(setting_type) + playsound(T, 'sound/effects/bang.ogg', 25, 1) + for(var/i = 0, i < pull_times, i++) + step_away(X,T) + else + playsound(T, 'sound/effects/whoosh.ogg', 25, 1) //credit to Robinhood76 of Freesound.org for this. + for(var/i = 0, i < pull_times, i++) + step_towards(X,T) \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm b/code/modules/reagents/chemistry/recipes/drinks.dm similarity index 86% rename from code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm rename to code/modules/reagents/chemistry/recipes/drinks.dm index 1b69b88e071..fb10986cd0b 100644 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm +++ b/code/modules/reagents/chemistry/recipes/drinks.dm @@ -676,3 +676,103 @@ required_reagents = list("spacemountainwind" = 1, "coffee" = 1) result_amount = 2 mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/reagent/ginsonic + name = "Gin and sonic" + id = "ginsonic" + description = "GOTTA GET CRUNK FAST BUT LIQUOR TOO SLOW" + reagent_state = LIQUID + color = "#1111CF" + +/datum/chemical_reaction/ginsonic + name = "ginsonic" + id = "ginsonic" + result = "ginsonic" + required_reagents = list("gintonic" = 1, "methamphetamine" = 1) + result_amount = 2 + mix_message = "The drink turns electric blue and starts quivering violently." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/applejack + name = "applejack" + id = "applejack" + result = "applejack" + required_reagents = list("cider" = 2) + max_temp = 270 + result_amount = 1 + mix_message = "The drink darkens as the water freezes, leaving the concentrated cider behind." + mix_sound = null + +/datum/chemical_reaction/jackrose + name = "jackrose" + id = "jackrose" + result = "jackrose" + required_reagents = list("applejack" = 4, "lemonjuice" = 1) + result_amount = 5 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/synthanol + name = "Synthanol" + id = "synthanol" + result = "synthanol" + required_reagents = list("lube" = 1, "plasma" = 1, "fuel" = 1) + result_amount = 3 + mix_message = "The chemicals mix to create shiny, blue substance." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/synthanol/robottears + name = "Robot Tears" + id = "robottears" + result = "robottears" + required_reagents = list("synthanol" = 1, "oil" = 1, "sodawater" = 1) + result_amount = 3 + mix_message = "The ingredients combine into a stiff, dark goo." + +/datum/chemical_reaction/synthanol/trinary + name = "Trinary" + id = "trinary" + result = "trinary" + required_reagents = list("synthanol" = 1, "limejuice" = 1, "orangejuice" = 1) + result_amount = 3 + mix_message = "The ingredients mix into a colorful substance." + +/datum/chemical_reaction/synthanol/servo + name = "Servo" + id = "servo" + result = "servo" + required_reagents = list("synthanol" = 2, "cream" = 1, "hot_coco" = 1) + result_amount = 4 + mix_message = "The ingredients mix into a dark brown substance." + +/datum/chemical_reaction/synthanol/uplink + name = "Uplink" + id = "uplink" + result = "uplink" + required_reagents = list("rum" = 1, "vodka" = 1, "tequila" = 1, "whiskey" = 1, "synthanol" = 1) + result_amount = 5 + mix_message = "The chemicals mix to create a shiny, orange substance." + +/datum/chemical_reaction/synthanol/synthnsoda + name = "Synth 'n Soda" + id = "synthnsoda" + result = "synthnsoda" + required_reagents = list("synthanol" = 1, "cola" = 1) + result_amount = 2 + mix_message = "The chemicals mix to create a smooth, fizzy substance." + +/datum/chemical_reaction/synthanol/synthignon + name = "Synthignon" + id = "synthignon" + result = "synthignon" + required_reagents = list("synthanol" = 1, "wine" = 1) + result_amount = 2 + mix_message = "The chemicals mix to create a fine, red substance." + +/datum/chemical_reaction/triple_citrus + name = "triple_citrus" + id = "triple_citrus" + result = "triple_citrus" + required_reagents = list("lemonjuice" = 1, "limejuice" = 1, "orangejuice" = 1) + result_amount = 3 + mix_message = "The citrus juices begin to blend together." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' \ No newline at end of file diff --git a/code/modules/reagents/chemistry/recipes/drugs.dm b/code/modules/reagents/chemistry/recipes/drugs.dm new file mode 100644 index 00000000000..e44ace8f511 --- /dev/null +++ b/code/modules/reagents/chemistry/recipes/drugs.dm @@ -0,0 +1,117 @@ +/datum/chemical_reaction/space_drugs + name = "Space Drugs" + id = "space_drugs" + result = "space_drugs" + required_reagents = list("mercury" = 1, "sugar" = 1, "lithium" = 1) + result_amount = 3 + mix_message = "Slightly dizzying fumes drift from the solution." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/crank + name = "Crank" + id = "crank" + result = "crank" + required_reagents = list("diphenhydramine" = 1, "ammonia" = 1, "lithium" = 1, "sacid" = 1, "fuel" = 1) + result_amount = 5 + mix_message = "The mixture violently reacts, leaving behind a few crystalline shards." + mix_sound = 'sound/goonstation/effects/crystalshatter.ogg' + min_temp = 390 + +/datum/chemical_reaction/crank/on_reaction(datum/reagents/holder, created_volume) + var/turf/T = get_turf(holder.my_atom) + for(var/turf/turf in range(1,T)) + new /obj/effect/hotspot(turf) + explosion(T,0,0,2) + +/datum/chemical_reaction/krokodil + name = "Krokodil" + id = "krokodil" + result = "krokodil" + required_reagents = list("diphenhydramine" = 1, "morphine" = 1, "cleaner" = 1, "potassium" = 1, "phosphorus" = 1, "fuel" = 1) + result_amount = 6 + mix_message = "The mixture dries into a pale blue powder." + min_temp = 380 + mix_sound = 'sound/goonstation/misc/fuse.ogg' + +/datum/chemical_reaction/methamphetamine + name = "methamphetamine" + id = "methamphetamine" + result = "methamphetamine" + required_reagents = list("ephedrine" = 1, "iodine" = 1, "phosphorus" = 1, "hydrogen" = 1) + result_amount = 4 + min_temp = 374 + +/datum/chemical_reaction/methamphetamine/on_reaction(datum/reagents/holder) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The solution generates a strong vapor!") + for(var/mob/living/carbon/C in range(T, 1)) + if(C.can_breathe_gas()) + C.emote("gasp") + C.AdjustLoseBreath(1) + C.reagents.add_reagent("toxin", 10) + C.reagents.add_reagent("neurotoxin2", 20) + +/datum/chemical_reaction/bath_salts + name = "bath_salts" + id = "bath_salts" + result = "bath_salts" + required_reagents = list("????" = 1, "saltpetre" = 1, "msg" = 1, "cleaner" = 1, "enzyme" = 1, "mugwort" = 1, "mercury" = 1) + result_amount = 6 + min_temp = 374 + mix_message = "Tiny cubic crystals precipitate out of the mixture. Huh." + mix_sound = 'sound/goonstation/misc/fuse.ogg' + +/datum/chemical_reaction/jenkem + name = "Jenkem" + id = "jenkem" + result = "jenkem" + required_reagents = list("toiletwater" = 1, "ammonia" = 1, "water" = 1) + result_amount = 3 + mix_message = "The mixture ferments into a filthy morass." + mix_sound = 'sound/effects/blobattack.ogg' + +/datum/chemical_reaction/jenkem/on_reaction(datum/reagents/holder) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The solution generates a strong vapor!") + for(var/mob/living/carbon/C in range(T, 1)) + if(C.can_breathe_gas()) + C.reagents.add_reagent("jenkem", 25) + +/datum/chemical_reaction/aranesp + name = "Aranesp" + id = "aranesp" + result = "aranesp" + required_reagents = list("epinephrine" = 1, "atropine" = 1, "insulin" = 1) + result_amount = 3 + +/datum/chemical_reaction/fliptonium + name = "fliptonium" + id = "fliptonium" + result = "fliptonium" + required_reagents = list("ephedrine" = 1, "liquid_dark_matter" = 1, "chocolate" = 1, "ginsonic" = 1) + result_amount = 4 + mix_message = "The mixture swirls around excitedly!" + +/datum/chemical_reaction/lsd + name = "Lysergic acid diethylamide" + id = "lsd" + result = "lsd" + required_reagents = list("diethylamine" = 1, "fungus" = 1) + result_amount = 3 + mix_message = "The mixture turns a rather unassuming color and settles." + +/datum/chemical_reaction/lube/ultra + name = "Ultra-Lube" + id = "ultralube" + result = "ultralube" + required_reagents = list("lube" = 2, "formaldehyde" = 1, "cryostylane" = 1) + result_amount = 2 + mix_message = "The mixture darkens and appears to partially vaporize into a chilling aerosol." + +/datum/chemical_reaction/surge + name = "Surge" + id = "surge" + result = "surge" + required_reagents = list("thermite" = 3, "uranium" = 1, "fluorosurfactant" = 1, "sacid" = 1) + result_amount = 6 + mix_message = "The mixture congeals into a metallic green gel that crackles with electrical activity." \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm b/code/modules/reagents/chemistry/recipes/food.dm similarity index 51% rename from code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm rename to code/modules/reagents/chemistry/recipes/food.dm index b43c9b344f1..02453d44e31 100644 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm +++ b/code/modules/reagents/chemistry/recipes/food.dm @@ -89,34 +89,6 @@ required_reagents = list("flour" = 15, "water" = 5) required_catalysts = list("enzyme" = 5) -/datum/chemical_reaction/sodiumchloride - name = "Sodium Chloride" - id = "sodiumchloride" - result = "sodiumchloride" - required_reagents = list("sodium" = 1, "chlorine" = 1, "water" = 1) - result_amount = 3 - mix_message = "The solution crystallizes with a brief flare of light." - -/datum/chemical_reaction/ice - name = "Ice" - id = "ice" - result = "ice" - required_reagents = list("water" = 1) - result_amount = 1 - max_temp = 273 - mix_message = "Ice forms as the water freezes." - mix_sound = null - -/datum/chemical_reaction/water - name = "Water" - id = "water" - result = "water" - required_reagents = list("ice" = 1) - result_amount = 1 - min_temp = 301 // In Space.....ice melts at 82F...don't ask - mix_message = "Water pools as the ice melts." - mix_sound = null - /datum/chemical_reaction/dough name = "Dough" id = "dough" @@ -128,4 +100,101 @@ /datum/chemical_reaction/dough/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i = 1, i <= created_volume, i++) - new /obj/item/weapon/reagent_containers/food/snacks/dough(location) \ No newline at end of file + new /obj/item/weapon/reagent_containers/food/snacks/dough(location) + +/datum/chemical_reaction/corn_syrup + name = "corn_syrup" + id = "corn_syrup" + result = "corn_syrup" + required_reagents = list("corn_starch" = 1, "sacid" = 1) + result_amount = 2 + min_temp = 374 + mix_message = "The mixture forms a viscous, clear fluid!" + +/datum/chemical_reaction/vhfcs + name = "vhfcs" + id = "vhfcs" + result = "vhfcs" + required_reagents = list("corn_syrup" = 1) + required_catalysts = list("enzyme" = 1) + result_amount = 1 + mix_message = "The mixture emits a sickly-sweet smell." + +/datum/chemical_reaction/cola + name = "cola" + id = "cola" + result = "cola" + required_reagents = list("carbon" = 1, "oxygen" = 1, "water" = 1, "sugar" = 1) + result_amount = 4 + mix_message = "The mixture begins to fizz." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/cheese + name = "cheese" + id = "cheese" + result = "cheese" + required_reagents = list("vomit" = 1, "milk" = 1) + result_amount = 1 + mix_message = "The mixture curdles up." + +/datum/chemical_reaction/cheese/on_reaction(datum/reagents/holder) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("A faint cheesy smell drifts through the air...") + +/datum/chemical_reaction/weird_cheese + name = "Weird cheese" + id = "weird_cheese" + result = "weird_cheese" + required_reagents = list("green_vomit" = 1, "milk" = 1) + result_amount = 1 + mix_message = "The disgusting mixture sloughs together horribly, emitting a foul stench." + mix_sound = 'sound/goonstation/misc/gurggle.ogg' + +/datum/chemical_reaction/weird_cheese/on_reaction(datum/reagents/holder) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("A horrible smell assaults your nose! What in space is it?") + +/datum/chemical_reaction/hydrogenated_soybeanoil + name = "Partially hydrogenated space-soybean oil" + id = "hydrogenated_soybeanoil" + result = "hydrogenated_soybeanoil" + required_reagents = list("soybeanoil" = 1, "hydrogen" = 1) + result_amount = 2 + min_temp = 520 + mix_message = "The mixture emits a burnt, oily smell." + +/datum/chemical_reaction/meatslurry + name = "Meat Slurry" + id = "meatslurry" + result = "meatslurry" + required_reagents = list("corn_starch" = 1, "blood" = 1) + result_amount = 2 + mix_message = "The mixture congeals into a bloody mass." + mix_sound = 'sound/effects/blobattack.ogg' + +/datum/chemical_reaction/gravy + name = "Gravy" + id = "gravy" + result = "gravy" + required_reagents = list("porktonium" = 1, "corn_starch" = 1, "milk" = 1) + result_amount = 3 + min_temp = 374 + mix_message = "The substance thickens and takes on a meaty odor." + +/datum/chemical_reaction/beff + name = "Beff" + id = "beff" + result = "beff" + required_reagents = list("hydrogenated_soybeanoil" = 2, "meatslurry" = 1, "plasma" = 1) + result_amount = 4 + mix_message = "The mixture solidifies, taking a crystalline appearance." + mix_sound = 'sound/effects/blobattack.ogg' + +/datum/chemical_reaction/pepperoni + name = "Pepperoni" + id = "pepperoni" + result = "pepperoni" + required_reagents = list("beff" = 1, "saltpetre" = 1, "synthflesh" = 1) + result_amount = 2 + mix_message = "The beff and the synthflesh combine to form a smoky red log." + mix_sound = 'sound/effects/blobattack.ogg' \ No newline at end of file diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm new file mode 100644 index 00000000000..3d0a0feb8d8 --- /dev/null +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -0,0 +1,275 @@ +/datum/chemical_reaction/hydrocodone + name = "Hydrocodone" + id = "hydrocodone" + result = "hydrocodone" + required_reagents = list("morphine" = 1, "sacid" = 1, "water" = 1, "oil" = 1) + result_amount = 2 + +/datum/chemical_reaction/mitocholide + name = "mitocholide" + id = "mitocholide" + result = "mitocholide" + required_reagents = list("synthflesh" = 1, "cryoxadone" = 1, "plasma" = 1) + result_amount = 3 + +/datum/chemical_reaction/cryoxadone + name = "Cryoxadone" + id = "cryoxadone" + result = "cryoxadone" + required_reagents = list("cryostylane" = 1, "plasma" = 1, "acetone" = 1, "mutagen" = 1) + result_amount = 4 + mix_message = "The solution bubbles softly." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/spaceacillin + name = "Spaceacillin" + id = "spaceacillin" + result = "spaceacillin" + required_reagents = list("fungus" = 1, "ethanol" = 1) + result_amount = 2 + mix_message = "The solvent extracts an antibiotic compound from the fungus." + +/datum/chemical_reaction/rezadone + name = "Rezadone" + id = "rezadone" + result = "rezadone" + required_reagents = list("carpotoxin" = 1, "spaceacillin" = 1, "copper" = 1) + result_amount = 3 + +/datum/chemical_reaction/sterilizine + name = "Sterilizine" + id = "sterilizine" + result = "sterilizine" + required_reagents = list("antihol" = 2, "chlorine" = 1) + result_amount = 3 + +/datum/chemical_reaction/charcoal + name = "Charcoal" + id = "charcoal" + result = "charcoal" + required_reagents = list("ash" = 1, "sodiumchloride" = 1) + result_amount = 2 + mix_message = "The mixture yields a fine black powder." + min_temp = 380 + mix_sound = 'sound/goonstation/misc/fuse.ogg' + +/datum/chemical_reaction/silver_sulfadiazine + name = "Silver Sulfadiazine" + id = "silver_sulfadiazine" + result = "silver_sulfadiazine" + required_reagents = list("ammonia" = 1, "silver" = 1, "sulfur" = 1, "oxygen" = 1, "chlorine" = 1) + result_amount = 5 + mix_message = "A strong and cloying odor begins to bubble from the mixture." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/salglu_solution + name = "Saline-Glucose Solution" + id = "salglu_solution" + result = "salglu_solution" + required_reagents = list("sodiumchloride" = 1, "water" = 1, "sugar" = 1) + result_amount = 3 + +/datum/chemical_reaction/synthflesh + name = "Synthflesh" + id = "synthflesh" + result = "synthflesh" + required_reagents = list("blood" = 1, "carbon" = 1, "styptic_powder" = 1) + result_amount = 3 + mix_message = "The mixture knits together into a fibrous, bloody mass." + mix_sound = 'sound/effects/blobattack.ogg' + +/datum/chemical_reaction/styptic_powder + name = "Styptic Powder" + id = "styptic_powder" + result = "styptic_powder" + required_reagents = list("aluminum" = 1, "hydrogen" = 1, "oxygen" = 1, "sacid" = 1) + result_amount = 4 + mix_message = "The solution yields an astringent powder." + +/datum/chemical_reaction/calomel + name = "Calomel" + id = "calomel" + result = "calomel" + required_reagents = list("mercury" = 1, "chlorine" = 1) + result_amount = 2 + min_temp = 374 + mix_message = "Stinging vapors rise from the solution." + +/datum/chemical_reaction/potass_iodide + name = "Potassium Iodide" + id = "potass_iodide" + result = "potass_iodide" + required_reagents = list("potassium" = 1, "iodine" = 1) + result_amount = 2 + mix_message = "The solution settles calmly and emits gentle fumes." + +/datum/chemical_reaction/pen_acid + name = "Pentetic Acid" + id = "pen_acid" + result = "pen_acid" + required_reagents = list("fuel" = 1, "chlorine" = 1, "ammonia" = 1, "formaldehyde" = 1, "sodium" = 1, "cyanide" = 1) + result_amount = 6 + mix_message = "The substance becomes very still, emitting a curious haze." + +/datum/chemical_reaction/sal_acid + name = "Salicyclic Acid" + id = "sal_acid" + result = "sal_acid" + required_reagents = list("sodium" = 1, "phenol" = 1, "carbon" = 1, "oxygen" = 1, "sacid" = 1) + result_amount = 5 + mix_message = "The mixture crystallizes." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/salbutamol + name = "Salbutamol" + id = "salbutamol" + result = "salbutamol" + required_reagents = list("sal_acid" = 1, "lithium" = 1, "aluminum" = 1, "bromine" = 1, "ammonia" = 1) + result_amount = 5 + mix_message = "The solution bubbles freely, creating a head of bluish foam." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/perfluorodecalin + name = "Perfluorodecalin" + id = "perfluorodecalin" + result = "perfluorodecalin" + required_reagents = list("hydrogen" = 1, "fluorine" = 1, "oil" = 1) + result_amount = 3 + min_temp = 370 + mix_message = "The mixture rapidly turns into a dense pink liquid." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/ephedrine + name = "Ephedrine" + id = "ephedrine" + result = "ephedrine" + required_reagents = list("sugar" = 1, "oil" = 1, "hydrogen" = 1, "diethylamine" = 1) + result_amount = 4 + mix_message = "The solution fizzes and gives off toxic fumes." + +/datum/chemical_reaction/diphenhydramine + name = "Diphenhydramine" + id = "diphenhydramine" + result = "diphenhydramine" + required_reagents = list("oil" = 1, "carbon" = 1, "bromine" = 1, "diethylamine" = 1, "ethanol" = 1) + result_amount = 4 + mix_message = "The mixture fizzes gently." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/oculine + name = "Oculine" + id = "oculine" + result = "oculine" + required_reagents = list("atropine" = 1, "spaceacillin" = 1, "salglu_solution" = 1) + result_amount = 3 + mix_message = "The mixture settles, becoming a milky white." + +/datum/chemical_reaction/atropine + name = "Atropine" + id = "atropine" + result = "atropine" + required_reagents = list("ethanol" = 1, "acetone" = 1, "diethylamine" = 1, "phenol" = 1, "sacid" = 1) + result_amount = 5 + mix_message = "A horrid smell like something died drifts from the mixture." + +/datum/chemical_reaction/epinephrine + name = "Epinephrine" + id = "epinephrine" + result = "epinephrine" + required_reagents = list("phenol" = 1, "acetone" = 1, "diethylamine" = 1, "oxygen" = 1, "chlorine" = 1, "hydrogen" = 1) + result_amount = 6 + mix_message = "Tiny white crystals precipitate out of the solution." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/strange_reagent + name = "Strange Reagent" + id = "strange_reagent" + result = "strange_reagent" + required_reagents = list("omnizine" = 1, "holywater" = 1, "mutagen" = 1) + result_amount = 3 + mix_message = "The substance begins moving on its own somehow." + +/datum/chemical_reaction/life + name = "Life" + id = "life" + result = null + required_reagents = list("strange_reagent" = 1, "synthflesh" = 1, "blood" = 1) + result_amount = 3 + min_temp = 374 + +/datum/chemical_reaction/life/on_reaction(datum/reagents/holder, created_volume) + chemical_mob_spawn(holder, 1, "Life") + +/datum/chemical_reaction/mannitol + name = "Mannitol" + id = "mannitol" + result = "mannitol" + required_reagents = list("sugar" = 1, "hydrogen" = 1, "water" = 1) + result_amount = 3 + mix_message = "The mixture bubbles slowly, making a slightly sweet odor." + +/datum/chemical_reaction/mutadone + name = "Mutadone" + id = "mutadone" + result = "mutadone" + required_reagents = list("mutagen" = 1, "acetone" = 1, "bromine" = 1) + result_amount = 3 + mix_message = "A foul astringent liquid emerges from the reaction." + +/datum/chemical_reaction/antihol + name = "antihol" + id = "antihol" + result = "antihol" + required_reagents = list("ethanol" = 1, "charcoal" = 1) + result_amount = 2 + mix_message = "A minty and refreshing smell drifts from the effervescent mixture." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/simethicone + name = "simethicone" + id = "simethicone" + result = "simethicone" + required_reagents = list("hydrogen" = 1, "chlorine" = 1, "silicon" = 1, "oxygen" = 1) + result_amount = 4 + +/datum/chemical_reaction/teporone + name = "Teporone" + id = "teporone" + result = "teporone" + required_reagents = list("acetone" = 1, "silicon" = 1, "plasma" = 1) + result_amount = 2 + mix_message = "The mixture turns an odd lavender color." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/haloperidol + name = "Haloperidol" + id = "haloperidol" + result = "haloperidol" + required_reagents = list("chlorine" = 1, "fluorine" = 1, "aluminum" = 1, "potass_iodide" = 1, "oil" = 1) + result_amount = 4 + mix_message = "The chemicals mix into an odd pink slush." + +/datum/chemical_reaction/ether + name = "Ether" + id = "ether" + result = "ether" + required_reagents = list("sacid" = 1, "ethanol" = 1, "oxygen" = 1) + result_amount = 1 + mix_message = "The mixture yields a pungent odor, which makes you tired." + +/datum/chemical_reaction/degreaser + name = "Degreaser" + id = "degreaser" + result = "degreaser" + required_reagents = list("oil" = 1, "sterilizine" = 1) + result_amount = 2 + +/datum/chemical_reaction/liquid_solder + name = "Liquid Solder" + id = "liquid_solder" + result = "liquid_solder" + required_reagents = list("ethanol" = 1, "copper" = 1, "silver" = 1) + result_amount = 3 + min_temp = 370 + mix_message = "The solution gently swirls with a metallic sheen." + diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm new file mode 100644 index 00000000000..b97deb0ae8f --- /dev/null +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -0,0 +1,482 @@ +// foam and foam precursor + +/datum/chemical_reaction/surfactant + name = "Foam surfactant" + id = "foam surfactant" + result = "fluorosurfactant" + required_reagents = list("fluorine" = 2, "carbon" = 2, "sacid" = 1) + result_amount = 5 + mix_message = "A head of foam results from the mixture's constant fizzing." + +/datum/chemical_reaction/foam + name = "Foam" + id = "foam" + result = null + required_reagents = list("fluorosurfactant" = 1, "water" = 1) + result_amount = 2 + +/datum/chemical_reaction/foam/on_reaction(datum/reagents/holder, created_volume) + var/location = get_turf(holder.my_atom) + holder.my_atom.visible_message("The solution spews out foam!") + + var/datum/effect/system/foam_spread/s = new() + s.set_up(created_volume, location, holder, 0) + s.start() + holder.clear_reagents() + + +/datum/chemical_reaction/metalfoam + name = "Metal Foam" + id = "metalfoam" + result = null + required_reagents = list("aluminum" = 3, "fluorosurfactant" = 1, "sacid" = 1) + result_amount = 5 + +/datum/chemical_reaction/metalfoam/on_reaction(datum/reagents/holder, created_volume) + var/location = get_turf(holder.my_atom) + + holder.my_atom.visible_message("The solution spews out a metalic foam!") + + var/datum/effect/system/foam_spread/s = new() + s.set_up(created_volume, location, holder, MFOAM_ALUMINUM) + s.start() + + +/datum/chemical_reaction/ironfoam + name = "Iron Foam" + id = "ironlfoam" + result = null + required_reagents = list("iron" = 3, "fluorosurfactant" = 1, "sacid" = 1) + result_amount = 5 + +/datum/chemical_reaction/ironfoam/on_reaction(datum/reagents/holder, created_volume) + var/location = get_turf(holder.my_atom) + + holder.my_atom.visible_message("= 5 && !istype(T, /turf/space)) - if(!locate(/obj/effect/decal/cleanable/dirt/blackpowder) in T) //let's not have hundreds of decals of black powder on the same turf - new /obj/effect/decal/cleanable/dirt/blackpowder(T) - /datum/chemical_reaction/blackpowder_explosion/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread @@ -190,17 +136,6 @@ sleep(rand(20,30)) blackpowder_detonate(holder, created_volume) -/* -/datum/reagent/blackpowder/on_ex_act() - var/location = get_turf(holder.my_atom) - var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread - s.set_up(2, 1, location) - s.start() - sleep(rand(10,15)) - blackpowder_detonate(holder, volume) - holder.remove_reagent("blackpowder", volume) - return */ - /proc/blackpowder_detonate(datum/reagents/holder, created_volume) var/turf/simulated/T = get_turf(holder.my_atom) var/ex_severe = round(created_volume / 100) @@ -213,20 +148,28 @@ spawn(0) qdel(holder.my_atom) -/datum/reagent/flash_powder - name = "Flash Powder" - id = "flash_powder" - description = "Makes a very bright flash." - reagent_state = LIQUID - color = "#FFFF00" - -/datum/chemical_reaction/flash_powder +datum/chemical_reaction/flash_powder name = "Flash powder" id = "flash_powder" result = "flash_powder" required_reagents = list("aluminum" = 1, "potassium" = 1, "sulfur" = 1, "chlorine" = 1) result_amount = 3 +/datum/chemical_reaction/flash_powder/on_reaction(datum/reagents/holder, created_volume) + if(holder.has_reagent("stabilizing_agent")) + return + var/location = get_turf(holder.my_atom) + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread + s.set_up(2, 1, location) + s.start() + for(var/mob/living/carbon/C in viewers(5, location)) + if(C.flash_eyes()) + if(get_dist(C, location) < 4) + C.Weaken(5) + continue + C.Stun(5) + holder.remove_reagent("flash_powder", created_volume) + /datum/chemical_reaction/flash_powder_flash name = "Flash powder activation" id = "flash_powder_flash" @@ -246,29 +189,6 @@ continue C.Stun(5) - -/datum/chemical_reaction/flash_powder/on_reaction(datum/reagents/holder, created_volume) - if(holder.has_reagent("stabilizing_agent")) - return - var/location = get_turf(holder.my_atom) - var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread - s.set_up(2, 1, location) - s.start() - for(var/mob/living/carbon/C in viewers(5, location)) - if(C.flash_eyes()) - if(get_dist(C, location) < 4) - C.Weaken(5) - continue - C.Stun(5) - holder.remove_reagent("flash_powder", created_volume) - -/datum/reagent/smoke_powder - name = "Smoke Powder" - id = "smoke_powder" - description = "Makes a large cloud of smoke that can carry reagents." - reagent_state = LIQUID - color = "#808080" - /datum/chemical_reaction/smoke_powder name = "smoke_powder" id = "smoke_powder" @@ -318,13 +238,6 @@ forbidden_reagents = list("stimulants") mix_sound = null -/datum/reagent/sonic_powder - name = "Sonic Powder" - id = "sonic_powder" - description = "Makes a deafening noise." - reagent_state = LIQUID - color = "#0000FF" - /datum/chemical_reaction/sonic_powder name = "sonic_powder" id = "sonic_powder" @@ -332,6 +245,35 @@ required_reagents = list("oxygen" = 1, "cola" = 1, "phosphorus" = 1) result_amount = 3 +/datum/chemical_reaction/sonic_powder/on_reaction(datum/reagents/holder, created_volume) + if(holder.has_reagent("stabilizing_agent")) + return + var/location = get_turf(holder.my_atom) + playsound(location, 'sound/effects/bang.ogg', 25, 1) + for(var/mob/living/M in hearers(5, location)) + var/ear_safety = 0 + var/distance = max(1,get_dist(src,T)) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(ishuman(C)) + var/mob/living/carbon/human/H = C + if((H.r_ear && (H.r_ear.flags & EARBANGPROTECT)) || (H.l_ear && (H.l_ear.flags & EARBANGPROTECT)) || (H.head && (H.head.flags & HEADBANGPROTECT))) + ear_safety++ + to_chat(C, "BANG") + if(!ear_safety) + M.Stun(max(10/distance, 3)) + M.Weaken(max(10/distance, 3)) + M.AdjustEarDamage(rand(0, 5)) + M.EarDeaf(15) + if(M.ear_damage >= 15) + to_chat(M, "Your ears start to ring badly!") + if(prob(M.ear_damage - 5)) + to_chat(M, "You can't hear anything!") + M.disabilities |= DEAF + else + if(M.ear_damage >= 5) + to_chat(M, "Your ears start to ring!") + holder.remove_reagent("sonic_powder", created_volume) /datum/chemical_reaction/sonic_powder_deafen name = "sonic_powder_deafen" @@ -367,44 +309,6 @@ if(M.ear_damage >= 5) to_chat(M, "Your ears start to ring!") -/datum/chemical_reaction/sonic_powder/on_reaction(datum/reagents/holder, created_volume) - if(holder.has_reagent("stabilizing_agent")) - return - var/location = get_turf(holder.my_atom) - playsound(location, 'sound/effects/bang.ogg', 25, 1) - for(var/mob/living/M in hearers(5, location)) - var/ear_safety = 0 - var/distance = max(1,get_dist(src,T)) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(ishuman(C)) - var/mob/living/carbon/human/H = C - if((H.r_ear && (H.r_ear.flags & EARBANGPROTECT)) || (H.l_ear && (H.l_ear.flags & EARBANGPROTECT)) || (H.head && (H.head.flags & HEADBANGPROTECT))) - ear_safety++ - to_chat(C, "BANG") - if(!ear_safety) - M.Stun(max(10/distance, 3)) - M.Weaken(max(10/distance, 3)) - M.AdjustEarDamage(rand(0, 5)) - M.EarDeaf(15) - if(M.ear_damage >= 15) - to_chat(M, "Your ears start to ring badly!") - if(prob(M.ear_damage - 5)) - to_chat(M, "You can't hear anything!") - M.disabilities |= DEAF - else - if(M.ear_damage >= 5) - to_chat(M, "Your ears start to ring!") - holder.remove_reagent("sonic_powder", created_volume) - -/datum/reagent/phlogiston - name = "Phlogiston" - id = "phlogiston" - description = "Catches you on fire and makes you ignite." - reagent_state = LIQUID - color = "#FF9999" - process_flags = ORGANIC | SYNTHETIC - /datum/chemical_reaction/phlogiston name = "phlogiston" id = "phlogiston" @@ -419,32 +323,6 @@ for(var/turf/simulated/turf in range(min(created_volume/10,4),T)) new /obj/effect/hotspot(turf) -/datum/reagent/phlogiston/reaction_mob(mob/living/M, method=TOUCH, volume) - M.IgniteMob() - ..() - -/datum/reagent/phlogiston/on_mob_life(mob/living/M) - M.adjust_fire_stacks(1) - var/burndmg = max(0.3*M.fire_stacks, 0.3) - M.adjustFireLoss(burndmg) - ..() - -/datum/reagent/napalm - name = "Napalm" - id = "napalm" - description = "Very flammable." - reagent_state = LIQUID - color = "#FF9999" - process_flags = ORGANIC | SYNTHETIC - -/datum/reagent/napalm/on_mob_life(mob/living/M) - M.adjust_fire_stacks(1) - ..() - -/datum/reagent/napalm/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) - M.adjust_fire_stacks(min(volume/4, 20)) - /datum/chemical_reaction/napalm name = "Napalm" id = "napalm" @@ -452,13 +330,6 @@ required_reagents = list("sugar" = 1, "fuel" = 1, "ethanol" = 1 ) result_amount = 1 -/datum/reagent/cryostylane - name = "Cryostylane" - id = "cryostylane" - description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Cryostylane slowly cools all other reagents in the mob down to 0K." - color = "#B2B2FF" // rgb: 139, 166, 233 - process_flags = ORGANIC | SYNTHETIC - /datum/chemical_reaction/cryostylane name = "cryostylane" id = "cryostylane" @@ -467,31 +338,6 @@ result_amount = 3 mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' -/datum/reagent/cryostylane/on_mob_life(mob/living/M) //TODO: code freezing into an ice cube - if(M.reagents.has_reagent("oxygen")) - M.reagents.remove_reagent("oxygen", 1) - M.bodytemperature -= 30 - ..() - -/datum/reagent/cryostylane/on_tick() - if(holder.has_reagent("oxygen")) - holder.remove_reagent("oxygen", 1) - holder.chem_temp -= 10 - holder.handle_reactions() - ..() - -/datum/reagent/cryostylane/reaction_turf(turf/T, volume) - if(volume >= 5) - for(var/mob/living/carbon/slime/M in T) - M.adjustToxLoss(rand(15,30)) - -/datum/reagent/pyrosium - name = "Pyrosium" - id = "pyrosium" - description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Pyrosium slowly cools all other reagents in the mob down to 0K." - color = "#B20000" // rgb: 139, 166, 233 - process_flags = ORGANIC | SYNTHETIC - /datum/chemical_reaction/pyrosium name = "pyrosium" id = "pyrosium" @@ -499,19 +345,6 @@ required_reagents = list("plasma" = 1, "radium" = 1, "phosphorus" = 1) result_amount = 3 -/datum/reagent/pyrosium/on_mob_life(mob/living/M) - if(M.reagents.has_reagent("oxygen")) - M.reagents.remove_reagent("oxygen", 1) - M.bodytemperature += 30 - ..() - -/datum/reagent/pyrosium/on_tick() - if(holder.has_reagent("oxygen")) - holder.remove_reagent("oxygen", 1) - holder.chem_temp += 10 - holder.handle_reactions() - ..() - /datum/chemical_reaction/azide name = "azide" id = "azide" @@ -525,14 +358,6 @@ var/location = get_turf(holder.my_atom) explosion(location, 0, 1, 4) -/datum/reagent/firefighting_foam - name = "Firefighting foam" - id = "firefighting_foam" - description = "Carbon Tetrachloride is a foam used for fire suppression." - reagent_state = LIQUID - color = "#A0A090" - var/cooling_temperature = 3 // more effective than water - /datum/chemical_reaction/firefighting_foam name = "firefighting_foam" id = "firefighting_foam" @@ -542,29 +367,6 @@ mix_message = "The mixture bubbles gently." mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' -/datum/reagent/firefighting_foam/reaction_mob(mob/living/M, method=TOUCH, volume) -// Put out fire - if(method == TOUCH) - M.adjust_fire_stacks(-(volume / 5)) // more effective than water - M.ExtinguishMob() - -/datum/reagent/firefighting_foam/reaction_obj(obj/O, volume) - if(istype(O)) - O.extinguish() - -/datum/reagent/firefighting_foam/reaction_turf(turf/simulated/T, volume) - if(!istype(T)) - return - var/CT = cooling_temperature - new /obj/effect/decal/cleanable/flour/foam(T) //foam mess; clears up quickly. - var/hotspot = (locate(/obj/effect/hotspot) in T) - if(hotspot) - var/datum/gas_mixture/lowertemp = T.remove_air(T.air.total_moles()) - lowertemp.temperature = max(min(lowertemp.temperature-(CT*1000), lowertemp.temperature / CT), 0) - lowertemp.react() - T.assume_air(lowertemp) - qdel(hotspot) - /datum/chemical_reaction/clf3_firefighting name = "clf3_firefighting" id = "clf3_firefighting" @@ -595,30 +397,9 @@ holder.del_reagent("teslium") //Clear all remaining Teslium and Uranium, but leave all other reagents untouched. holder.del_reagent("uranium") -/datum/reagent/plasma_dust - name = "Plasma Dust" - id = "plasma_dust" - description = "A fine dust of plasma. This chemical has unusual mutagenic properties for viruses and slimes alike." - color = "#500064" // rgb: 80, 0, 100 - -/datum/reagent/plasma_dust/on_mob_life(mob/living/M) - M.adjustToxLoss(3) - if(iscarbon(M)) - var/mob/living/carbon/C = M - C.adjustPlasma(20) - ..() - -/datum/reagent/plasma_dust/reaction_obj(obj/O, volume) - if((!O) || (!volume)) - return 0 - O.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C, volume) - -/datum/reagent/plasma_dust/reaction_turf(turf/simulated/T, volume) - if(istype(T)) - T.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C, volume) - -/datum/reagent/plasma_dust/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with plasma dust is stronger than fuel! - if(method == TOUCH) - M.adjust_fire_stacks(volume / 5) - return - ..() +/datum/chemical_reaction/thermite + name = "Thermite" + id = "thermite" + result = "thermite" + required_reagents = list("aluminum" = 1, "iron" = 1, "oxygen" = 1) + result_amount = 3 \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm similarity index 100% rename from code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm rename to code/modules/reagents/chemistry/recipes/slime_extracts.dm diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm new file mode 100644 index 00000000000..2181401b2da --- /dev/null +++ b/code/modules/reagents/chemistry/recipes/toxins.dm @@ -0,0 +1,142 @@ +/datum/chemical_reaction/formaldehyde + name = "formaldehyde" + id = "formaldehyde" + result = "formaldehyde" + required_reagents = list("ethanol" = 1, "oxygen" = 1, "silver" = 1) + result_amount = 3 + min_temp = 420 + mix_message = "Ugh, it smells like the morgue in here." + +/datum/chemical_reaction/neurotoxin2 + name = "neurotoxin2" + id = "neurotoxin2" + result = "neurotoxin2" + required_reagents = list("space_drugs" = 1) + result_amount = 1 + min_temp = 674 + mix_sound = null + no_message = 1 + +/datum/chemical_reaction/cyanide + name = "Cyanide" + id = "cyanide" + result = "cyanide" + required_reagents = list("oil" = 1, "ammonia" = 1, "oxygen" = 1) + result_amount = 3 + min_temp = 380 + mix_message = "The mixture gives off a faint scent of almonds." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/cyanide/on_reaction(datum/reagents/holder) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The solution generates a strong vapor!") + for(var/mob/living/carbon/C in range(T, 1)) + if(C.can_breathe_gas()) + C.reagents.add_reagent("cyanide", 7) + +/datum/chemical_reaction/itching_powder + name = "Itching Powder" + id = "itching_powder" + result = "itching_powder" + required_reagents = list("fuel" = 1, "ammonia" = 1, "fungus" = 1) + result_amount = 3 + mix_message = "The mixture congeals and dries up, leaving behind an abrasive powder." + mix_sound = 'sound/effects/blobattack.ogg' + +/datum/chemical_reaction/facid + name = "Fluorosulfuric Acid" + id = "facid" + result = "facid" + required_reagents = list("sacid" = 1, "fluorine" = 1, "hydrogen" = 1, "potassium" = 1) + result_amount = 4 + min_temp = 380 + mix_message = "The mixture deepens to a dark blue, and slowly begins to corrode its container." + +/datum/chemical_reaction/initropidril + name = "Initropidril" + id = "initropidril" + result = "initropidril" + required_reagents = list("crank" = 1, "histamine" = 1, "krokodil" = 1, "bath_salts" = 1, "atropine" = 1, "nicotine" = 1, "morphine" = 1) + result_amount = 4 + mix_message = "A sweet and sugary scent drifts from the unpleasant milky substance." + +/datum/chemical_reaction/sulfonal + name = "sulfonal" + id = "sulfonal" + result = "sulfonal" + required_reagents = list("acetone" = 1, "diethylamine" = 1, "sulfur" = 1) + result_amount = 3 + mix_message = "The mixture gives off quite a stench." + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/lipolicide + name = "lipolicide" + id = "lipolicide" + result = "lipolicide" + required_reagents = list("mercury" = 1, "diethylamine" = 1, "ephedrine" = 1) + result_amount = 3 + +/datum/chemical_reaction/sarin + name = "sarin" + id = "sarin" + result = "sarin" + required_reagents = list("chlorine" = 1, "fuel" = 1, "oxygen" = 1, "phosphorus" = 1, "fluorine" = 1, "hydrogen" = 1, "acetone" = 1, "atrazine" = 1) + result_amount = 3 + mix_message = "The mixture yields a colorless, odorless liquid." + min_temp = 374 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/sarin/on_reaction(datum/reagents/holder) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The solution generates a strong vapor!") + for(var/mob/living/carbon/C in range(T, 2)) + if(C.can_breathe_gas()) + C.reagents.add_reagent("sarin", 4) + +/datum/chemical_reaction/atrazine + name = "atrazine" + id = "atrazine" + result = "atrazine" + required_reagents = list("chlorine" = 1, "hydrogen" = 1, "nitrogen" = 1) + result_amount = 3 + mix_message = "The mixture gives off a harsh odor" + +/datum/chemical_reaction/capulettium + name = "capulettium" + id = "capulettium" + result = "capulettium" + required_reagents = list("neurotoxin2" = 1, "chlorine" = 1, "hydrogen" = 1) + result_amount = 1 + mix_message = "The smell of death wafts up from the solution." + +/datum/chemical_reaction/capulettium_plus + name = "capulettium_plus" + id = "capulettium_plus" + result = "capulettium_plus" + required_reagents = list("capulettium" = 1, "ephedrine" = 1, "methamphetamine" = 1) + result_amount = 3 + mix_message = "The solution begins to slosh about violently by itself." + +/datum/chemical_reaction/teslium + name = "Teslium" + id = "teslium" + result = "teslium" + required_reagents = list("plasma" = 1, "silver" = 1, "blackpowder" = 1) + result_amount = 3 + mix_message = "A jet of sparks flies from the mixture as it merges into a flickering slurry." + min_temp = 400 + mix_sound = null + +/datum/chemical_reaction/teslium/on_reaction(datum/reagents/holder, created_volume) + var/location = get_turf(holder.my_atom) + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread + s.set_up(6, 1, location) + s.start() + +/datum/chemical_reaction/mutagen + name = "Unstable mutagen" + id = "mutagen" + result = "mutagen" + required_reagents = list("radium" = 1, "plasma" = 1, "chlorine" = 1) + result_amount = 3 + mix_message = "The substance turns neon green and bubbles unnervingly." \ No newline at end of file diff --git a/code/modules/reagents/newchem/drinks.dm b/code/modules/reagents/newchem/drinks.dm deleted file mode 100644 index da07f7a995f..00000000000 --- a/code/modules/reagents/newchem/drinks.dm +++ /dev/null @@ -1,238 +0,0 @@ -/datum/reagent/ginsonic - name = "Gin and sonic" - id = "ginsonic" - description = "GOTTA GET CRUNK FAST BUT LIQUOR TOO SLOW" - reagent_state = LIQUID - color = "#1111CF" - -/datum/chemical_reaction/ginsonic - name = "ginsonic" - id = "ginsonic" - result = "ginsonic" - required_reagents = list("gintonic" = 1, "methamphetamine" = 1) - result_amount = 2 - mix_message = "The drink turns electric blue and starts quivering violently." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - -/datum/reagent/ginsonic/on_mob_life(mob/living/M) - M.AdjustDrowsy(-5) - if(prob(25)) - M.AdjustParalysis(-1) - M.AdjustStunned(-1) - M.AdjustWeakened(-1) - if(prob(8)) - M.reagents.add_reagent("methamphetamine",1.2) - var/sonic_message = pick("Gotta go fast!", "Time to speed, keed!", "I feel a need for speed!", "Let's juice.", "Juice time.", "Way Past Cool!") - if(prob(50)) - M.say("[sonic_message]") - else - to_chat(M, "[sonic_message ]") - ..() - -/datum/reagent/ethanol/applejack - name = "Applejack" - id = "applejack" - description = "A highly concentrated alcoholic beverage made by repeatedly freezing cider and removing the ice." - color = "#997A00" - alcohol_perc = 0.4 - -/datum/chemical_reaction/applejack - name = "applejack" - id = "applejack" - result = "applejack" - required_reagents = list("cider" = 2) - max_temp = 270 - result_amount = 1 - mix_message = "The drink darkens as the water freezes, leaving the concentrated cider behind." - mix_sound = null - -/datum/reagent/ethanol/jackrose - name = "Jack Rose" - id = "jackrose" - description = "A classic cocktail that had fallen out of fashion, but never out of taste," - color = "#664300" - alcohol_perc = 0.4 - -/datum/chemical_reaction/jackrose - name = "jackrose" - id = "jackrose" - result = "jackrose" - required_reagents = list("applejack" = 4, "lemonjuice" = 1) - result_amount = 5 - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - - -/datum/reagent/ethanol/dragons_breath //inaccessible to players, but here for admin shennanigans - name = "Dragon's Breath" - id = "dragonsbreath" - description = "Possessing this stuff probably breaks the Geneva convention." - reagent_state = LIQUID - color = "#DC0000" - alcohol_perc = 1 - -/datum/reagent/ethanol/dragons_breath/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == INGEST && prob(20)) - if(M.on_fire) - M.adjust_fire_stacks(3) - -/datum/reagent/ethanol/dragons_breath/on_mob_life(mob/living/M) - if(M.reagents.has_reagent("milk")) - to_chat(M, "The milk stops the burning. Ahhh.") - M.reagents.del_reagent("milk") - M.reagents.del_reagent("dragonsbreath") - return - if(prob(8)) - to_chat(M, "Oh god! Oh GODD!!") - if(prob(50)) - to_chat(M, "Your throat burns terribly!") - M.emote(pick("scream","cry","choke","gasp")) - M.Stun(1) - if(prob(8)) - to_chat(M, "Why!? WHY!?") - if(prob(8)) - to_chat(M, "ARGHHHH!") - if(prob(2 * volume)) - to_chat(M, "OH GOD OH GOD PLEASE NO!!
") - if(M.on_fire) - M.adjust_fire_stacks(5) - if(prob(50)) - to_chat(M, "IT BURNS!!!!") - M.visible_message("[M] is consumed in flames!") - M.dust() - return - ..() - -// ROBOT ALCOHOL PAST THIS POINT -// WOOO! - - -/datum/reagent/ethanol/synthanol - name = "Synthanol" - id = "synthanol" - description = "A runny liquid with conductive capacities. Its effects on synthetics are similar to those of alcohol on organics." - reagent_state = LIQUID - color = "#1BB1FF" - process_flags = ORGANIC | SYNTHETIC - metabolization_rate = 0.4 - alcohol_perc = 0.5 - -/datum/chemical_reaction/synthanol - name = "Synthanol" - id = "synthanol" - result = "synthanol" - required_reagents = list("lube" = 1, "plasma" = 1, "fuel" = 1) - result_amount = 3 - mix_message = "The chemicals mix to create shiny, blue substance." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - -/datum/reagent/ethanol/synthanol/on_mob_life(mob/living/M) - if(!M.isSynthetic()) - holder.remove_reagent(id, 3.6) //gets removed from organics very fast - if(prob(25)) - holder.remove_reagent(id, 15) - M.fakevomit() - ..() - -/datum/reagent/ethanol/synthanol/reaction_mob(mob/living/M, method=TOUCH, volume) - if(M.isSynthetic()) - return - if(method == INGEST) - to_chat(M, pick("That was awful!", "Yuck!")) - -/datum/reagent/ethanol/synthanol/robottears - name = "Robot Tears" - id = "robottears" - description = "An oily substance that an IPC could technically consider a 'drink'." - reagent_state = LIQUID - color = "#363636" - alcohol_perc = 0.25 - -/datum/chemical_reaction/synthanol/robottears - name = "Robot Tears" - id = "robottears" - result = "robottears" - required_reagents = list("synthanol" = 1, "oil" = 1, "sodawater" = 1) - result_amount = 3 - mix_message = "The ingredients combine into a stiff, dark goo." - -/datum/reagent/ethanol/synthanol/trinary - name = "Trinary" - id = "trinary" - description = "A fruit drink meant only for synthetics, however that works." - reagent_state = LIQUID - color = "#adb21f" - alcohol_perc = 0.2 - -/datum/chemical_reaction/synthanol/trinary - name = "Trinary" - id = "trinary" - result = "trinary" - required_reagents = list("synthanol" = 1, "limejuice" = 1, "orangejuice" = 1) - result_amount = 3 - mix_message = "The ingredients mix into a colorful substance." - -/datum/reagent/ethanol/synthanol/servo - name = "Servo" - id = "servo" - description = "A drink containing some organic ingredients, but meant only for synthetics." - reagent_state = LIQUID - color = "#5b3210" - alcohol_perc = 0.25 - -/datum/chemical_reaction/synthanol/servo - name = "Servo" - id = "servo" - result = "servo" - required_reagents = list("synthanol" = 2, "cream" = 1, "hot_coco" = 1) - result_amount = 4 - mix_message = "The ingredients mix into a dark brown substance." - -/datum/reagent/ethanol/synthanol/uplink - name = "Uplink" - id = "uplink" - description = "A potent mix of alcohol and synthanol. Will only work on synthetics." - reagent_state = LIQUID - color = "#e7ae04" - alcohol_perc = 0.15 - -/datum/chemical_reaction/synthanol/uplink - name = "Uplink" - id = "uplink" - result = "uplink" - required_reagents = list("rum" = 1, "vodka" = 1, "tequila" = 1, "whiskey" = 1, "synthanol" = 1) - result_amount = 5 - mix_message = "The chemicals mix to create a shiny, orange substance." - -/datum/reagent/ethanol/synthanol/synthnsoda - name = "Synth 'n Soda" - id = "synthnsoda" - description = "The classic drink adjusted for a robot's tastes." - reagent_state = LIQUID - color = "#7204e7" - alcohol_perc = 0.25 - -/datum/chemical_reaction/synthanol/synthnsoda - name = "Synth 'n Soda" - id = "synthnsoda" - result = "synthnsoda" - required_reagents = list("synthanol" = 1, "cola" = 1) - result_amount = 2 - mix_message = "The chemicals mix to create a smooth, fizzy substance." - -/datum/reagent/ethanol/synthanol/synthignon - name = "Synthignon" - id = "synthignon" - description = "Someone mixed wine and alcohol for robots. Hope you're proud of yourself." - reagent_state = LIQUID - color = "#d004e7" - alcohol_perc = 0.25 - -/datum/chemical_reaction/synthanol/synthignon - name = "Synthignon" - id = "synthignon" - result = "synthignon" - required_reagents = list("synthanol" = 1, "wine" = 1) - result_amount = 2 - mix_message = "The chemicals mix to create a fine, red substance." - -// ROBOT ALCOHOL ENDS diff --git a/code/modules/reagents/newchem/newchem_procs.dm b/code/modules/reagents/newchem/newchem_procs.dm deleted file mode 100644 index 7ad083407d9..00000000000 --- a/code/modules/reagents/newchem/newchem_procs.dm +++ /dev/null @@ -1,212 +0,0 @@ -#define ADDICTION_TIME 4800 //8 minutes - -/datum/reagent - var/overdose_threshold = 0 - var/addiction_chance = 0 - var/addiction_stage = 1 - var/last_addiction_dose = 0 - var/overdosed = 0 // You fucked up and this is now triggering it's overdose effects, purge that shit quick. - var/current_cycle = 1 - -/datum/reagents/proc/metabolize(mob/living/M) - if(M) - chem_temp = M.bodytemperature - handle_reactions() - for(var/A in reagent_list) - var/datum/reagent/R = A - if(!istype(R)) // How are non-reagents ending up in the reagents_list? - continue - if(!R.holder) - continue - if(!M) - M = R.holder.my_atom - if(ishuman(M)) - var/mob/living/carbon/human/H = M - //Check if this mob's species is set and can process this type of reagent - var/can_process = 0 - //If we somehow avoided getting a species or reagent_tag set, we'll assume we aren't meant to process ANY reagents (CODERS: SET YOUR SPECIES AND TAG!) - if(H.species && H.species.reagent_tag) - if((R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_SYN)) //SYNTHETIC-oriented reagents require PROCESS_SYN - can_process = 1 - if((R.process_flags & ORGANIC) && (H.species.reagent_tag & PROCESS_ORG)) //ORGANIC-oriented reagents require PROCESS_ORG - can_process = 1 - //Species with PROCESS_DUO are only affected by reagents that affect both organics and synthetics, like acid and hellwater - if((R.process_flags & ORGANIC) && (R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_DUO)) - can_process = 1 - - //If handle_reagents returns 0, it's doing the reagent removal on its own - var/species_handled = !(H.species.handle_reagents(H, R)) - can_process = can_process && !species_handled - //If the mob can't process it, remove the reagent at it's normal rate without doing any addictions, overdoses, or on_mob_life() for the reagent - if(can_process == 0) - if(!species_handled) - R.holder.remove_reagent(R.id, R.metabolization_rate) - continue - //We'll assume that non-human mobs lack the ability to process synthetic-oriented reagents (adjust this if we need to change that assumption) - else - if(R.process_flags == SYNTHETIC) - R.holder.remove_reagent(R.id, R.metabolization_rate) - continue - //If you got this far, that means we can process whatever reagent this iteration is for. Handle things normally from here. - if(M && R) - R.on_mob_life(M) - if(R.volume >= R.overdose_threshold && !R.overdosed && R.overdose_threshold > 0) - R.overdosed = 1 - R.overdose_start(M) - if(R.volume < R.overdose_threshold && R.overdosed) - R.overdosed = 0 - if(R.overdosed) - R.overdose_process(M, R.volume >= R.overdose_threshold*2 ? 2 : 1) - - for(var/A in addiction_list) - var/datum/reagent/R = A - if(M && R) - if(R.addiction_stage < 5) - if(prob(5)) - R.addiction_stage++ - switch(R.addiction_stage) - if(1) - R.addiction_act_stage1(M) - if(2) - R.addiction_act_stage2(M) - if(3) - R.addiction_act_stage3(M) - if(4) - R.addiction_act_stage4(M) - if(5) - R.addiction_act_stage5(M) - if(prob(20) && (world.timeofday > (R.last_addiction_dose + ADDICTION_TIME))) //Each addiction lasts 8 minutes before it can end - to_chat(M, "You no longer feel reliant on [R.name]!") - addiction_list.Remove(R) - update_total() - -/datum/reagents/proc/death_metabolize(mob/living/M) - if(!M) - return - if(M.stat != DEAD) //what part of DEATH_metabolize don't you get? - return - for(var/A in reagent_list) - var/datum/reagent/R = A - if(!istype(R)) - continue - if(M && R) - R.on_mob_death(M) - -/datum/reagents/proc/overdose_list() - var/od_chems[0] - for(var/datum/reagent/R in reagent_list) - if(R.overdosed) - od_chems.Add(R.id) - return od_chems - - -/datum/reagents/proc/reagent_on_tick() - for(var/datum/reagent/R in reagent_list) - R.on_tick() - return - -// Called every time reagent containers process. -/datum/reagent/proc/on_tick(data) - return - -// Called when the reagent container is hit by an explosion -/datum/reagent/proc/on_ex_act(severity) - return - -// Called if the reagent has passed the overdose threshold and is set to be triggering overdose effects -/datum/reagent/proc/overdose_process(mob/living/M, severity) - var/effect = rand(1, 100) - severity - if(effect <= 8) - M.adjustToxLoss(severity) - return effect - -/datum/reagent/proc/overdose_start(mob/living/M) - return - -/datum/reagent/proc/addiction_act_stage1(mob/living/M) - return - -/datum/reagent/proc/addiction_act_stage2(mob/living/M) - if(prob(8)) - M.emote("shiver") - if(prob(8)) - M.emote("sneeze") - if(prob(4)) - to_chat(M, "You feel a dull headache.") - -/datum/reagent/proc/addiction_act_stage3(mob/living/M) - if(prob(8)) - M.emote("twitch_s") - if(prob(8)) - M.emote("shiver") - if(prob(4)) - to_chat(M, "You begin craving [name]!") - -/datum/reagent/proc/addiction_act_stage4(mob/living/M) - if(prob(8)) - M.emote("twitch") - if(prob(4)) - to_chat(M, "You have the strong urge for some [name]!") - if(prob(4)) - to_chat(M, "You REALLY crave some [name]!") - -/datum/reagent/proc/addiction_act_stage5(mob/living/M) - if(prob(8)) - M.emote("twitch") - if(prob(6)) - to_chat(M, "Your stomach lurches painfully!") - M.visible_message("[M] gags and retches!") - M.Stun(rand(2,4)) - M.Weaken(rand(2,4)) - if(prob(5)) - to_chat(M, "You feel like you can't live without [name]!") - if(prob(5)) - to_chat(M, "You would DIE for some [name] right now!") - -/datum/reagent/proc/reagent_deleted() - return - -var/list/chemical_mob_spawn_meancritters = list() // list of possible hostile mobs -var/list/chemical_mob_spawn_nicecritters = list() // and possible friendly mobs -/datum/chemical_reaction/proc/chemical_mob_spawn(datum/reagents/holder, amount_to_spawn, reaction_name, mob_faction = "chemicalsummon") - if(holder && holder.my_atom) - if(chemical_mob_spawn_meancritters.len <= 0 || chemical_mob_spawn_nicecritters.len <= 0) - for(var/T in typesof(/mob/living/simple_animal)) - var/mob/living/simple_animal/SA = T - switch(initial(SA.gold_core_spawnable)) - if(CHEM_MOB_SPAWN_HOSTILE) - chemical_mob_spawn_meancritters += T - if(CHEM_MOB_SPAWN_FRIENDLY) - chemical_mob_spawn_nicecritters += T - var/atom/A = holder.my_atom - var/turf/T = get_turf(A) - var/area/my_area = get_area(T) - var/message = "A [reaction_name] reaction has occured in [my_area.name]. (JMP)" - message += " (VV)" - - var/mob/M = get(A, /mob) - if(M) - message += " - Carried By: [key_name_admin(M)](?) (FLW)" - else - message += " - Last Fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]" - - message_admins(message, 0, 1) - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - - for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null)) - C.flash_eyes() - for(var/i = 1, i <= amount_to_spawn, i++) - var/chosen - if(reaction_name == "Friendly Gold Slime") - chosen = pick(chemical_mob_spawn_nicecritters) - else - chosen = pick(chemical_mob_spawn_meancritters) - var/mob/living/simple_animal/C = new chosen - C.faction |= mob_faction - C.forceMove(get_turf(holder.my_atom)) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(C, pick(NORTH,SOUTH,EAST,WEST)) - -#undef ADDICTION_TIME \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm b/code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm deleted file mode 100644 index 3b4cc507415..00000000000 --- a/code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm +++ /dev/null @@ -1,23 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/datum/chemical_reaction - var/name = null - var/id = null - var/result = null - var/list/required_reagents = list() - var/list/required_catalysts = list() - - // Both of these variables are mostly going to be used with slime cores - but if you want to, you can use them for other things - var/atom/required_container = null // the container required for the reaction to happen - var/required_other = 0 // an integer required for the reaction to happen - - var/result_amount = 0 - var/secondary = 0 // set to nonzero if secondary reaction - var/list/secondary_results = list() //additional reagents produced by the reaction - var/min_temp = 0 //Minimum temperature required for the reaction to occur (heat to/above this). min_temp = 0 means no requirement - var/max_temp = 9999 //Maximum temperature allowed for the reaction to occur (cool to/below this). - var/mix_message = "The solution begins to bubble." - var/mix_sound = 'sound/effects/bubbles.ogg' - var/no_message = 0 - -/datum/chemical_reaction/proc/on_reaction(datum/reagents/holder, created_volume) - return \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm deleted file mode 100644 index afcd0d398ce..00000000000 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm +++ /dev/null @@ -1,71 +0,0 @@ -//Anything for harm or hostile intents go here (explosions, EMPs, thermite, mutagen) -/datum/chemical_reaction/explosion_potassium - name = "Explosion" - id = "explosion_potassium" - result = null - required_reagents = list("water" = 1, "potassium" = 1) - result_amount = 2 - mix_message = "The mixture explodes!" - -/datum/chemical_reaction/explosion_potassium/on_reaction(datum/reagents/holder, created_volume) - var/datum/effect/system/reagents_explosion/e = new() - e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0) - e.start() - holder.clear_reagents() - -/datum/chemical_reaction/emp_pulse - name = "EMP Pulse" - id = "emp_pulse" - result = null - required_reagents = list("uranium" = 1, "iron" = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense - result_amount = 2 - -/datum/chemical_reaction/emp_pulse/on_reaction(datum/reagents/holder, created_volume) - var/location = get_turf(holder.my_atom) - // 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes. - // 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades. - empulse(location, round(created_volume / 24), round(created_volume / 14), 1) - holder.clear_reagents() - -/datum/chemical_reaction/mutagen - name = "Unstable mutagen" - id = "mutagen" - result = "mutagen" - required_reagents = list("radium" = 1, "plasma" = 1, "chlorine" = 1) - result_amount = 3 - mix_message = "The substance turns neon green and bubbles unnervingly." - -/datum/chemical_reaction/thermite - name = "Thermite" - id = "thermite" - result = "thermite" - required_reagents = list("aluminum" = 1, "iron" = 1, "oxygen" = 1) - result_amount = 3 - -/datum/chemical_reaction/glycerol - name = "Glycerol" - id = "glycerol" - result = "glycerol" - required_reagents = list("cornoil" = 3, "sacid" = 1) - result_amount = 1 - -/datum/chemical_reaction/nitroglycerin - name = "Nitroglycerin" - id = "nitroglycerin" - result = "nitroglycerin" - required_reagents = list("glycerol" = 1, "facid" = 1, "sacid" = 1) - result_amount = 2 - -/datum/chemical_reaction/nitroglycerin/on_reaction(datum/reagents/holder, created_volume) - var/datum/effect/system/reagents_explosion/e = new() - e.set_up(round(created_volume/2, 1), holder.my_atom, 0, 0) - e.start() - holder.clear_reagents() - -/datum/chemical_reaction/condensedcapsaicin - name = "Condensed Capsaicin" - id = "condensedcapsaicin" - result = "condensedcapsaicin" - required_reagents = list("capsaicin" = 2) - required_catalysts = list("plasma" = 5) - result_amount = 1 \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm deleted file mode 100644 index 0550813849c..00000000000 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm +++ /dev/null @@ -1,44 +0,0 @@ -/datum/chemical_reaction/hydrocodone - name = "Hydrocodone" - id = "hydrocodone" - result = "hydrocodone" - required_reagents = list("morphine" = 1, "sacid" = 1, "water" = 1, "oil" = 1) - result_amount = 2 - -/datum/chemical_reaction/mitocholide - name = "mitocholide" - id = "mitocholide" - result = "mitocholide" - required_reagents = list("synthflesh" = 1, "cryoxadone" = 1, "plasma" = 1) - result_amount = 3 - -/datum/chemical_reaction/cryoxadone - name = "Cryoxadone" - id = "cryoxadone" - result = "cryoxadone" - required_reagents = list("cryostylane" = 1, "plasma" = 1, "acetone" = 1, "mutagen" = 1) - result_amount = 4 - mix_message = "The solution bubbles softly." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' - -/datum/chemical_reaction/spaceacillin - name = "Spaceacillin" - id = "spaceacillin" - result = "spaceacillin" - required_reagents = list("fungus" = 1, "ethanol" = 1) - result_amount = 2 - mix_message = "The solvent extracts an antibiotic compound from the fungus." - -/datum/chemical_reaction/rezadone - name = "Rezadone" - id = "rezadone" - result = "rezadone" - required_reagents = list("carpotoxin" = 1, "spaceacillin" = 1, "copper" = 1) - result_amount = 3 - -/datum/chemical_reaction/sterilizine - name = "Sterilizine" - id = "sterilizine" - result = "sterilizine" - required_reagents = list("antihol" = 2, "chlorine" = 1) - result_amount = 3 diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm deleted file mode 100644 index 8a5dedf218b..00000000000 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm +++ /dev/null @@ -1,147 +0,0 @@ -// foam and foam precursor - -/datum/chemical_reaction/surfactant - name = "Foam surfactant" - id = "foam surfactant" - result = "fluorosurfactant" - required_reagents = list("fluorine" = 2, "carbon" = 2, "sacid" = 1) - result_amount = 5 - mix_message = "A head of foam results from the mixture's constant fizzing." - -/datum/chemical_reaction/foam - name = "Foam" - id = "foam" - result = null - required_reagents = list("fluorosurfactant" = 1, "water" = 1) - result_amount = 2 - -/datum/chemical_reaction/foam/on_reaction(datum/reagents/holder, created_volume) - var/location = get_turf(holder.my_atom) - holder.my_atom.visible_message("The solution spews out foam!") - - var/datum/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 0) - s.start() - holder.clear_reagents() - - -/datum/chemical_reaction/metalfoam - name = "Metal Foam" - id = "metalfoam" - result = null - required_reagents = list("aluminum" = 3, "fluorosurfactant" = 1, "sacid" = 1) - result_amount = 5 - -/datum/chemical_reaction/metalfoam/on_reaction(datum/reagents/holder, created_volume) - var/location = get_turf(holder.my_atom) - - holder.my_atom.visible_message("The solution spews out a metalic foam!") - - var/datum/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, MFOAM_ALUMINUM) - s.start() - - -/datum/chemical_reaction/ironfoam - name = "Iron Foam" - id = "ironlfoam" - result = null - required_reagents = list("iron" = 3, "fluorosurfactant" = 1, "sacid" = 1) - result_amount = 5 - -/datum/chemical_reaction/ironfoam/on_reaction(datum/reagents/holder, created_volume) - var/location = get_turf(holder.my_atom) - - holder.my_atom.visible_message("= 5 && istype(W)) - W.thermite = 1 - W.overlays.Cut() - W.overlays = image('icons/effects/effects.dmi',icon_state = "thermite") - -/datum/reagent/glycerol - name = "Glycerol" - id = "glycerol" - description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity." - reagent_state = LIQUID - color = "#808080" // rgb: 128, 128, 128 diff --git a/code/modules/reagents/oldchem/reagents/reagents_food.dm b/code/modules/reagents/oldchem/reagents/reagents_food.dm deleted file mode 100644 index de52805fef2..00000000000 --- a/code/modules/reagents/oldchem/reagents/reagents_food.dm +++ /dev/null @@ -1,393 +0,0 @@ -/////////////////////////Food Reagents//////////////////////////// -// Part of the food code. Nutriment is used instead of the old "heal_amt" code. Also is where all the food -// condiments, additives, and such go. -/datum/reagent/nutriment // Pure nutriment, universally digestable and thus slightly less effective - name = "Nutriment" - id = "nutriment" - description = "A questionable mixture of various pure nutrients commonly found in processed foods." - reagent_state = SOLID - nutriment_factor = 12 * REAGENTS_METABOLISM - color = "#664330" // rgb: 102, 67, 48 - var/diet_flags = DIET_OMNI | DIET_HERB | DIET_CARN - -/datum/reagent/nutriment/on_mob_life(mob/living/M) - if(!(M.mind in ticker.mode.vampires)) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients - H.nutrition += nutriment_factor // For hunger and fatness - if(prob(50)) - M.adjustBruteLoss(-1) - if(H.species.exotic_blood) - H.vessel.add_reagent(H.species.exotic_blood, 0.4) - else - if(!(H.species.flags & NO_BLOOD)) - H.vessel.add_reagent("blood", 0.4) - ..() - -/datum/reagent/nutriment/protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores - name = "Protein" - id = "protein" - description = "Various essential proteins and fats commonly found in animal flesh and blood." - nutriment_factor = 15 * REAGENTS_METABOLISM - diet_flags = DIET_CARN | DIET_OMNI - -/datum/reagent/nutriment/plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores - name = "Plant-matter" - id = "plantmatter" - description = "Vitamin-rich fibers and natural sugars commonly found in fresh produce." - nutriment_factor = 15 * REAGENTS_METABOLISM - diet_flags = DIET_HERB | DIET_OMNI - - -/datum/reagent/vitamin - name = "Vitamin" - id = "vitamin" - description = "All the best vitamins, minerals, and carbohydrates the body needs in pure form." - reagent_state = SOLID - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#664330" // rgb: 102, 67, 48 - -/datum/reagent/vitamin/on_mob_life(mob/living/M) //everyone needs vitamins, so this works on everyone, regardless of diet or if they're a vampire. - M.nutrition += nutriment_factor - if(prob(50)) - M.adjustBruteLoss(-1) - M.adjustFireLoss(-1) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species.exotic_blood) - H.vessel.add_reagent(H.species.exotic_blood, 0.5) - else - if(!(H.species.flags & NO_BLOOD)) - H.vessel.add_reagent("blood", 0.5) - ..() - -/datum/reagent/soysauce - name = "Soysauce" - id = "soysauce" - description = "A salty sauce made from the soy plant." - reagent_state = LIQUID - nutriment_factor = 2 * REAGENTS_METABOLISM - color = "#792300" // rgb: 121, 35, 0 - -/datum/reagent/ketchup - name = "Ketchup" - id = "ketchup" - description = "Ketchup, catsup, whatever. It's tomato paste." - reagent_state = LIQUID - nutriment_factor = 5 * REAGENTS_METABOLISM - color = "#731008" // rgb: 115, 16, 8 - - -/datum/reagent/capsaicin - name = "Capsaicin Oil" - id = "capsaicin" - description = "This is what makes chilis hot." - reagent_state = LIQUID - color = "#B31008" // rgb: 179, 16, 8 - -/datum/reagent/capsaicin/on_mob_life(mob/living/M) - switch(current_cycle) - if(1 to 15) - M.bodytemperature += 5 * TEMPERATURE_DAMAGE_COEFFICIENT - if(holder.has_reagent("frostoil")) - holder.remove_reagent("frostoil", 5) - if(isslime(M)) - M.bodytemperature += rand(5,20) - if(15 to 25) - M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT - if(isslime(M)) - M.bodytemperature += rand(10,20) - if(25 to 35) - M.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT - if(isslime(M)) - M.bodytemperature += rand(15,20) - if(35 to INFINITY) - M.bodytemperature += 20 * TEMPERATURE_DAMAGE_COEFFICIENT - if(isslime(M)) - M.bodytemperature += rand(20,25) - ..() - -/datum/reagent/frostoil - name = "Frost Oil" - id = "frostoil" - description = "A special oil that noticably chills the body. Extraced from Icepeppers." - reagent_state = LIQUID - color = "#8BA6E9" // rgb: 139, 166, 233 - process_flags = ORGANIC | SYNTHETIC - -/datum/reagent/frostoil/on_mob_life(mob/living/M) - switch(current_cycle) - if(1 to 15) - M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT - if(holder.has_reagent("capsaicin")) - holder.remove_reagent("capsaicin", 5) - if(isslime(M)) - M.bodytemperature -= rand(5,20) - if(15 to 25) - M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT - if(isslime(M)) - M.bodytemperature -= rand(10,20) - if(25 to 35) - M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT - if(prob(1)) - M.emote("shiver") - if(isslime(M)) - M.bodytemperature -= rand(15,20) - if(35 to INFINITY) - M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT - if(prob(1)) - M.emote("shiver") - if(isslime(M)) - M.bodytemperature -= rand(20,25) - ..() - -/datum/reagent/frostoil/reaction_turf(turf/T, volume) - if(volume >= 5) - for(var/mob/living/carbon/slime/M in T) - M.adjustToxLoss(rand(15,30)) - - -/datum/reagent/sodiumchloride - name = "Salt" - id = "sodiumchloride" - description = "Sodium chloride, common table salt." - reagent_state = SOLID - color = "#B1B0B0" - overdose_threshold = 100 - -/datum/reagent/sodiumchloride/overdose_process(mob/living/M, severity) - if(prob(70)) - M.adjustBrainLoss(1) - ..() - -/datum/reagent/blackpepper - name = "Black Pepper" - id = "blackpepper" - description = "A powder ground from peppercorns. *AAAACHOOO*" - reagent_state = SOLID - -/datum/reagent/cocoa - name = "Cocoa Powder" - id = "cocoa" - description = "A fatty, bitter paste made from cocoa beans." - reagent_state = SOLID - nutriment_factor = 5 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - -/datum/reagent/cocoa/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor - ..() - -/datum/reagent/hot_coco - name = "Hot Chocolate" - id = "hot_coco" - description = "Made with love! And cocoa beans." - reagent_state = LIQUID - nutriment_factor = 2 * REAGENTS_METABOLISM - color = "#403010" // rgb: 64, 48, 16 - -/datum/reagent/hot_coco/on_mob_life(mob/living/M) - if(M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) - M.nutrition += nutriment_factor - ..() - -/datum/reagent/sprinkles - name = "Sprinkles" - id = "sprinkles" - description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops." - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#FF00FF" // rgb: 255, 0, 255 - -/datum/reagent/sprinkles/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor - if(ishuman(M) && M.job in list("Security Officer", "Security Pod Pilot", "Detective", "Warden", "Head of Security", "Brig Physician", "Internal Affairs Agent", "Magistrate")) - M.adjustBruteLoss(-1) - M.adjustFireLoss(-1) - ..() - - -/datum/reagent/cornoil - name = "Corn Oil" - id = "cornoil" - description = "An oil derived from various types of corn." - reagent_state = LIQUID - nutriment_factor = 20 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - -/datum/reagent/cornoil/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor - ..() - -/datum/reagent/cornoil/reaction_turf(turf/simulated/T, volume) - if(!istype(T)) - return - if(volume >= 3) - T.MakeSlippery() - var/hotspot = (locate(/obj/effect/hotspot) in T) - if(hotspot) - var/datum/gas_mixture/lowertemp = T.remove_air( T.air.total_moles()) - lowertemp.temperature = max(min(lowertemp.temperature-2000, lowertemp.temperature / 2), 0) - lowertemp.react() - T.assume_air(lowertemp) - qdel(hotspot) - - -/datum/reagent/enzyme - name = "Denatured Enzyme" - id = "enzyme" - description = "Heated beyond usefulness, this enzyme is now worthless." - reagent_state = LIQUID - color = "#282314" // rgb: 54, 94, 48 - - -/datum/reagent/dry_ramen - name = "Dry Ramen" - id = "dry_ramen" - description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water." - reagent_state = SOLID - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - -/datum/reagent/dry_ramen/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor - ..() - - -/datum/reagent/hot_ramen - name = "Hot Ramen" - id = "hot_ramen" - description = "The noodles are boiled, the flavors are artificial, just like being back in school." - reagent_state = LIQUID - nutriment_factor = 5 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - -/datum/reagent/hot_ramen/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor - if(M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT)) - ..() - - -/datum/reagent/hell_ramen - name = "Hell Ramen" - id = "hell_ramen" - description = "The noodles are boiled, the flavors are artificial, just like being back in school." - reagent_state = LIQUID - nutriment_factor = 5 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - -/datum/reagent/hell_ramen/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor - M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT - ..() - - -/datum/reagent/flour - name = "flour" - id = "flour" - description = "This is what you rub all over yourself to pretend to be a ghost." - reagent_state = SOLID - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#FFFFFF" // rgb: 0, 0, 0 - -/datum/reagent/flour/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor - ..() - -/datum/reagent/flour/reaction_turf(turf/T, volume) - if(!istype(T, /turf/space)) - new /obj/effect/decal/cleanable/flour(T) - - -/datum/reagent/rice - name = "Rice" - id = "rice" - description = "Enjoy the great taste of nothing." - reagent_state = SOLID - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#FFFFFF" // rgb: 0, 0, 0 - -/datum/reagent/rice/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor - ..() - - -/datum/reagent/cherryjelly - name = "Cherry Jelly" - id = "cherryjelly" - description = "Totally the best. Only to be spread on foods with excellent lateral symmetry." - reagent_state = LIQUID - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#801E28" // rgb: 128, 30, 40 - -/datum/reagent/cherryjelly/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor - ..() - -/datum/reagent/toxin/coffeepowder - name = "Coffee Grounds" - id = "coffeepowder" - description = "Finely ground Coffee beans, used to make coffee." - reagent_state = SOLID - color = "#5B2E0D" // rgb: 91, 46, 13 - -/datum/reagent/toxin/teapowder - name = "Ground Tea Leaves" - id = "teapowder" - description = "Finely shredded Tea leaves, used for making tea." - reagent_state = SOLID - color = "#7F8400" // rgb: 127, 132, 0 - -//Reagents used for plant fertilizers. -/datum/reagent/toxin/fertilizer - name = "fertilizer" - id = "fertilizer" - description = "A chemical mix good for growing plants with." - reagent_state = LIQUID - color = "#664330" // rgb: 102, 67, 48 - -/datum/reagent/toxin/fertilizer/eznutrient - name = "EZ Nutrient" - id = "eznutrient" - -/datum/reagent/toxin/fertilizer/left4zed - name = "Left-4-Zed" - id = "left4zed" - -/datum/reagent/toxin/fertilizer/robustharvest - name = "Robust Harvest" - id = "robustharvest" - - -/datum/reagent/sugar - name = "Sugar" - id = "sugar" - description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste." - reagent_state = SOLID - color = "#FFFFFF" // rgb: 255, 255, 255 - overdose_threshold = 200 // Hyperglycaemic shock - -/datum/reagent/sugar/on_mob_life(mob/living/M) - M.AdjustDrowsy(-5) - if(current_cycle >= 90) - M.AdjustJitter(2) - if(prob(50)) - M.AdjustParalysis(-1) - M.AdjustStunned(-1) - M.AdjustWeakened(-1) - if(prob(4)) - M.reagents.add_reagent("epinephrine", 1.2) - ..() - -/datum/reagent/sugar/overdose_start(mob/living/M) - to_chat(M, "You pass out from hyperglycemic shock!") - M.emote("collapse") - ..() - -/datum/reagent/sugar/overdose_process(mob/living/M, severity) - M.Paralyse(3 * severity) - M.Weaken(4 * severity) - if(prob(8)) - M.adjustToxLoss(severity) diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm deleted file mode 100644 index b0a09afc999..00000000000 --- a/code/modules/reagents/oldchem/reagents/reagents_med.dm +++ /dev/null @@ -1,142 +0,0 @@ -/datum/reagent/hydrocodone - name = "Hydrocodone" - id = "hydrocodone" - description = "An extremely effective painkiller; may have long term abuse consequences." - reagent_state = LIQUID - color = "#C805DC" - metabolization_rate = 0.3 // Lasts 1.5 minutes for 15 units - shock_reduction = 200 - -/datum/reagent/hydrocodone/on_mob_life(mob/living/M) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.traumatic_shock < 100) - H.shock_stage = 0 - ..() - -/datum/reagent/sterilizine - name = "Sterilizine" - id = "sterilizine" - description = "Sterilizes wounds in preparation for surgery." - reagent_state = LIQUID - color = "#C8A5DC" // rgb: 200, 165, 220 - - //makes you squeaky clean -/datum/reagent/sterilizine/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) - M.germ_level -= min(volume*20, M.germ_level) - -/datum/reagent/sterilizine/reaction_obj(obj/O, volume) - O.germ_level -= min(volume*20, O.germ_level) - -/datum/reagent/sterilizine/reaction_turf(turf/T, volume) - T.germ_level -= min(volume*20, T.germ_level) - -/datum/reagent/synaptizine - name = "Synaptizine" - id = "synaptizine" - description = "Synaptizine is used to treat neuroleptic shock. Can be used to help remove disabling symptoms such as paralysis." - reagent_state = LIQUID - color = "#FA46FA" - overdose_threshold = 40 - -/datum/reagent/synaptizine/on_mob_life(mob/living/M) - M.AdjustDrowsy(-5) - M.AdjustParalysis(-1) - M.AdjustStunned(-1) - M.AdjustWeakened(-1) - M.SetSleeping(0) - if(prob(50)) - M.adjustBrainLoss(-1.0) - ..() - -/datum/reagent/synaptizine/overdose_process(mob/living/M, severity) - var/effect = ..() - if(severity == 1) - if(effect <= 1) - M.visible_message("[M] suddenly and violently vomits!") - M.fakevomit(no_text = 1) - else if(effect <= 3) - M.emote(pick("groan","moan")) - if(effect <= 8) - M.adjustToxLoss(1) - else if(severity == 2) - if(effect <= 2) - M.visible_message("[M] suddenly and violently vomits!") - M.fakevomit(no_text = 1) - else if(effect <= 5) - M.visible_message("[M] staggers and drools, their eyes bloodshot!") - M.Dizzy(8) - M.Weaken(4) - if(effect <= 15) - M.adjustToxLoss(1) - -/datum/reagent/mitocholide - name = "Mitocholide" - id = "mitocholide" - description = "A specialized drug that stimulates the mitochondria of cells to encourage healing of internal organs." - reagent_state = LIQUID - color = "#C8A5DC" // rgb: 200, 165, 220 - -/datum/reagent/mitocholide/on_mob_life(mob/living/M) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - //Mitocholide is hard enough to get, it's probably fair to make this all internal organs - for(var/name in H.internal_organs) - var/obj/item/organ/internal/I = H.get_int_organ(name) - if(I.damage > 0) - I.damage = max(I.damage-0.4, 0) - ..() - -/datum/reagent/mitocholide/reaction_obj(obj/O, volume) - if(istype(O, /obj/item/organ)) - var/obj/item/organ/Org = O - Org.rejuvenate() - -/datum/reagent/cryoxadone - name = "Cryoxadone" - id = "cryoxadone" - description = "A plasma mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 265K for it to metabolise correctly." - reagent_state = LIQUID - color = "#0000C8" // rgb: 200, 165, 220 - heart_rate_decrease = 1 - -/datum/reagent/cryoxadone/on_mob_life(mob/living/M) - if(M.bodytemperature < 265) - M.adjustCloneLoss(-4) - M.adjustOxyLoss(-10) - M.adjustToxLoss(-3) - M.adjustBruteLoss(-12) - M.adjustFireLoss(-12) - M.status_flags &= ~DISFIGURED - ..() - -/datum/reagent/rezadone - name = "Rezadone" - id = "rezadone" - description = "A powder derived from fish toxin, Rezadone can effectively treat genetic damage as well as restoring minor wounds. Overdose will cause intense nausea and minor toxin damage." - reagent_state = SOLID - color = "#669900" // rgb: 102, 153, 0 - overdose_threshold = 30 - -/datum/reagent/rezadone/on_mob_life(mob/living/M) - M.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that. - M.adjustCloneLoss(-1) //What? We just set cloneloss to 0. Why? Simple; this is so external organs properly unmutate. - M.adjustBruteLoss(-1) - M.adjustFireLoss(-1) - M.status_flags &= ~DISFIGURED - ..() - -/datum/reagent/rezadone/overdose_process(mob/living/M, severity) - M.adjustToxLoss(1) - M.Dizzy(5) - M.Jitter(5) - -/datum/reagent/spaceacillin - name = "Spaceacillin" - id = "spaceacillin" - description = "An all-purpose antibiotic agent extracted from space fungus." - reagent_state = LIQUID - color = "#0AB478" - metabolization_rate = 0.2 diff --git a/code/modules/reagents/oldchem/reagents/reagents_misc.dm b/code/modules/reagents/oldchem/reagents/reagents_misc.dm deleted file mode 100644 index ff729dcdf3f..00000000000 --- a/code/modules/reagents/oldchem/reagents/reagents_misc.dm +++ /dev/null @@ -1,189 +0,0 @@ -/*/datum/reagent/silicate - name = "Silicate" - id = "silicate" - description = "A compound that can be used to reinforce glass." - reagent_state = LIQUID - color = "#C7FFFF" // rgb: 199, 255, 255 - -/datum/reagent/silicate/reaction_obj(obj/O, volume) - if(istype(O, /obj/structure/window)) - if(O:silicate <= 200) - - O:silicate += volume - O:health += volume * 3 - - if(!O:silicateIcon) - var/icon/I = icon(O.icon,O.icon_state,O.dir) - - var/r = (volume / 100) + 1 - var/g = (volume / 70) + 1 - var/b = (volume / 50) + 1 - I.SetIntensity(r,g,b) - O.icon = I - O:silicateIcon = I - else - var/icon/I = O:silicateIcon - - var/r = (volume / 100) + 1 - var/g = (volume / 70) + 1 - var/b = (volume / 50) + 1 - I.SetIntensity(r,g,b) - O.icon = I - O:silicateIcon = I */ - - -/datum/reagent/oxygen - name = "Oxygen" - id = "oxygen" - description = "A colorless, odorless gas." - reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 - - -/datum/reagent/nitrogen - name = "Nitrogen" - id = "nitrogen" - description = "A colorless, odorless, tasteless gas." - reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 - - -/datum/reagent/hydrogen - name = "Hydrogen" - id = "hydrogen" - description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas." - reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 - - -/datum/reagent/potassium - name = "Potassium" - id = "potassium" - description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water." - reagent_state = SOLID - color = "#A0A0A0" // rgb: 160, 160, 160 - - -/datum/reagent/sulfur - name = "Sulfur" - id = "sulfur" - description = "A chemical element." - reagent_state = SOLID - color = "#BF8C00" // rgb: 191, 140, 0 - - -/datum/reagent/sodium - name = "Sodium" - id = "sodium" - description = "A chemical element." - reagent_state = SOLID - color = "#808080" // rgb: 128, 128, 128 - - -/datum/reagent/phosphorus - name = "Phosphorus" - id = "phosphorus" - description = "A chemical element." - reagent_state = SOLID - color = "#832828" // rgb: 131, 40, 40 - - -/datum/reagent/carbon - name = "Carbon" - id = "carbon" - description = "A chemical element." - reagent_state = SOLID - color = "#1C1300" // rgb: 30, 20, 0 - -/datum/reagent/carbon/reaction_turf(turf/T, volume) - if(!istype(T, /turf/space) && !(locate(/obj/effect/decal/cleanable/dirt) in T)) // Only add one dirt per turf. Was causing people to crash. - new /obj/effect/decal/cleanable/dirt(T) - -/datum/reagent/gold - name = "Gold" - id = "gold" - description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known." - reagent_state = SOLID - color = "#F7C430" // rgb: 247, 196, 48 - - -/datum/reagent/silver - name = "Silver" - id = "silver" - description = "A lustrous metallic element regarded as one of the precious metals." - reagent_state = SOLID - color = "#D0D0D0" // rgb: 208, 208, 208 - - -/datum/reagent/aluminum - name = "Aluminum" - id = "aluminum" - description = "A silvery white and ductile member of the boron group of chemical elements." - reagent_state = SOLID - color = "#A8A8A8" // rgb: 168, 168, 168 - - -/datum/reagent/silicon - name = "Silicon" - id = "silicon" - description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon." - reagent_state = SOLID - color = "#A8A8A8" // rgb: 168, 168, 168 - - -/datum/reagent/copper - name = "Copper" - id = "copper" - description = "A highly ductile metal." - color = "#6E3B08" // rgb: 110, 59, 8 - - -/datum/reagent/iron - name = "Iron" - id = "iron" - description = "Pure iron is a metal." - reagent_state = SOLID - color = "#C8A5DC" // rgb: 200, 165, 220 - -/datum/reagent/iron/on_mob_life(mob/living/M) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(!H.species.exotic_blood && !(H.species.flags & NO_BLOOD)) - H.vessel.add_reagent("blood", 0.8) - ..() - - -//foam -/datum/reagent/fluorosurfactant - name = "Fluorosurfactant" - id = "fluorosurfactant" - description = "A perfluoronated sulfonic acid that forms a foam when mixed with water." - reagent_state = LIQUID - color = "#9E6B38" // rgb: 158, 107, 56 - -// metal foaming agent -// this is lithium hydride. Add other recipies (e.g. LiH + H2O -> LiOH + H2) eventually -/datum/reagent/ammonia - name = "Ammonia" - id = "ammonia" - description = "A caustic substance commonly used in fertilizer or household cleaners." - reagent_state = GAS - color = "#404030" // rgb: 64, 64, 48 - -/datum/reagent/diethylamine - name = "Diethylamine" - id = "diethylamine" - description = "A secondary amine, useful as a plant nutrient and as building block for other compounds." - reagent_state = LIQUID - color = "#322D00" - - -// Ported from Bay as part of the Botany Update -// Allows you to make planks from any plant that has this reagent in it. -// Also vines with this reagent are considered dense. -/datum/reagent/woodpulp - name = "Wood Pulp" - id = "woodpulp" - description = "A mass of wood fibers." - reagent_state = LIQUID - color = "#B97A57" \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_toxin.dm b/code/modules/reagents/oldchem/reagents/reagents_toxin.dm deleted file mode 100644 index 0aae5e3f40e..00000000000 --- a/code/modules/reagents/oldchem/reagents/reagents_toxin.dm +++ /dev/null @@ -1,414 +0,0 @@ -/datum/reagent/toxin - name = "Toxin" - id = "toxin" - description = "A Toxic chemical." - reagent_state = LIQUID - color = "#CF3600" // rgb: 207, 54, 0 - -/datum/reagent/toxin/on_mob_life(mob/living/M) - M.adjustToxLoss(2) - ..() - -/datum/reagent/spider_venom - name = "Spider venom" - id = "spidertoxin" - description = "A toxic venom injected by spacefaring arachnids." - reagent_state = LIQUID - color = "#CF3600" // rgb: 207, 54, 0 - -/datum/reagent/spider_venom/on_mob_life(mob/living/M) - M.adjustToxLoss(1.5) - ..() - -/datum/reagent/plasticide - name = "Plasticide" - id = "plasticide" - description = "Liquid plastic, do not eat." - reagent_state = LIQUID - color = "#CF3600" // rgb: 207, 54, 0 - -/datum/reagent/plasticide/on_mob_life(mob/living/M) - M.adjustToxLoss(1.5) - ..() - - -/datum/reagent/minttoxin - name = "Mint Toxin" - id = "minttoxin" - description = "Useful for dealing with undesirable customers." - reagent_state = LIQUID - color = "#CF3600" // rgb: 207, 54, 0 - -/datum/reagent/minttoxin/on_mob_life(mob/living/M) - if(FAT in M.mutations) - M.gib() - ..() - -/datum/reagent/slimejelly - name = "Slime Jelly" - id = "slimejelly" - description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL." - reagent_state = LIQUID - color = "#801E28" // rgb: 128, 30, 40 - -/datum/reagent/slimejelly/on_mob_life(mob/living/M) - if(prob(10)) - to_chat(M, "Your insides are burning!") - M.adjustToxLoss(rand(20,60)*REM) - else if(prob(40)) - M.adjustBruteLoss(-5*REM) - ..() - -/datum/reagent/slimetoxin - name = "Mutation Toxin" - id = "mutationtoxin" - description = "A corruptive toxin produced by slimes." - reagent_state = LIQUID - color = "#13BC5E" // rgb: 19, 188, 94 - -/datum/reagent/slimetoxin/on_mob_life(mob/living/M) - if(ishuman(M)) - var/mob/living/carbon/human/human = M - if(human.species.name != "Shadow") - to_chat(M, "Your flesh rapidly mutates!") - to_chat(M, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.") - to_chat(M, "Your body reacts violently to light. \green However, it naturally heals in darkness.") - to_chat(M, "Aside from your new traits, you are mentally unchanged and retain your prior obligations.") - human.set_species("Shadow") - ..() - -/datum/reagent/aslimetoxin - name = "Advanced Mutation Toxin" - id = "amutationtoxin" - description = "An advanced corruptive toxin produced by slimes." - reagent_state = LIQUID - color = "#13BC5E" // rgb: 19, 188, 94 - -/datum/reagent/aslimetoxin/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method != TOUCH) - M.ForceContractDisease(new /datum/disease/transformation/slime(0)) - - -/datum/reagent/mercury - name = "Mercury" - id = "mercury" - description = "A chemical element." - reagent_state = LIQUID - color = "#484848" // rgb: 72, 72, 72 - metabolization_rate = 0.2 - penetrates_skin = 1 - -/datum/reagent/mercury/on_mob_life(mob/living/M) - if(prob(70)) - M.adjustBrainLoss(1) - ..() - -/datum/reagent/chlorine - name = "Chlorine" - id = "chlorine" - description = "A chemical element." - reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 - penetrates_skin = 1 - process_flags = ORGANIC | SYNTHETIC - -/datum/reagent/chlorine/on_mob_life(mob/living/M) - M.adjustFireLoss(1) - ..() - -/datum/reagent/fluorine - name = "Fluorine" - id = "fluorine" - description = "A highly-reactive chemical element." - reagent_state = GAS - color = "#6A6054" - penetrates_skin = 1 - process_flags = ORGANIC | SYNTHETIC - -/datum/reagent/fluorine/on_mob_life(mob/living/M) - M.adjustFireLoss(1) - M.adjustToxLoss(1*REM) - ..() - -/datum/reagent/radium - name = "Radium" - id = "radium" - description = "Radium is an alkaline earth metal. It is extremely radioactive." - reagent_state = SOLID - color = "#C7C7C7" // rgb: 199,199,199 - metabolization_rate = 0.4 - penetrates_skin = 1 - -/datum/reagent/radium/on_mob_life(mob/living/M) - if(M.radiation < 80) - M.apply_effect(4, IRRADIATE, negate_armor = 1) - ..() - -/datum/reagent/radium/reaction_turf(turf/T, volume) - if(volume >= 3 && !istype(T, /turf/space)) - new /obj/effect/decal/cleanable/greenglow(T) - -/datum/reagent/mutagen - name = "Unstable mutagen" - id = "mutagen" - description = "Might cause unpredictable mutations. Keep away from children." - reagent_state = LIQUID - color = "#04DF27" - metabolization_rate = 0.3 - -/datum/reagent/mutagen/reaction_mob(mob/living/M, method=TOUCH, volume) - if(!..()) - return - if(!M.dna) - return //No robots, AIs, aliens, Ians or other mobs should be affected by this. - if((method==TOUCH && prob(33)) || method==INGEST) - randmutb(M) - domutcheck(M, null) - M.UpdateAppearance() - -/datum/reagent/mutagen/on_mob_life(mob/living/M) - if(!M.dna) - return //No robots, AIs, aliens, Ians or other mobs should be affected by this. - M.apply_effect(2*REM, IRRADIATE, negate_armor = 1) - if(prob(4)) - randmutb(M) - ..() - - -/datum/reagent/uranium - name ="Uranium" - id = "uranium" - description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive." - reagent_state = SOLID - color = "#B8B8C0" // rgb: 184, 184, 192 - -/datum/reagent/uranium/on_mob_life(mob/living/M) - M.apply_effect(2, IRRADIATE, negate_armor = 1) - ..() - -/datum/reagent/uranium/reaction_turf(turf/T, volume) - if(volume >= 3 && !istype(T, /turf/space)) - new /obj/effect/decal/cleanable/greenglow(T) - - -/datum/reagent/lexorin - name = "Lexorin" - id = "lexorin" - description = "Lexorin temporarily stops respiration. Causes tissue damage." - reagent_state = LIQUID - color = "#52685D" - metabolization_rate = 0.2 - -/datum/reagent/lexorin/on_mob_life(mob/living/M) - M.adjustToxLoss(1) - ..() - - -/datum/reagent/sacid - name = "Sulphuric acid" - id = "sacid" - description = "A strong mineral acid with the molecular formula H2SO4." - reagent_state = LIQUID - color = "#00D72B" - process_flags = ORGANIC | SYNTHETIC - -/datum/reagent/sacid/on_mob_life(mob/living/M) - M.adjustFireLoss(1) - ..() - -/datum/reagent/sacid/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - if(volume > 25) - - if(H.wear_mask) - to_chat(H, "Your mask protects you from the acid!") - return - - if(H.head) - to_chat(H, "Your helmet protects you from the acid!") - return - - if(!M.unacidable) - if(prob(75)) - var/obj/item/organ/external/affecting = H.get_organ("head") - if(affecting) - affecting.take_damage(5, 10) - H.UpdateDamageIcon() - H.emote("scream") - else - M.take_organ_damage(5,10) - else - M.take_organ_damage(5,10) - - if(method == INGEST) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - if(volume < 10) - to_chat(M, "The greenish acidic substance stings you, but isn't concentrated enough to harm you!") - - if(volume >=10 && volume <=25) - if(!H.unacidable) - M.take_organ_damage(0,min(max(volume-10,2)*2,20)) - M.emote("scream") - - - if(volume > 25) - if(!M.unacidable) - if(prob(75)) - var/obj/item/organ/external/affecting = H.get_organ("head") - if(affecting) - affecting.take_damage(0, 20) - H.UpdateDamageIcon() - H.emote("scream") - else - M.take_organ_damage(0,20) - -/datum/reagent/sacid/reaction_obj(obj/O, volume) - if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(40)) - if(!O.unacidable) - var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc) - I.desc = "Looks like this was \an [O] some time ago." - O.visible_message("[O] melts.") - qdel(O) - - -/datum/reagent/hellwater - name = "Hell Water" - id = "hell_water" - description = "YOUR FLESH! IT BURNS!" - process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL. - metabolization_rate = 1 - -/datum/reagent/hellwater/on_mob_life(mob/living/M) - M.fire_stacks = min(5, M.fire_stacks + 3) - M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire - M.adjustToxLoss(1) - M.adjustFireLoss(1) //Hence the other damages... ain't I a bastard? - M.adjustBrainLoss(5) - ..() - - -/datum/reagent/carpotoxin - name = "Carpotoxin" - id = "carpotoxin" - description = "A deadly neurotoxin produced by the dreaded spess carp." - reagent_state = LIQUID - color = "#003333" // rgb: 0, 51, 51 - -/datum/reagent/carpotoxin/on_mob_life(mob/living/M) - M.adjustToxLoss(2*REM) - ..() - -/datum/reagent/staminatoxin - name = "Tirizene" - id = "tirizene" - description = "A toxin that affects the stamina of a person when injected into the bloodstream." - reagent_state = LIQUID - color = "#6E2828" - data = 13 - -/datum/reagent/staminatoxin/on_mob_life(mob/living/M) - M.adjustStaminaLoss(REM * data) - data = max(data - 1, 3) - ..() - - -/datum/reagent/spore - name = "Spore Toxin" - id = "spore" - description = "A natural toxin produced by blob spores that inhibits vision when ingested." - color = "#9ACD32" - -/datum/reagent/spores/on_mob_life(mob/living/M) - M.adjustToxLoss(1) - M.damageoverlaytemp = 60 - M.EyeBlurry(3) - ..() - -/datum/reagent/beer2 //disguised as normal beer for use by emagged brobots - name = "Beer" - id = "beer2" - description = "An alcoholic beverage made from malted grains, hops, yeast, and water." - color = "#664300" // rgb: 102, 67, 0 - metabolization_rate = 1.5 * REAGENTS_METABOLISM - -/datum/reagent/beer2/on_mob_life(mob/living/M) - switch(current_cycle) - if(1 to 50) - M.AdjustSleeping(1) - if(51 to INFINITY) - M.AdjustSleeping(1) - M.adjustToxLoss((current_cycle - 50)*REM) - ..() - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/datum/reagent/condensedcapsaicin - name = "Condensed Capsaicin" - id = "condensedcapsaicin" - description = "This shit goes in pepperspray." - reagent_state = LIQUID - color = "#B31008" // rgb: 179, 16, 8 - -/datum/reagent/condensedcapsaicin/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) - if(ishuman(M)) - var/mob/living/carbon/human/victim = M - var/mouth_covered = 0 - var/eyes_covered = 0 - var/obj/item/safe_thing = null - if( victim.wear_mask ) - if( victim.wear_mask.flags & MASKCOVERSEYES ) - eyes_covered = 1 - safe_thing = victim.wear_mask - if( victim.wear_mask.flags & MASKCOVERSMOUTH ) - mouth_covered = 1 - safe_thing = victim.wear_mask - if( victim.head ) - if( victim.head.flags & MASKCOVERSEYES ) - eyes_covered = 1 - safe_thing = victim.head - if( victim.head.flags & MASKCOVERSMOUTH ) - mouth_covered = 1 - safe_thing = victim.head - if(victim.glasses) - eyes_covered = 1 - if( !safe_thing ) - safe_thing = victim.glasses - if( eyes_covered && mouth_covered ) - to_chat(victim, "Your [safe_thing] protects you from the pepperspray!") - return - else if( mouth_covered ) // Reduced effects if partially protected - to_chat(victim, "Your [safe_thing] protect you from most of the pepperspray!") - if(prob(5)) - victim.emote("scream") - victim.EyeBlurry(3) - victim.EyeBlind(1) - victim.Confused(3) - victim.damageoverlaytemp = 60 - victim.Weaken(3) - victim.drop_item() - return - else if( eyes_covered ) // Eye cover is better than mouth cover - to_chat(victim, "Your [safe_thing] protects your eyes from the pepperspray!") - victim.EyeBlurry(3) - victim.damageoverlaytemp = 30 - return - else // Oh dear :D - if(prob(5)) - victim.emote("scream") - to_chat(victim, "You're sprayed directly in the eyes with pepperspray!") - victim.EyeBlurry(5) - victim.EyeBlind(2) - victim.Confused(6) - victim.damageoverlaytemp = 75 - victim.Weaken(5) - victim.drop_item() - -/datum/reagent/condensedcapsaicin/on_mob_life(mob/living/M) - if(prob(5)) - M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]") - ..() diff --git a/code/modules/reagents/newchem/patch.dm b/code/modules/reagents/reagent_containers/patch.dm similarity index 100% rename from code/modules/reagents/newchem/patch.dm rename to code/modules/reagents/reagent_containers/patch.dm diff --git a/paradise.dme b/paradise.dme index ad5db876321..0d341f894de 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1831,54 +1831,47 @@ #include "code\modules\projectiles\projectile\magic.dm" #include "code\modules\projectiles\projectile\reusable.dm" #include "code\modules\projectiles\projectile\special.dm" -#include "code\modules\reagents\Chemistry-Colours.dm" -#include "code\modules\reagents\Chemistry-Holder.dm" -#include "code\modules\reagents\Chemistry-Machinery.dm" -#include "code\modules\reagents\Chemistry-Readme.dm" -#include "code\modules\reagents\pandemic.dm" #include "code\modules\reagents\reagent_containers.dm" #include "code\modules\reagents\reagent_dispenser.dm" -#include "code\modules\reagents\newchem\Blob-Reagents.dm" -#include "code\modules\reagents\newchem\chem_heater.dm" -#include "code\modules\reagents\newchem\disease.dm" -#include "code\modules\reagents\newchem\drinks.dm" -#include "code\modules\reagents\newchem\drugs.dm" -#include "code\modules\reagents\newchem\food.dm" -#include "code\modules\reagents\newchem\medicine.dm" -#include "code\modules\reagents\newchem\newchem_procs.dm" -#include "code\modules\reagents\newchem\other.dm" -#include "code\modules\reagents\newchem\paradise_pop.dm" -#include "code\modules\reagents\newchem\patch.dm" -#include "code\modules\reagents\newchem\pyro.dm" -#include "code\modules\reagents\newchem\toxins.dm" -#include "code\modules\reagents\oldchem\chemical_reaction\_chemical_reaction_base.dm" -#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_drink.dm" -#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_food.dm" -#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_harm.dm" -#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_med.dm" -#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_misc.dm" -#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_slime.dm" -#include "code\modules\reagents\oldchem\reagents\__oldchem_defines.dm" -#include "code\modules\reagents\oldchem\reagents\_reagent_base.dm" -#include "code\modules\reagents\oldchem\reagents\reagents_admin.dm" -#include "code\modules\reagents\oldchem\reagents\reagents_drugs.dm" -#include "code\modules\reagents\oldchem\reagents\reagents_flammable.dm" -#include "code\modules\reagents\oldchem\reagents\reagents_food.dm" -#include "code\modules\reagents\oldchem\reagents\reagents_med.dm" -#include "code\modules\reagents\oldchem\reagents\reagents_misc.dm" -#include "code\modules\reagents\oldchem\reagents\reagents_paint.dm" -#include "code\modules\reagents\oldchem\reagents\reagents_toxin.dm" -#include "code\modules\reagents\oldchem\reagents\reagents_water.dm" -#include "code\modules\reagents\oldchem\reagents\drink\reagents_alcohol.dm" -#include "code\modules\reagents\oldchem\reagents\drink\reagents_drink.dm" -#include "code\modules\reagents\oldchem\reagents\drink\reagents_drink_base.dm" -#include "code\modules\reagents\oldchem\reagents\drink\reagents_drink_cold.dm" +#include "code\modules\reagents\chemistry\colors.dm" +#include "code\modules\reagents\chemistry\holder.dm" +#include "code\modules\reagents\chemistry\readme.dm" +#include "code\modules\reagents\chemistry\reagents.dm" +#include "code\modules\reagents\chemistry\recipes.dm" +#include "code\modules\reagents\chemistry\machinery\chem_heater.dm" +#include "code\modules\reagents\chemistry\machinery\chemistry_machinery.dm" +#include "code\modules\reagents\chemistry\machinery\pandemic.dm" +#include "code\modules\reagents\chemistry\reagents\admin.dm" +#include "code\modules\reagents\chemistry\reagents\alcohol.dm" +#include "code\modules\reagents\chemistry\reagents\blob.dm" +#include "code\modules\reagents\chemistry\reagents\disease.dm" +#include "code\modules\reagents\chemistry\reagents\drink_base.dm" +#include "code\modules\reagents\chemistry\reagents\drink_cold.dm" +#include "code\modules\reagents\chemistry\reagents\drinks.dm" +#include "code\modules\reagents\chemistry\reagents\drugs.dm" +#include "code\modules\reagents\chemistry\reagents\food.dm" +#include "code\modules\reagents\chemistry\reagents\medicine.dm" +#include "code\modules\reagents\chemistry\reagents\misc.dm" +#include "code\modules\reagents\chemistry\reagents\paint.dm" +#include "code\modules\reagents\chemistry\reagents\paradise_pop.dm" +#include "code\modules\reagents\chemistry\reagents\pyrotechnic.dm" +#include "code\modules\reagents\chemistry\reagents\toxins.dm" +#include "code\modules\reagents\chemistry\reagents\water.dm" +#include "code\modules\reagents\chemistry\recipes\drinks.dm" +#include "code\modules\reagents\chemistry\recipes\drugs.dm" +#include "code\modules\reagents\chemistry\recipes\food.dm" +#include "code\modules\reagents\chemistry\recipes\medicine.dm" +#include "code\modules\reagents\chemistry\recipes\others.dm" +#include "code\modules\reagents\chemistry\recipes\pyrotechnics.dm" +#include "code\modules\reagents\chemistry\recipes\slime_extracts.dm" +#include "code\modules\reagents\chemistry\recipes\toxins.dm" #include "code\modules\reagents\reagent_containers\blood_pack.dm" #include "code\modules\reagents\reagent_containers\borghydro.dm" #include "code\modules\reagents\reagent_containers\bottle.dm" #include "code\modules\reagents\reagent_containers\dropper.dm" #include "code\modules\reagents\reagent_containers\glass_containers.dm" #include "code\modules\reagents\reagent_containers\hypospray.dm" +#include "code\modules\reagents\reagent_containers\patch.dm" #include "code\modules\reagents\reagent_containers\pill.dm" #include "code\modules\reagents\reagent_containers\spray.dm" #include "code\modules\reagents\reagent_containers\syringes.dm" From 2b97929fab1c515997c3bec50fffb854b80e2f7c Mon Sep 17 00:00:00 2001 From: Markolie Date: Fri, 4 Nov 2016 16:12:16 +0100 Subject: [PATCH 017/193] Maint area fix --- _maps/map_files/cyberiad/cyberiad.dmm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 233cb1d7e74..ad78a7b2ba3 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -5470,10 +5470,10 @@ "cbj" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) "cbk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/hallway/primary/aft) "cbl" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) -"cbm" = (/obj/machinery/door/airlock/maintenance{name = "Custodial Maintenance"; req_access_txt = "26"},/turf/simulated/floor/plating,/area/janitor) +"cbm" = (/obj/machinery/door/airlock/maintenance{name = "Custodial Maintenance"; req_access_txt = "26"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbn" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/light{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/item/weapon/twohanded/required/kirbyplants,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/wood,/area/ntrep) "cbo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cbp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/maintenance{name = "Paramedic Maintenance"; req_access_txt = "66"},/turf/simulated/floor/plating,/area/medical/paramedic) +"cbp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/maintenance{name = "Paramedic Maintenance"; req_access_txt = "66"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbq" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "scansep"; name = "Scanning Room Separation Shutters"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "cbr" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay2) "cbs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2) @@ -8237,7 +8237,7 @@ "dcu" = (/obj/machinery/light{dir = 4},/obj/structure/dresser,/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/civilian/barber) "dcv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/warning_stripes/southwestcorner,/turf/simulated/floor/plasteel,/area/engine/engineering) "dcw" = (/obj/structure/disposalpipe/segment,/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/virology) -"dcx" = (/obj/effect/spawner/lootdrop/maintenance,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/medical/virology) +"dcx" = (/obj/effect/spawner/lootdrop/maintenance,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/asmaint) "dcy" = (/obj/item/device/radio/intercom{dir = 1; name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreencorner"},/area/medical/virology) "dcz" = (/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitegreencorner"},/area/medical/virology) "dcA" = (/obj/item/device/radio/intercom{dir = 1; name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreencorner"},/area/medical/virology) @@ -8247,7 +8247,7 @@ "dcE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/engine/engineering) "dcF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/engine/engineering) "dcG" = (/obj/machinery/atmospherics/binary/valve{dir = 4},/obj/effect/decal/warning_stripes/north,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"dcH" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/effect/decal/warning_stripes/northwest,/turf/simulated/floor/plating,/area/medical/virology) +"dcH" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/effect/decal/warning_stripes/northwest,/turf/simulated/floor/plating,/area/maintenance/asmaint) "dcI" = (/obj/machinery/atmospherics/binary/valve{dir = 4},/obj/effect/decal/warning_stripes/south,/turf/simulated/floor/plating,/area/maintenance/asmaint) "dcJ" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/obj/item/weapon/wrench,/obj/machinery/light/small{dir = 8},/obj/effect/decal/warning_stripes/southwest,/turf/simulated/floor/plating,/area/maintenance/asmaint) "dcK" = (/obj/structure/closet/radiation,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/effect/decal/warning_stripes/southeastcorner,/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -9213,9 +9213,9 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikaabaabbikaabaabbikbikaabaabaabaabaabdoidoidohdoidoidoncEBcwUcwUcwUcwUcwUcwUcwUcwUdoicwWcvOcyccydcyecyfcyfcyfcyfcygcyhcyicxjcyjcxjcxjcykcxjcylcymcyncyocxocbkcypcyqcDucxscyscytcyucxscyvcywcyxcyycyzcyAcyBcyCcyDcyEcyEcAaczUcAdcAccAeczTbGyceJcAhbGycAMcoAcoAcoAcoAcoAbikbikbikbikdcidchdckdcjcoGdclbVibVicuscoAcoAcoAcoAcoAbikbikckPcxOcxOcxOcyZczaczbczcczdcAicAOcFRcwAcAVcAYcAWckPbikbikcwGczkcwJczlcwJczmcwGbxXbxXcvzczMbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdoDbikacGbikczoczpczqbikczoczpczqbikczoczpczqbikbikdoidoocfRdopdoidoqcGKdojdojdojdojdojdojdojdojdojcEycvOcztcxjcykczucxjcxjcxjczvcxjcztcztcxjcxjcxjcxjczwczxcymczyctEczzcoacyqcyqczAcxsczBczCczDcxsczEctWczFczGczHczIczJczKbGyczLcdcczLbGycBacAZcBccBccBccBccBPcBNcBNcBNcBNcBNcBQcoAbikbikbikbikdcidchdckdcmcTabGyckObVicusbGybGybGycgmcoAbikbikckPcwAcwAcwAcwAczWcqUczXczYczZcCfcAbcwAcCGcCYcCIckPbikbikcwGcAfcAgcDLcwJcDNcwGcEdbxXcvzbwoaabaabaabaabbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikczocAkczqbikczocAkczqbikczocAkczqbikaqZdoicfRcfRcfRdoidoidorczsdoidoiczsczsdoidoiczsczscwWcvOcztcAlcxjcAmcAncAocAocyjcxjcztcApcxjcxjcxjcxjcAqcArcAscAtbZNcAucAPcAwcAxcAycxsczBdlYcAAcxscABctWcsOcACcsLcADcAEcAFcAGcAHcAIcAJcAGcAKcAGcAGcAGcoAcoAcoAcoAcoAcoAcoAcoAcEhcoAbikbikbikbikdcicBTdcqcBUcoGcgmcFdbVicFmcFlcFlcFnbGycoAbikbikckPcwtcwucwvcAQcARczbcAScATcAUcFrcIScAXcGscIScGtckPbikbikcwGcwGcGIcCrcBdcwGcwGbwobxXcGycyJcyJcyJbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikaqZaabczocAkczqbikczocAkczqaabczocAkczqbikaabdoidondosdoqdoibikaabbikbikbikbikbikaabbikbikczscwWcvKcBecxjcBfcBgcBhcBicBjcBicBkcBicBlcBmcxfcBncztcztczxcBocBpcBqcBrcBscBtcBucBvcFbcBxcBycBzcBAcBBcBCcBDcBDcBEcBFcBGcBHcBIcBJcBKcBLcBMcALcBOcHucHtcDPcDPcDPcDPcDPcDPcHvcoAcEhclUclUclUclUclUclUcjmbEJcjmcFfclUclUcoAcoAcoAcoAcusbGycoAbikbikckPcxOcBZcxOcCacxRcqUcCbcCccCdcCecqUcqUcCgcqUcChckPbikaabaabcwGcwGcCscwGcwGbikbwobxXcvzcyJcHycHxbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikczocAkczqaabczocAkczqbikczocAkczqaabbikdoidoiczsdoidoibikaabaabbikaabbikaabaabbikbikcybcCicvKcCjcCkcCkcClcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcCmcCncCmcCocCmcrmcCpcCqcIUcCtcCtcCtcCucCvcBCcCwcCxcCycCzcCAcCBcBIcCCcCDcCEcCFcHzcCHcHAcCJaabcCKcCKcCKcCKcCKcHBcoAcHDcHCcIGcHHcIHctaclUciUckucjoclUcBXcCPcBYcCRcCQcoAcusbGycoAbikbikckPcxOcxOcxOckycCTczbcCUcCVcCWcCXcCZcCZcDacqUcDbckPaabaabbikbikbikcIKbikbikbikbwobxXcvzcyJbxXbxXbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxaqZbikczocAkczqaabczocAkczqbikczocAkczqaabbikbikbikbikbikbikbikbikbikaabcDccDdcDdcDdcDdcybcDecwWcDfcDgcDhcDhcDicDjcDkcDlcDlcDlcDlcDmdotcDocDncDncDpcDpcDncDqcDrcDscDtcDtcFMcDvdaIcDxcDycDzcDzdiEdppcDCcDDcDEcDFcCAcDGcBIcDHcDIcDJcDKcILcDMcIMcDOcDPcDQcDRcDScDTcCKcHBcoDcEhclUcvscvqcIOcINcxLckxckwdcrclUcCSczVcuqczVcDUcoAcusbGycoAcoAbikckPcwAcwAcwAcwAcEkcqUcCbdlZcEmcCecqUcEncEocEocEpcEqcXYaabbikbikbikbikbikbikbikbwobxXcGybxXbxXcIPbwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikaqZaabczocAkczqbikczocAkczqaabczocAkczqbikaabdoidondosdoqdoibikaabbikbikbikbikbikaabbikbikczscwWcvKcBecxjcBfcBgcBhcBicBjcBicBkcBicBlcBmcxfcBncztcztczxcBocBpcBqcBrcBscBtcBucBvcFbcBxcBycBzcBAcBBcBCcBDcBDcBEcBFcBGcBHcBIcBJcBKcBLcBMcALcBOcHucHtcDPcDPcDPcDPcDPcDPcHvcoAcEhclUclUclUclUclUclUcjmbEJcjmcFfclUclUclUclUclUclUcusbGycoAbikbikckPcxOcBZcxOcCacxRcqUcCbcCccCdcCecqUcqUcCgcqUcChckPbikaabaabcwGcwGcCscwGcwGbikbwobxXcvzcyJcHycHxbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikczocAkczqaabczocAkczqbikczocAkczqaabbikdoidoiczsdoidoibikaabaabbikaabbikaabaabbikbikcybcCicvKcCjcCkcCkcClcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcCmcCncCmcCocCmcrmcCpcCqcIUcCtcCtcCtcCucCvcBCcCwcCxcCycCzcCAcCBcBIcCCcCDcCEcCFcHzcCHcHAcCJaabcCKcCKcCKcCKcCKcHBcoAcHDcHCcIGcHHcIHctaclUciUckucjoclUcBXcCPcBYcCRcCQclUcusbGycoAbikbikckPcxOcxOcxOckycCTczbcCUcCVcCWcCXcCZcCZcDacqUcDbckPaabaabbikbikbikcIKbikbikbikbwobxXcvzcyJbxXbxXbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxaqZbikczocAkczqaabczocAkczqbikczocAkczqaabbikbikbikbikbikbikbikbikbikaabcDccDdcDdcDdcDdcybcDecwWcDfcDgcDhcDhcDicDjcDkcDlcDlcDlcDlcDmdotcDocDncDncDpcDpcDncDqcDrcDscDtcDtcFMcDvdaIcDxcDycDzcDzdiEdppcDCcDDcDEcDFcCAcDGcBIcDHcDIcDJcDKcILcDMcIMcDOcDPcDQcDRcDScDTcCKcHBcoDcEhclUcvscvqcIOcINcxLckxckwdcrclUcCSczVcuqczVcDUclUcusbGycoAcoAbikckPcwAcwAcwAcwAcEkcqUcCbdlZcEmcCecqUcEncEocEocEpcEqcXYaabbikbikbikbikbikbikbikbwobxXcGybxXbxXcIPbwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabaabcEraabaabaabcEraabbikaabcEraabbikbikbikbikbikbikbikbikbikcDccDccDccEscEtcEucDdcKlcExcEycDfcDfcEzcEAcvKcvKcEBcECcECcECcECcEDcEEcEFcEEcEEcEEcDtcDtcEGcEHcEIcEJcEKcDzcELcDwcDzcDzcDzcDzdpwcBCcENcEOcCycDFcCAcDFcBIcDHcDIcEPcEQcERcEScETcEUaabcEVcEWcDTcEXcCKcHBcoDcHDcHCcxKcxJczVcxMclUcIIcDVdcsclUcDWcDYczVcEbcEaclUcusbGycITcoAbikckPcwtcwucwvcFjcARczbcFkcJIcGCcJKcJKcFocFpcFqcJLckPaabaabaabbikbikbikbikbikbikbwocJMcvzbwobwobwobwobwoaabaabaabcJNcJNcJNcJNcJNcJNaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabcFscFtcFtcFucFvcFwcFwcFwcFvcFwcFwcFwcFvcFwcFwcFwcFxcFtcFtcFtcFtcFtcFycFzcFAcFBcFCcFDcFEcFFcFGcfRcwWcFHcDfcvKcvKcvKcFIcEBcECcFJdrRcFLcHscFNcJlcFPcFOcFQcFScFTcSpcFVcFWcFXcFScFYcFZcDwcGacDzcDzcDzcGbcBCcGccGccDFcGdcGecGfcGgcGhcGicGjcGkcGlcGmcGncDOcGocDQcGpcDTcDTcCKcHBcoDcEhclUcyMcyLcyNcFfclUcnkclTcFfclUcyQcyScyRcyTcyTclUcusbGycJOcoAbikckPcxOcxPcxOcGAcxRcqUcGBcJPcJJcqUdlWcGDcwAcwAcwAckPbikbikaabaabbikbikbikbikbikbwocyKcvzbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabaabcGFaabbikaabcGFaabbikaabcGFaabbikbikbikbikbikbikbikbikbikcDccDccDccGGcGHcWAcDddovcfRcGKcExcExcExcExcGLcExcFGcECcGMcGNcGOcGPcGQcGRcGScGTcGUcGVcGWcGXcGYcGZcHacHbcFYcELcDwcHccHdcDzcDzcHecBCcHfcHgcDFcHhcCAcHicHjcHkcHlcHmcHncHocHpcHocHqaabcCKcCKcCKcCKcCKcHBcoAcEhclUcIJcyVcyYcyXcEecEccEgcEfcHwcGucHZczVcIRcIQclUcusbGycJRcoAbikckPcxOcxOcxOcBWcHEcHFcHGcHJcHIcqUcqUcqUcqUcHKcHLcHMbikbikbikaabaabbikbikbikbikbwobwocvzbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik From 0cfcfb4c329b0ac74d1dc1ccced3097fd98b9c13 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 4 Nov 2016 14:26:50 -0400 Subject: [PATCH 018/193] repathing --- code/modules/reagents/chemistry/colors.dm | 2 + .../reagents/chemistry/reagents/admin.dm | 6 +- .../reagents/chemistry/reagents/disease.dm | 33 ++- .../reagents/chemistry/reagents/medicine.dm | 210 ++++++++++-------- .../reagents/chemistry/reagents/misc.dm | 35 +-- .../reagents/chemistry/reagents/toxins.dm | 15 -- 6 files changed, 145 insertions(+), 156 deletions(-) diff --git a/code/modules/reagents/chemistry/colors.dm b/code/modules/reagents/chemistry/colors.dm index e0c6d5efd84..479059bda08 100644 --- a/code/modules/reagents/chemistry/colors.dm +++ b/code/modules/reagents/chemistry/colors.dm @@ -2,6 +2,8 @@ * Returns: * #RRGGBB(AA) on success, null on failure */ + var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700") + /proc/mix_color_from_reagents(const/list/reagent_list) if(!istype(reagent_list)) return diff --git a/code/modules/reagents/chemistry/reagents/admin.dm b/code/modules/reagents/chemistry/reagents/admin.dm index 024b78c3cb0..9e5b78376e2 100644 --- a/code/modules/reagents/chemistry/reagents/admin.dm +++ b/code/modules/reagents/chemistry/reagents/admin.dm @@ -1,4 +1,4 @@ -/datum/reagent/adminordrazine //An OP chemical for admins +/datum/reagent/medicine/adminordrazine //An OP chemical for admins name = "Adminordrazine" id = "adminordrazine" description = "It's magic. We don't have to explain it." @@ -7,7 +7,7 @@ process_flags = ORGANIC | SYNTHETIC //Adminbuse knows no bounds! admin_only = 1 -/datum/reagent/adminordrazine/on_mob_life(mob/living/carbon/M) +/datum/reagent/medicine/adminordrazine/on_mob_life(mob/living/carbon/M) M.setCloneLoss(0) M.setOxyLoss(0) M.radiation = 0 @@ -54,7 +54,7 @@ D.cure() ..() -/datum/reagent/adminordrazine/nanites +/datum/reagent/medicine/adminordrazine/nanites name = "Nanites" id = "nanites" description = "Nanomachines that aid in rapid cellular regeneration." \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/disease.dm b/code/modules/reagents/chemistry/reagents/disease.dm index b4c76ac1338..56493362f7c 100644 --- a/code/modules/reagents/chemistry/reagents/disease.dm +++ b/code/modules/reagents/chemistry/reagents/disease.dm @@ -122,26 +122,23 @@ qdel(ate_heart) ..() -//virus-specific symptom reagents +/datum/reagent/concentrated_initro + name = "Concentrated Initropidril" + id = "concentrated_initro" + description = "A guaranteed heart-stopper!" + reagent_state = LIQUID + color = "#AB1CCF" + metabolization_rate = 0.4 -/datum/reagent/synaphydramine - name = "Diphen-Synaptizine" - id = "synaphydramine" - description = "Reduces drowsiness and hallucinations while also purging histamine from the body." - color = "#EC536D" // rgb: 236, 83, 109 +/datum/reagent/concentrated_initro/on_mob_life(mob/living/M) + if(volume >=5) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(!H.heart_attack) + H.heart_attack = 1 // rip in pepperoni -/datum/reagent/synaphydramine/on_mob_life(mob/living/M) - M.AdjustDrowsy(-5) - if(holder.has_reagent("lsd")) - holder.remove_reagent("lsd", 5) - if(holder.has_reagent("histamine")) - holder.remove_reagent("histamine", 5) - M.AdjustHallucinate(-10) - if(prob(30)) - M.adjustToxLoss(1) - ..() +//virus foods -//virus food /datum/reagent/virus_food name = "Virus Food" id = "virusfood" @@ -165,7 +162,7 @@ id = "sugarvirusfood" color = "#41B0C0" // rgb: 65,176,192 -/datum/reagent/diphenhydramine/diphenhydraminevirusfood +/datum/reagent/medicine/diphenhydramine/diphenhydraminevirusfood name = "virus rations" id = "diphenhydraminevirusfood" description = "mutates blood" diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index 2cbf4bdbd00..96ddcb5be3b 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -1,4 +1,8 @@ -/datum/reagent/hydrocodone +/datum/reagent/medicine + name = "Medicine" + id = "medicine" + +/datum/reagent/medicine/hydrocodone name = "Hydrocodone" id = "hydrocodone" description = "An extremely effective painkiller; may have long term abuse consequences." @@ -7,14 +11,14 @@ metabolization_rate = 0.3 // Lasts 1.5 minutes for 15 units shock_reduction = 200 -/datum/reagent/hydrocodone/on_mob_life(mob/living/M) +/datum/reagent/medicine/hydrocodone/on_mob_life(mob/living/M) if(ishuman(M)) var/mob/living/carbon/human/H = M if(H.traumatic_shock < 100) H.shock_stage = 0 ..() -/datum/reagent/sterilizine +/datum/reagent/medicine/sterilizine name = "Sterilizine" id = "sterilizine" description = "Sterilizes wounds in preparation for surgery." @@ -22,17 +26,17 @@ color = "#C8A5DC" // rgb: 200, 165, 220 //makes you squeaky clean -/datum/reagent/sterilizine/reaction_mob(mob/living/M, method=TOUCH, volume) +/datum/reagent/medicine/sterilizine/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == TOUCH) M.germ_level -= min(volume*20, M.germ_level) -/datum/reagent/sterilizine/reaction_obj(obj/O, volume) +/datum/reagent/medicine/sterilizine/reaction_obj(obj/O, volume) O.germ_level -= min(volume*20, O.germ_level) -/datum/reagent/sterilizine/reaction_turf(turf/T, volume) +/datum/reagent/medicine/sterilizine/reaction_turf(turf/T, volume) T.germ_level -= min(volume*20, T.germ_level) -/datum/reagent/synaptizine +/datum/reagent/medicine/synaptizine name = "Synaptizine" id = "synaptizine" description = "Synaptizine is used to treat neuroleptic shock. Can be used to help remove disabling symptoms such as paralysis." @@ -40,7 +44,7 @@ color = "#FA46FA" overdose_threshold = 40 -/datum/reagent/synaptizine/on_mob_life(mob/living/M) +/datum/reagent/medicine/synaptizine/on_mob_life(mob/living/M) M.AdjustDrowsy(-5) M.AdjustParalysis(-1) M.AdjustStunned(-1) @@ -50,7 +54,7 @@ M.adjustBrainLoss(-1.0) ..() -/datum/reagent/synaptizine/overdose_process(mob/living/M, severity) +/datum/reagent/medicine/synaptizine/overdose_process(mob/living/M, severity) var/effect = ..() if(severity == 1) if(effect <= 1) @@ -71,14 +75,14 @@ if(effect <= 15) M.adjustToxLoss(1) -/datum/reagent/mitocholide +/datum/reagent/medicine/mitocholide name = "Mitocholide" id = "mitocholide" description = "A specialized drug that stimulates the mitochondria of cells to encourage healing of internal organs." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 -/datum/reagent/mitocholide/on_mob_life(mob/living/M) +/datum/reagent/medicine/mitocholide/on_mob_life(mob/living/M) if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -89,12 +93,12 @@ I.damage = max(I.damage-0.4, 0) ..() -/datum/reagent/mitocholide/reaction_obj(obj/O, volume) +/datum/reagent/medicine/mitocholide/reaction_obj(obj/O, volume) if(istype(O, /obj/item/organ)) var/obj/item/organ/Org = O Org.rejuvenate() -/datum/reagent/cryoxadone +/datum/reagent/medicine/cryoxadone name = "Cryoxadone" id = "cryoxadone" description = "A plasma mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 265K for it to metabolise correctly." @@ -102,7 +106,7 @@ color = "#0000C8" // rgb: 200, 165, 220 heart_rate_decrease = 1 -/datum/reagent/cryoxadone/on_mob_life(mob/living/M) +/datum/reagent/medicine/cryoxadone/on_mob_life(mob/living/M) if(M.bodytemperature < 265) M.adjustCloneLoss(-4) M.adjustOxyLoss(-10) @@ -112,7 +116,7 @@ M.status_flags &= ~DISFIGURED ..() -/datum/reagent/rezadone +/datum/reagent/medicine/rezadone name = "Rezadone" id = "rezadone" description = "A powder derived from fish toxin, Rezadone can effectively treat genetic damage as well as restoring minor wounds. Overdose will cause intense nausea and minor toxin damage." @@ -120,7 +124,7 @@ color = "#669900" // rgb: 102, 153, 0 overdose_threshold = 30 -/datum/reagent/rezadone/on_mob_life(mob/living/M) +/datum/reagent/medicine/rezadone/on_mob_life(mob/living/M) M.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that. M.adjustCloneLoss(-1) //What? We just set cloneloss to 0. Why? Simple; this is so external organs properly unmutate. M.adjustBruteLoss(-1) @@ -128,12 +132,12 @@ M.status_flags &= ~DISFIGURED ..() -/datum/reagent/rezadone/overdose_process(mob/living/M, severity) +/datum/reagent/medicine/rezadone/overdose_process(mob/living/M, severity) M.adjustToxLoss(1) M.Dizzy(5) M.Jitter(5) -/datum/reagent/spaceacillin +/datum/reagent/medicine/spaceacillin name = "Spaceacillin" id = "spaceacillin" description = "An all-purpose antibiotic agent extracted from space fungus." @@ -142,7 +146,7 @@ metabolization_rate = 0.2 -/datum/reagent/silver_sulfadiazine +/datum/reagent/medicine/silver_sulfadiazine name = "Silver Sulfadiazine" id = "silver_sulfadiazine" description = "This antibacterial compound is used to treat burn victims." @@ -150,7 +154,7 @@ color = "#F0C814" metabolization_rate = 3 -/datum/reagent/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1) +/datum/reagent/medicine/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1) if(iscarbon(M)) if(method == TOUCH) M.adjustFireLoss(-volume) @@ -162,11 +166,11 @@ to_chat(M, "You feel sick...") ..() -/datum/reagent/silver_sulfadiazine/on_mob_life(mob/living/M) +/datum/reagent/medicine/silver_sulfadiazine/on_mob_life(mob/living/M) M.adjustFireLoss(-2*REM) ..() -/datum/reagent/styptic_powder +/datum/reagent/medicine/styptic_powder name = "Styptic Powder" id = "styptic_powder" description = "Styptic (aluminium sulfate) powder helps control bleeding and heal physical wounds." @@ -174,7 +178,7 @@ color = "#C8A5DC" metabolization_rate = 3 -/datum/reagent/styptic_powder/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1) +/datum/reagent/medicine/styptic_powder/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1) if(iscarbon(M)) if(method == TOUCH) M.adjustBruteLoss(-volume) @@ -187,11 +191,11 @@ to_chat(M, "You feel gross!") ..() -/datum/reagent/styptic_powder/on_mob_life(mob/living/M) +/datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/M) M.adjustBruteLoss(-2*REM) ..() -/datum/reagent/salglu_solution +/datum/reagent/medicine/salglu_solution name = "Saline-Glucose Solution" id = "salglu_solution" description = "This saline and glucose solution can help stabilize critically injured patients and cleanse wounds." @@ -200,7 +204,7 @@ penetrates_skin = 1 metabolization_rate = 0.15 -/datum/reagent/salglu_solution/on_mob_life(mob/living/M) +/datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/M) if(prob(33)) M.adjustBruteLoss(-2*REM) M.adjustFireLoss(-2*REM) @@ -210,14 +214,14 @@ H.vessel.add_reagent("blood", 1) ..() -/datum/reagent/synthflesh +/datum/reagent/medicine/synthflesh name = "Synthflesh" id = "synthflesh" description = "A resorbable microfibrillar collagen and protein mixture that can rapidly heal injuries when applied topically." reagent_state = LIQUID color = "#FFEBEB" -/datum/reagent/synthflesh/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1) +/datum/reagent/medicine/synthflesh/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1) if(iscarbon(M)) if(method == TOUCH) M.adjustBruteLoss(-1.5*volume) @@ -226,19 +230,19 @@ to_chat(M, "The synthetic flesh integrates itself into your wounds, healing you.") ..() -/datum/reagent/synthflesh/reaction_turf(turf/T, volume) //let's make a mess! +/datum/reagent/medicine/synthflesh/reaction_turf(turf/T, volume) //let's make a mess! if(volume >= 5 && !istype(T, /turf/space)) new /obj/effect/decal/cleanable/blood/gibs/cleangibs(T) playsound(T, 'sound/effects/splat.ogg', 50, 1, -3) -/datum/reagent/charcoal +/datum/reagent/medicine/charcoal name = "Charcoal" id = "charcoal" description = "Activated charcoal helps to absorb toxins." reagent_state = LIQUID color = "#000000" -/datum/reagent/charcoal/on_mob_life(mob/living/M) +/datum/reagent/medicine/charcoal/on_mob_life(mob/living/M) M.adjustToxLoss(-1.5*REM) if(prob(50)) for(var/datum/reagent/R in M.reagents.reagent_list) @@ -246,7 +250,7 @@ M.reagents.remove_reagent(R.id,1) ..() -/datum/reagent/omnizine +/datum/reagent/medicine/omnizine name = "Omnizine" id = "omnizine" description = "Omnizine is a highly potent healing medication that can be used to treat a wide range of injuries." @@ -256,7 +260,7 @@ overdose_threshold = 30 addiction_chance = 5 -/datum/reagent/omnizine/on_mob_life(mob/living/M) +/datum/reagent/medicine/omnizine/on_mob_life(mob/living/M) M.adjustToxLoss(-1*REM) M.adjustOxyLoss(-1*REM) M.adjustBruteLoss(-2*REM) @@ -265,7 +269,7 @@ M.AdjustLoseBreath(-1) ..() -/datum/reagent/omnizine/overdose_process(mob/living/M, severity) +/datum/reagent/medicine/omnizine/overdose_process(mob/living/M, severity) var/effect = ..() if(severity == 1) //lesser M.stuttering += 1 @@ -299,7 +303,7 @@ M.Dizzy(5) M.Weaken(3) -/datum/reagent/calomel +/datum/reagent/medicine/calomel name = "Calomel" id = "calomel" description = "This potent purgative rids the body of impurities. It is highly toxic however and close supervision is required." @@ -307,7 +311,7 @@ color = "#22AB35" metabolization_rate = 0.8 -/datum/reagent/calomel/on_mob_life(mob/living/M) +/datum/reagent/medicine/calomel/on_mob_life(mob/living/M) for(var/datum/reagent/R in M.reagents.reagent_list) if(R != src) M.reagents.remove_reagent(R.id,5) @@ -317,26 +321,26 @@ M.fakevomit() ..() -/datum/reagent/potass_iodide +/datum/reagent/medicine/potass_iodide name = "Potassium Iodide" id = "potass_iodide" description = "Potassium Iodide is a medicinal drug used to counter the effects of radiation poisoning." reagent_state = LIQUID color = "#B4DCBE" -/datum/reagent/potass_iodide/on_mob_life(mob/living/M) +/datum/reagent/medicine/potass_iodide/on_mob_life(mob/living/M) if(prob(80)) M.radiation = max(0, M.radiation-1) ..() -/datum/reagent/pen_acid +/datum/reagent/medicine/pen_acid name = "Pentetic Acid" id = "pen_acid" description = "Pentetic Acid is an aggressive chelation agent. May cause tissue damage. Use with caution." reagent_state = LIQUID color = "#C8A5DC" -/datum/reagent/pen_acid/on_mob_life(mob/living/M) +/datum/reagent/medicine/pen_acid/on_mob_life(mob/living/M) for(var/datum/reagent/R in M.reagents.reagent_list) if(R != src) M.reagents.remove_reagent(R.id,4) @@ -348,7 +352,7 @@ M.adjustFireLoss(1*REM) ..() -/datum/reagent/sal_acid +/datum/reagent/medicine/sal_acid name = "Salicylic Acid" id = "sal_acid" description = "This is a is a standard salicylate pain reliever and fever reducer." @@ -358,7 +362,7 @@ shock_reduction = 25 overdose_threshold = 25 -/datum/reagent/sal_acid/on_mob_life(mob/living/M) +/datum/reagent/medicine/sal_acid/on_mob_life(mob/living/M) if(prob(55)) M.adjustBruteLoss(-2*REM) if(ishuman(M)) @@ -367,7 +371,7 @@ H.shock_stage = 0 ..() -/datum/reagent/salbutamol +/datum/reagent/medicine/salbutamol name = "Salbutamol" id = "salbutamol" description = "Salbutamol is a common bronchodilation medication for asthmatics. It may help with other breathing problems as well." @@ -375,12 +379,12 @@ color = "#00FFFF" metabolization_rate = 0.2 -/datum/reagent/salbutamol/on_mob_life(mob/living/M) +/datum/reagent/medicine/salbutamol/on_mob_life(mob/living/M) M.adjustOxyLoss(-6*REM) M.AdjustLoseBreath(-4) ..() -/datum/reagent/perfluorodecalin +/datum/reagent/medicine/perfluorodecalin name = "Perfluorodecalin" id = "perfluorodecalin" description = "This experimental perfluoronated solvent has applications in liquid breathing and tissue oxygenation. Use with caution." @@ -389,7 +393,7 @@ metabolization_rate = 0.2 addiction_chance = 20 -/datum/reagent/perfluorodecalin/on_mob_life(mob/living/carbon/human/M) +/datum/reagent/medicine/perfluorodecalin/on_mob_life(mob/living/carbon/human/M) M.adjustOxyLoss(-25*REM) if(volume >= 4) M.LoseBreath(6) @@ -399,7 +403,7 @@ M.adjustFireLoss(-1*REM) ..() -/datum/reagent/ephedrine +/datum/reagent/medicine/ephedrine name = "Ephedrine" id = "ephedrine" description = "Ephedrine is a plant-derived stimulant." @@ -409,7 +413,7 @@ overdose_threshold = 35 addiction_chance = 25 -/datum/reagent/ephedrine/on_mob_life(mob/living/M) +/datum/reagent/medicine/ephedrine/on_mob_life(mob/living/M) M.AdjustDrowsy(-5) M.AdjustParalysis(-1) M.AdjustStunned(-1) @@ -424,7 +428,7 @@ M.adjustFireLoss(-1) ..() -/datum/reagent/ephedrine/overdose_process(mob/living/M, severity) +/datum/reagent/medicine/ephedrine/overdose_process(mob/living/M, severity) var/effect = ..() if(severity == 1) if(effect <= 1) @@ -445,7 +449,7 @@ if(effect <= 15) M.emote("collapse") -/datum/reagent/diphenhydramine +/datum/reagent/medicine/diphenhydramine name = "Diphenhydramine" id = "diphenhydramine" description = "Anti-allergy medication. May cause drowsiness, do not operate heavy machinery while using this." @@ -453,7 +457,7 @@ color = "#5BCBE1" addiction_chance = 10 -/datum/reagent/diphenhydramine/on_mob_life(mob/living/M) +/datum/reagent/medicine/diphenhydramine/on_mob_life(mob/living/M) M.AdjustJitter(-20) M.reagents.remove_reagent("histamine",3) M.reagents.remove_reagent("itching_powder",3) @@ -465,7 +469,7 @@ M.visible_message("[M] looks a bit dazed.") ..() -/datum/reagent/morphine +/datum/reagent/medicine/morphine name = "Morphine" id = "morphine" description = "A strong but highly addictive opiate painkiller with sedative side effects." @@ -475,7 +479,7 @@ addiction_chance = 50 shock_reduction = 50 -/datum/reagent/morphine/on_mob_life(mob/living/M) +/datum/reagent/medicine/morphine/on_mob_life(mob/living/M) M.AdjustJitter(-25) switch(current_cycle) if(1 to 15) @@ -492,7 +496,7 @@ H.shock_stage = 0 ..() -/datum/reagent/oculine/on_mob_life(mob/living/M) +/datum/reagent/medicine/oculine/on_mob_life(mob/living/M) if(prob(80)) if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -511,7 +515,7 @@ M.SetEarDeaf(0) ..() -/datum/reagent/oculine +/datum/reagent/medicine/oculine name = "Oculine" id = "oculine" description = "Oculine is a saline eye medication with mydriatic and antibiotic effects." @@ -520,7 +524,7 @@ metabolization_rate = 0.4 var/cycle_amount = 0 -/datum/reagent/atropine +/datum/reagent/medicine/atropine name = "Atropine" id = "atropine" description = "Atropine is a potent cardiac resuscitant but it can causes confusion, dizzyness and hyperthermia." @@ -529,7 +533,7 @@ metabolization_rate = 0.2 overdose_threshold = 25 -/datum/reagent/atropine/on_mob_life(mob/living/M) +/datum/reagent/medicine/atropine/on_mob_life(mob/living/M) M.AdjustDizzy(1) M.Confused(5) if(prob(4)) @@ -546,7 +550,7 @@ M.reagents.remove_reagent("sarin", 20) ..() -/datum/reagent/epinephrine +/datum/reagent/medicine/epinephrine name = "Epinephrine" id = "epinephrine" description = "Epinephrine is a potent neurotransmitter, used in medical emergencies to halt anaphylactic shock and prevent cardiac arrest." @@ -555,7 +559,7 @@ metabolization_rate = 0.2 overdose_threshold = 20 -/datum/reagent/epinephrine/on_mob_life(mob/living/M) +/datum/reagent/medicine/epinephrine/on_mob_life(mob/living/M) M.AdjustDrowsy(-5) if(prob(20)) M.AdjustParalysis(-1) @@ -577,7 +581,7 @@ M.adjustFireLoss(-1*REM) ..() -/datum/reagent/epinephrine/overdose_process(mob/living/M, severity) +/datum/reagent/medicine/epinephrine/overdose_process(mob/living/M, severity) var/effect = ..() if(severity == 1) if(effect <= 1) @@ -598,7 +602,7 @@ if(effect <= 15) M.emote("collapse") -/datum/reagent/strange_reagent +/datum/reagent/medicine/strange_reagent name = "Strange Reagent" id = "strange_reagent" description = "A glowing green fluid highly reminiscent of nuclear waste." @@ -606,7 +610,7 @@ color = "#A0E85E" metabolization_rate = 0.2 -/datum/reagent/strange_reagent/reaction_mob(mob/living/M, method=TOUCH, volume) +/datum/reagent/medicine/strange_reagent/reaction_mob(mob/living/M, method=TOUCH, volume) if(isanimal(M)) if(method == TOUCH) var/mob/living/simple_animal/SM = M @@ -638,31 +642,23 @@ add_logs(M, M, "revived", object="strange reagent") //Yes, the logs say you revived yourself. ..() -/datum/reagent/strange_reagent/on_mob_life(mob/living/M) +/datum/reagent/medicine/strange_reagent/on_mob_life(mob/living/M) if(prob(10)) M.adjustBruteLoss(2*REM) M.adjustToxLoss(2*REM) ..() -/datum/reagent/life - name = "Life" - id = "life" - description = "Can create a life form, however it is not guaranteed to be friendly. May want to have Security on hot standby." - reagent_state = LIQUID - color = "#C8A5DC" - metabolization_rate = 0.2 - -/datum/reagent/mannitol/on_mob_life(mob/living/M) +/datum/reagent/medicine/mannitol/on_mob_life(mob/living/M) M.adjustBrainLoss(-3) ..() -/datum/reagent/mannitol +/datum/reagent/medicine/mannitol name = "Mannitol" id = "mannitol" description = "Mannitol is a sugar alcohol that can help alleviate cranial swelling." color = "#D1D1F1" -/datum/reagent/mutadone/on_mob_life(mob/living/carbon/human/M) +/datum/reagent/medicine/mutadone/on_mob_life(mob/living/carbon/human/M) M.SetJitter(0) var/needs_update = M.mutations.len > 0 || M.disabilities > 0 @@ -680,19 +676,19 @@ H.update_mutations() ..() -/datum/reagent/mutadone +/datum/reagent/medicine/mutadone name = "Mutadone" id = "mutadone" description = "Mutadone is an experimental bromide that can cure genetic abnomalities." color = "#5096C8" -/datum/reagent/antihol +/datum/reagent/medicine/antihol name = "Antihol" id = "antihol" description = "A medicine which quickly eliminates alcohol in the body." color = "#009CA8" -/datum/reagent/antihol/on_mob_life(mob/living/M) +/datum/reagent/medicine/antihol/on_mob_life(mob/living/M) M.SetSlur(0) M.AdjustDrunk(-4) M.reagents.remove_all_type(/datum/reagent/ethanol, 8, 0, 1) @@ -700,14 +696,14 @@ M.adjustToxLoss(-2.0) ..() -/datum/reagent/stimulants +/datum/reagent/medicine/stimulants name = "Stimulants" id = "stimulants" description = "Increases run speed and eliminates stuns, can heal minor damage. If overdosed it will deal toxin damage and stun." color = "#C8A5DC" metabolization_rate = 0.4 -/datum/reagent/stimulants/on_mob_life(mob/living/M) +/datum/reagent/medicine/stimulants/on_mob_life(mob/living/M) if(volume > 5) M.adjustOxyLoss(-5*REM) M.adjustToxLoss(-5*REM) @@ -729,7 +725,7 @@ M.Stun(3) ..() -/datum/reagent/stimulants/on_mob_delete(mob/living/M) +/datum/reagent/medicine/stimulants/on_mob_delete(mob/living/M) M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE ..() @@ -764,25 +760,25 @@ M.adjustToxLoss(1*REM) M.AdjustLoseBreath(1) -/datum/reagent/insulin +/datum/reagent/medicine/insulin name = "Insulin" id = "insulin" description = "A hormone generated by the pancreas responsible for metabolizing carbohydrates and fat in the bloodstream." reagent_state = LIQUID color = "#C8A5DC" -/datum/reagent/insulin/on_mob_life(mob/living/M) +/datum/reagent/medicine/insulin/on_mob_life(mob/living/M) M.reagents.remove_reagent("sugar", 5) ..() -/datum/reagent/simethicone +/datum/reagent/medicine/simethicone name = "Simethicone" id = "simethicone" description = "This strange liquid seems to have no bubbles on the surface." color = "#14AA46" -/datum/reagent/teporone +/datum/reagent/medicine/teporone name = "Teporone" id = "teporone" description = "This experimental plasma-based compound seems to regulate body temperature." @@ -791,21 +787,21 @@ addiction_chance = 20 overdose_threshold = 50 -/datum/reagent/teporone/on_mob_life(mob/living/M) +/datum/reagent/medicine/teporone/on_mob_life(mob/living/M) if(M.bodytemperature > 310) M.bodytemperature = max(310, M.bodytemperature - (40 * TEMPERATURE_DAMAGE_COEFFICIENT)) else if(M.bodytemperature < 311) M.bodytemperature = min(310, M.bodytemperature + (40 * TEMPERATURE_DAMAGE_COEFFICIENT)) ..() -/datum/reagent/haloperidol +/datum/reagent/medicine/haloperidol name = "Haloperidol" id = "haloperidol" description = "Haloperidol is a powerful antipsychotic and sedative. Will help control psychiatric problems, but may cause brain damage." reagent_state = LIQUID color = "#FFDCFF" -/datum/reagent/haloperidol/on_mob_life(mob/living/M) +/datum/reagent/medicine/haloperidol/on_mob_life(mob/living/M) M.reagents.remove_reagent("crank", 5) M.reagents.remove_reagent("methamphetamine", 5) M.reagents.remove_reagent("space_drugs", 5) @@ -827,14 +823,14 @@ M.adjustBrainLoss(1) ..() -/datum/reagent/ether +/datum/reagent/medicine/ether name = "Ether" id = "ether" description = "A strong anesthetic and sedative." reagent_state = LIQUID color = "#96DEDE" -/datum/reagent/ether/on_mob_life(mob/living/M) +/datum/reagent/medicine/ether/on_mob_life(mob/living/M) M.AdjustJitter(-25) switch(current_cycle) if(1 to 15) @@ -847,12 +843,32 @@ M.Drowsy(20) ..() +//virus-specific symptom reagents + +/datum/reagent/medicine/synaphydramine + name = "Diphen-Synaptizine" + id = "synaphydramine" + description = "Reduces drowsiness and hallucinations while also purging histamine from the body." + color = "#EC536D" // rgb: 236, 83, 109 + +/datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/M) + M.AdjustDrowsy(-5) + if(holder.has_reagent("lsd")) + holder.remove_reagent("lsd", 5) + if(holder.has_reagent("histamine")) + holder.remove_reagent("histamine", 5) + M.AdjustHallucinate(-10) + if(prob(30)) + M.adjustToxLoss(1) + ..() + + ////////////////////////////// // Synth-Meds // ////////////////////////////// //Degreaser: Mild Purgative / Lube Remover -/datum/reagent/degreaser +/datum/reagent/medicine/degreaser name = "Degreaser" id = "degreaser" description = "An industrial degreaser which can be used to clean residual build-up from machinery and surfaces." @@ -860,12 +876,12 @@ color = "#CC7A00" process_flags = SYNTHETIC -/datum/reagent/degreaser/reaction_turf(turf/simulated/T, volume) +/datum/reagent/medicine/degreaser/reaction_turf(turf/simulated/T, volume) if(volume >= 1 && istype(T)) if(T.wet) T.MakeDry(TURF_WET_LUBE) -/datum/reagent/degreaser/on_mob_life(mob/living/M) +/datum/reagent/medicine/degreaser/on_mob_life(mob/living/M) if(prob(50)) //Same effects as coffee, to help purge ill effects like paralysis M.AdjustParalysis(-1) M.AdjustStunned(-1) @@ -881,7 +897,7 @@ ..() //Liquid Solder: Mannitol -/datum/reagent/liquid_solder +/datum/reagent/medicine/liquid_solder name = "Liquid Solder" id = "liquid_solder" description = "A solution formulated to clean and repair damaged connections in posibrains while in use." @@ -889,7 +905,7 @@ color = "#D7B395" process_flags = SYNTHETIC -/datum/reagent/liquid_solder/on_mob_life(mob/living/M) +/datum/reagent/medicine/liquid_solder/on_mob_life(mob/living/M) M.adjustBrainLoss(-3) ..() @@ -910,7 +926,7 @@ ..() -/datum/reagent/omnizine_diluted +/datum/reagent/medicine/omnizine_diluted name = "Diluted Omnizine" id = "weak_omnizine" description = "Slowly heals all damage types. A far weaker substitute than actual omnizine." @@ -919,14 +935,14 @@ overdose_threshold = 30 metabolization_rate = 0.1 -/datum/reagent/omnizine_diluted/on_mob_life(mob/living/M) +/datum/reagent/medicine/omnizine_diluted/on_mob_life(mob/living/M) M.adjustToxLoss(-0.5*REM) M.adjustOxyLoss(-0.5*REM) M.adjustBruteLoss(-0.5*REM) M.adjustFireLoss(-0.5*REM) ..() -/datum/reagent/omnizine_diluted/overdose_process(mob/living/M, severity) +/datum/reagent/medicine/omnizine_diluted/overdose_process(mob/living/M, severity) var/effect = ..() if(severity == 1) //lesser M.stuttering += 1 diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm index 2b0b51ad89e..3a33fcddcd2 100644 --- a/code/modules/reagents/chemistry/reagents/misc.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -177,8 +177,6 @@ reagent_state = LIQUID color = "#322D00" - -// Ported from Bay as part of the Botany Update // Allows you to make planks from any plant that has this reagent in it. // Also vines with this reagent are considered dense. /datum/reagent/woodpulp @@ -188,8 +186,6 @@ reagent_state = LIQUID color = "#B97A57" -var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700") - /datum/reagent/oil name = "Oil" id = "oil" @@ -271,13 +267,6 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 T.color = pick(random_color_list) ..() -/datum/reagent/corgium - name = "Corgium" - id = "corgium" - description = "Corgi in liquid form. Don't ask." - reagent_state = LIQUID - color = "#F9A635" - /datum/reagent/hair_dye name = "Quantum Hair Dye" id = "hair_dye" @@ -409,6 +398,17 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 break ..() +/datum/reagent/royal_bee_jelly + name = "royal bee jelly" + id = "royal_bee_jelly" + description = "Royal Bee Jelly, if injected into a Queen Space Bee said bee will split into two bees." + color = "#00ff80" + +/datum/reagent/royal_bee_jelly/on_mob_life(mob/living/M) + if(prob(2)) + M.say(pick("Bzzz...","BZZ BZZ","Bzzzzzzzzzzz...")) + ..() + ///Alchemical Reagents /datum/reagent/eyenewt @@ -444,15 +444,4 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 id = "triplepiss" description = "Ewwwwwwwww." reagent_state = LIQUID - color = "#857400" - -/datum/reagent/royal_bee_jelly - name = "royal bee jelly" - id = "royal_bee_jelly" - description = "Royal Bee Jelly, if injected into a Queen Space Bee said bee will split into two bees." - color = "#00ff80" - -/datum/reagent/royal_bee_jelly/on_mob_life(mob/living/M) - if(prob(2)) - M.say(pick("Bzzz...","BZZ BZZ","Bzzzzzzzzzzz...")) - ..() \ No newline at end of file + color = "#857400" \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 4585e8df667..b4510044594 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -732,21 +732,6 @@ H.heart_attack = 1 // rip in pepperoni ..() -/datum/reagent/concentrated_initro - name = "Concentrated Initropidril" - id = "concentrated_initro" - description = "A guaranteed heart-stopper!" - reagent_state = LIQUID - color = "#AB1CCF" - metabolization_rate = 0.4 - -/datum/reagent/concentrated_initro/on_mob_life(mob/living/M) - if(volume >=5) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(!H.heart_attack) - H.heart_attack = 1 // rip in pepperoni - /datum/reagent/pancuronium name = "Pancuronium" id = "pancuronium" From 710e0e1005ffa37e6a705f56b3956b59365a7c30 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 4 Nov 2016 14:38:18 -0400 Subject: [PATCH 019/193] oops --- code/modules/reagents/chemistry/colors.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/colors.dm b/code/modules/reagents/chemistry/colors.dm index 479059bda08..381c3153ae9 100644 --- a/code/modules/reagents/chemistry/colors.dm +++ b/code/modules/reagents/chemistry/colors.dm @@ -2,7 +2,7 @@ * Returns: * #RRGGBB(AA) on success, null on failure */ - var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700") +var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700") /proc/mix_color_from_reagents(const/list/reagent_list) if(!istype(reagent_list)) From 3cdfbbe3529cf7d6767c4f373ed86c4019174248 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Fri, 4 Nov 2016 12:24:32 -0700 Subject: [PATCH 020/193] Fixes a couple incorrect research prereq specifications --- code/modules/research/designs/mechfabricator_designs.dm | 2 +- code/modules/research/designs/spacepod_designs.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index c373513a5f1..702afa68f2f 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -953,7 +953,7 @@ desc = "A device that shoots resonant plasma bursts at extreme velocity. The blasts are capable of crushing rock and demolishing solid obstacles." id = "mech_plasma_cutter" build_type = MECHFAB - req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3, "combat" = 1, "plasma" = 2) + req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3, "combat" = 1, "plasmatech" = 2) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma materials = list(MAT_METAL=1500, MAT_GLASS=500, MAT_PLASMA=200) construction_time = 100 diff --git a/code/modules/research/designs/spacepod_designs.dm b/code/modules/research/designs/spacepod_designs.dm index 759af82404d..4638a1bb830 100644 --- a/code/modules/research/designs/spacepod_designs.dm +++ b/code/modules/research/designs/spacepod_designs.dm @@ -121,7 +121,7 @@ desc = "Allows for the construction of a spacepod mounted laser." id = "podgun_laser" build_type = PODFAB - req_tech = list("materials" = 3, "combat" = 3, "plasma" = 2) + req_tech = list("materials" = 3, "combat" = 3, "plasmatech" = 2) build_path = /obj/item/device/spacepod_equipment/weaponry/laser category = list("Pod_Weaponry") materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_GOLD=1000,MAT_SILVER=2000) @@ -250,4 +250,4 @@ build_type = PODFAB materials = list(MAT_METAL=500) build_path = /obj/item/device/spacepod_key - category = list("Pod_Parts") \ No newline at end of file + category = list("Pod_Parts") From 5b97a49e5bbd927ad10466fc8683429d66d19fc5 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 4 Nov 2016 15:58:03 -0400 Subject: [PATCH 021/193] Automatic changelog generation for PR #5845 --- html/changelogs/AutoChangeLog-pr-5845.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5845.yml diff --git a/html/changelogs/AutoChangeLog-pr-5845.yml b/html/changelogs/AutoChangeLog-pr-5845.yml new file mode 100644 index 00000000000..e982c917c18 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5845.yml @@ -0,0 +1,5 @@ +author: Crazylemon64 +delete-after: True +changes: + - bugfix: "The mech-mounted plasma cutter can now be constructed again" + - bugfix: "Space pod lasers can now be constructed again" From c0e4b5bdc92340d811d10ae815dbca1f074a90b8 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 5 Nov 2016 00:46:07 -0400 Subject: [PATCH 022/193] Fixes Xeno Stuns --- code/modules/mob/living/carbon/alien/alien.dm | 6 +++--- .../carbon/alien/humanoid/caste/hunter.dm | 4 ++-- .../mob/living/carbon/alien/humanoid/life.dm | 19 +++---------------- .../mob/living/carbon/alien/larva/life.dm | 9 --------- code/modules/mob/living/carbon/carbon.dm | 2 +- code/modules/mob/living/life.dm | 6 +++--- code/modules/mob/living/living.dm | 6 +++--- 7 files changed, 15 insertions(+), 37 deletions(-) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 9e91abdd3e4..ca520ba9289 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -27,7 +27,7 @@ var/heat_protection = 0.5 var/leaping = 0 ventcrawler = 2 - + var/list/alien_organs = list() /mob/living/carbon/alien/New() @@ -163,8 +163,8 @@ show_stat_emergency_shuttle_eta() -/mob/living/carbon/alien/SetStunned(amount) - ..(amount) +/mob/living/carbon/alien/SetStunned(amount, updating = 1, force = 0) + ..() if(!(status_flags & CANSTUN) && amount) // add some movement delay move_delay_add = min(move_delay_add + round(amount / 2), 10) // a maximum delay of 10 diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index 60a7e4e2f1a..afbac7f8c49 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -108,7 +108,7 @@ sleep(2)//Runtime prevention (infinite bump() calls on hulks) step_towards(src,L) else - weakened = 2 + Weaken(2, 1, 1) toggle_leap(0) pounce_cooldown = !pounce_cooldown @@ -116,7 +116,7 @@ pounce_cooldown = !pounce_cooldown else if(A.density && !A.CanPass(src)) visible_message("[src] smashes into [A]!", "[src] smashes into [A]!") - weakened = 2 + Weaken(2, 1, 1) if(leaping) leaping = 0 diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm index da93e43c13f..e6a2f6567c2 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm @@ -66,8 +66,8 @@ return 1 //UNCONSCIOUS. NO-ONE IS HOME - if( (getOxyLoss() > 50) || (config.health_threshold_crit >= health) ) - if( health <= 20 && prob(1) ) + if((getOxyLoss() > 50) || (config.health_threshold_crit >= health)) + if(health <= 20 && prob(1)) spawn(0) emote("gasp") if(!reagents.has_reagent("epinephrine")) @@ -75,14 +75,12 @@ Paralyse(3) if(paralysis) - AdjustParalysis(-1) blinded = 1 stat = UNCONSCIOUS else if(sleeping) - AdjustSleeping(-1) blinded = 1 stat = UNCONSCIOUS - if( prob(10) && health ) + if(prob(10) && health) spawn(0) emote("hiss") //CONSCIOUS @@ -110,17 +108,6 @@ else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs AdjustEarDamage(-0.05) - //Other - if(stunned) - AdjustStunned(-1) - if(!stunned) - update_icons() - - if(weakened) - weakened = max(weakened-1,0) - if(!weakened) - update_icons() - if(stuttering) AdjustStuttering(-1) diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 03cb2096963..447f65c6744 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -35,11 +35,9 @@ Paralyse(3) if(paralysis) - AdjustParalysis(-2) blinded = 1 stat = UNCONSCIOUS else if(sleeping) - AdjustSleeping(-1) blinded = 1 stat = UNCONSCIOUS if( prob(10) && health ) @@ -70,13 +68,6 @@ else if(ear_damage < 25) //ear damage heals slowly under this threshold. AdjustEarDamage(-0.05) - //Other - if(stunned) - AdjustStunned(-1) - - if(weakened) - AdjustWeakened(-1) - if(stuttering) AdjustStuttering(-1) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 256aa562f72..f62df2ab76b 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -742,7 +742,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, /mob/living/carbon/resist_fire() fire_stacks -= 5 - weakened = max(weakened, 3)//We dont check for CANWEAKEN, I don't care how immune to weakening you are, if you're rolling on the ground, you're busy. + Weaken(3, 1, 1) //We dont check for CANWEAKEN, I don't care how immune to weakening you are, if you're rolling on the ground, you're busy. update_canmove() spin(32,2) visible_message("[src] rolls on the floor, trying to put themselves out!", \ diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 308025e0204..e7222caa910 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -117,14 +117,14 @@ /mob/living/proc/handle_stunned() if(stunned) - AdjustStunned(-1) + AdjustStunned(-1, updating = 1, force = 1) if(!stunned) update_icons() return stunned /mob/living/proc/handle_weakened() if(weakened) - AdjustWeakened(-1) + AdjustWeakened(-1, updating = 1, force = 1) if(!weakened) update_icons() return weakened @@ -151,7 +151,7 @@ /mob/living/proc/handle_paralysed() if(paralysis) - AdjustParalysis(-1) + AdjustParalysis(-1, updating = 1, force = 1) return paralysis /mob/living/proc/handle_sleeping() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index dd9e9f7cbd6..6be18445b44 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -320,9 +320,9 @@ setBrainLoss(0) setStaminaLoss(0) SetSleeping(0) - SetParalysis(0) - SetStunned(0) - SetWeakened(0) + SetParalysis(0, 1, 1) + SetStunned(0, 1, 1) + SetWeakened(0, 1, 1) SetSlowed(0) SetLoseBreath(0) SetDizzy(0) From dc0e1258dc64f500e1478be3f7c6edc99d24d803 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sat, 5 Nov 2016 18:19:40 -0400 Subject: [PATCH 023/193] Automatic changelog generation for PR #5846 --- html/changelogs/AutoChangeLog-pr-5846.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5846.yml diff --git a/html/changelogs/AutoChangeLog-pr-5846.yml b/html/changelogs/AutoChangeLog-pr-5846.yml new file mode 100644 index 00000000000..d621028a26b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5846.yml @@ -0,0 +1,6 @@ +author: Fox McCloud +delete-after: True +changes: + - bugfix: "Fixes hunters not being weakened when crashing into a shield/wall" + - bugfix: "Fixes xeno stuns half the time intended" + - bugfix: "Fixes stopping, dropping, and rolling not properly weakening Xenos/Hulks" From 77c6460bfe14ec44c262e381083b08a93a159b46 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 6 Nov 2016 02:02:08 -0500 Subject: [PATCH 024/193] drinking glass refactor --- .../drinks/drinks/drinkingglass.dm | 523 +----------------- code/modules/reagents/chemistry/holder.dm | 10 + code/modules/reagents/chemistry/reagents.dm | 3 + .../reagents/chemistry/reagents/alcohol.dm | 400 ++++++++++++++ .../reagents/chemistry/reagents/drink_cold.dm | 39 ++ .../reagents/chemistry/reagents/drinks.dm | 218 +++----- .../reagents/chemistry/reagents/drugs.dm | 3 + .../reagents/chemistry/reagents/food.dm | 6 + .../chemistry/reagents/pyrotechnic.dm | 3 + .../reagents/chemistry/reagents/toxins.dm | 3 + .../reagents/chemistry/reagents/water.dm | 9 + 11 files changed, 552 insertions(+), 665 deletions(-) diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm index bc1442038e9..0412c93626b 100644 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm @@ -36,523 +36,12 @@ reagents.clear_reagents() extinguish() -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/on_reagent_change() // *scream - if(reagents.reagent_list.len > 0) - switch(reagents.get_master_reagent_id()) - if("beer") - icon_state = "beerglass" - name = "Beer glass" - desc = "A freezing pint of beer" - if("cider") - icon_state = "rewriter" - name = "Cider" - desc = "a refreshing glass of traditional cider" - if("beer2") - icon_state = "beerglass" - name = "Beer glass" - desc = "A freezing pint of beer" - if("ale") - icon_state = "aleglass" - name = "Ale glass" - desc = "A freezing pint of delicious Ale" - if("milk") - icon_state = "glass_white" - name = "Glass of milk" - desc = "White and nutritious goodness!" - if("cream") - icon_state = "glass_white" - name = "Glass of cream" - desc = "Ewwww..." - if("chocolate") - icon_state = "chocolateglass" - name = "Glass of chocolate" - desc = "Tasty" - if("hot_coco") - icon_state = "hot_coco" - name = "Glass of hot coco" - desc = "Delicious and cozy" - if("lemonjuice") - icon_state = "lemonglass" - name = "Glass of lemonjuice" - desc = "Sour..." - if("cola") - icon_state = "glass_brown" - name = "Glass of Space Cola" - desc = "A glass of refreshing Space Cola" - if("nuka_cola") - icon_state = "nuka_colaglass" - name = "Nuka Cola" - desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland" - if("orangejuice") - icon_state = "glass_orange" - name = "Glass of Orange juice" - desc = "Vitamins! Yay!" - if("tomatojuice") - icon_state = "glass_red" - name = "Glass of Tomato juice" - desc = "Are you sure this is tomato juice?" - if("blood") - icon_state = "glass_red" - name = "Glass of Tomato juice" - desc = "Are you sure this is tomato juice?" - if("limejuice") - icon_state = "glass_green" - name = "Glass of Lime juice" - desc = "A glass of sweet-sour lime juice." - if("whiskey") - icon_state = "whiskeyglass" - name = "Glass of whiskey" - desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy." - if("gin") - icon_state = "ginvodkaglass" - name = "Glass of gin" - desc = "A crystal clear glass of Griffeater gin." - if("vodka") - icon_state = "ginvodkaglass" - name = "Glass of vodka" - desc = "The glass contain wodka. Xynta." - if("sake") - icon_state = "ginvodkaglass" - name = "Glass of Sake" - desc = "A glass of Sake." - if("goldschlager") - icon_state = "ginvodkaglass" - name = "Glass of goldschlager" - desc = "100 proof that teen girls will drink anything with gold in it." - if("wine") - icon_state = "wineglass" - name = "Glass of wine" - desc = "A very classy looking drink." - if("cognac") - icon_state = "cognacglass" - name = "Glass of cognac" - desc = "Damn, you feel like some kind of French aristocrat just by holding this." - if("kahlua") - icon_state = "kahluaglass" - name = "Glass of RR coffee Liquor" - desc = "DAMN, THIS THING LOOKS ROBUST" - if("vermouth") - icon_state = "vermouthglass" - name = "Glass of Vermouth" - desc = "You wonder why you're even drinking this straight." - if("triple_citrus") - icon_state = "triplecitrus" - name = "Glass of Triplecitrus Juice" - desc = "As colorful and healthy as it is delicious." - if("mojito") - icon_state = "mojito" - name = "Glass of Mojito" - desc = "Fresh from Spesscuba." - if("tequila") - icon_state = "tequilaglass" - name = "Glass of Tequila" - desc = "Now all that's missing is the weird colored shades!" - if("patron") - icon_state = "patronglass" - name = "Glass of Patron" - desc = "Drinking patron in the bar, with all the subpar ladies." - if("rum") - icon_state = "rumglass" - name = "Glass of Rum" - desc = "Now you want to Pray for a pirate suit, don't you?" - if("absinthe") - icon_state = "absinthebottle" - name = "Glass of Absinthe" - desc = "The green fairy is going to get you now!" - if("gintonic") - icon_state = "gintonicglass" - name = "Gin and Tonic" - desc = "A mild but still great cocktail. Drink up, like a true Englishman." - if("ginsonic") - icon_state = "ginsonic" - name = "Gin and Sonic" - desc = "An extremely high amperage drink. Absolutely not for the true Englishman." - if("whiskeycola") - icon_state = "whiskeycolaglass" - name = "Whiskey Cola" - desc = "An innocent-looking mixture of cola and Whiskey. Delicious." - if("whiterussian") - icon_state = "whiterussianglass" - name = "White Russian" - desc = "A very nice looking drink. But that's just, like, your opinion, man." - if("screwdrivercocktail") - icon_state = "screwdriverglass" - name = "Screwdriver" - desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer." - if("bloodymary") - icon_state = "bloodymaryglass" - name = "Bloody Mary" - desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder." - if("martini") - icon_state = "martiniglass" - name = "Classic Martini" - desc = "Damn, the bartender even stirred it, not shook it." - if("vodkamartini") - icon_state = "martiniglass" - name = "Vodka martini" - desc ="A bastardisation of the classic martini. Still great." - if("gargleblaster") - icon_state = "gargleblasterglass" - name = "Pan-Galactic Gargle Blaster" - desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy." - if("bravebull") - icon_state = "bravebullglass" - name = "Brave Bull" - desc = "Tequila and Coffee liquor, brought together in a mouthwatering mixture. Drink up." - if("tequilasunrise") - icon_state = "tequilasunriseglass" - name = "Tequila Sunrise" - desc = "Oh great, now you feel nostalgic about sunrises back on Terra..." - if("toxinsspecial") - icon_state = "toxinsspecialglass" - name = "Toxins Special" - desc = "Whoah, this thing is on FIRE" - if("beepskysmash") - icon_state = "beepskysmashglass" - name = "Beepsky Smash" - desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." - if("doctorsdelight") - icon_state = "doctorsdelightglass" - name = "Doctor's Delight" - desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place." - if("manlydorf") - icon_state = "manlydorfglass" - name = "The Manly Dorf" - desc = "A manly concotion made from Ale and Beer. Intended for true men only." - if("irishcream") - icon_state = "irishcreamglass" - name = "Irish Cream" - desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?" - if("cubalibre") - icon_state = "cubalibreglass" - name = "Cuba Libre" - desc = "A classic mix of rum and cola." - if("b52") - icon_state = "b52glass" - name = "B-52" - desc = "Kahlua, Irish Cream, and congac. You will get bombed." - if("atomicbomb") - icon_state = "atomicbombglass" - name = "Atomic Bomb" - desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing." - if("longislandicedtea") - icon_state = "longislandicedteaglass" - name = "Long Island Iced Tea" - desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." - if("threemileisland") - icon_state = "threemileislandglass" - name = "Three Mile Island Ice Tea" - desc = "A glass of this is sure to prevent a meltdown." - if("margarita") - icon_state = "margaritaglass" - name = "Margarita" - desc = "On the rocks with salt on the rim. Arriba~!" - if("blackrussian") - icon_state = "blackrussianglass" - name = "Black Russian" - desc = "For the lactose-intolerant. Still as classy as a White Russian." - if("vodkatonic") - icon_state = "vodkatonicglass" - name = "Vodka and Tonic" - desc = "For when a gin and tonic isn't russian enough." - if("manhattan") - icon_state = "manhattanglass" - name = "Manhattan" - desc = "The Detective's undercover drink of choice. He never could stomach gin..." - if("manhattan_proj") - icon_state = "proj_manhattanglass" - name = "Manhattan Project" - desc = "A scienitst drink of choice, for thinking how to blow up the station." - if("ginfizz") - icon_state = "ginfizzglass" - name = "Gin Fizz" - desc = "Refreshingly lemony, deliciously dry." - if("irishcoffee") - icon_state = "irishcoffeeglass" - name = "Irish Coffee" - desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning." - if("suicider") - icon_state = "suicider" - name = "Suicider" - desc = "You've really hit rock bottom now... your liver packed its bags and left last night." - if("whiskeysoda") - icon_state = "whiskeysodaglass2" - name = "Whiskey Soda" - desc = "Ultimate refreshment." - if("tonic") - icon_state = "glass_clear" - name = "Glass of Tonic Water" - desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." - if("sodawater") - icon_state = "glass_clear" - name = "Glass of Soda Water" - desc = "Soda water. Why not make a scotch and soda?" - if("water") - icon_state = "glass_clear" - name = "Glass of Water" - desc = "The father of all refreshments." - if("spacemountainwind") - icon_state = "Space_mountain_wind_glass" - name = "Glass of Space Mountain Wind" - desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind." - if("thirteenloko") - icon_state = "thirteen_loko_glass" - name = "Glass of Thirteen Loko" - desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass" - if("dr_gibb") - icon_state = "dr_gibb_glass" - name = "Glass of Dr. Gibb" - desc = "Dr. Gibb. Not as dangerous as the name might imply." - if("space_up") - icon_state = "space-up_glass" - name = "Glass of Space-up" - desc = "Space-up. It helps keep your cool." - if("moonshine") - icon_state = "glass_clear" - name = "Moonshine" - desc = "You've really hit rock bottom now... your liver packed its bags and left last night." - if("soymilk") - icon_state = "glass_white" - name = "Glass of soy milk" - desc = "White and nutritious soy goodness!" - if("berryjuice") - icon_state = "berryjuice" - name = "Glass of berry juice" - desc = "Berry juice. Or maybe its jam. Who cares?" - if("poisonberryjuice") - icon_state = "poisonberryjuice" - name = "Glass of poison berry juice" - desc = "A glass of deadly juice." - if("carrotjuice") - icon_state = "carrotjuice" - name = "Glass of carrot juice" - desc = "It is just like a carrot but without crunching." - if("potato") - icon_state = "glass_brown" - name = "Glass of potato juice" - desc = "Who in the hell requests this? Gross!" - if("banana") - icon_state = "banana" - name = "Glass of banana juice" - desc = "The raw essence of a banana. HONK" - if("bahama_mama") - icon_state = "bahama_mama" - name = "Bahama Mama" - desc = "Tropic cocktail" - if("singulo") - icon_state = "singulo" - name = "Singulo" - desc = "A blue-space beverage." - if("alliescocktail") - icon_state = "alliescocktail" - name = "Allies cocktail" - desc = "A drink made from your allies." - if("antifreeze") - icon_state = "antifreeze" - name = "Anti-freeze" - desc = "The ultimate refreshment." - if("barefoot") - icon_state = "b&p" - name = "Barefoot" - desc = "Barefoot and pregnant" - if("demonsblood") - icon_state = "demonsblood" - name = "Demons Blood" - desc = "Just looking at this thing makes the hair at the back of your neck stand up." - if("booger") - icon_state = "booger" - name = "Booger" - desc = "Ewww..." - if("snowwhite") - icon_state = "snowwhite" - name = "Snow White" - desc = "A cold refreshment." - if("aloe") - icon_state = "aloe" - name = "Aloe" - desc = "Very, very, very good." - if("andalusia") - icon_state = "andalusia" - name = "Andalusia" - desc = "A nice, strange named drink." - if("sbiten") - icon_state = "sbitenglass" - name = "Sbiten" - desc = "A spicy mix of Vodka and Spice. Very hot." - if("red_mead") - icon_state = "red_meadglass" - name = "Red Mead" - desc = "A True Vikings Beverage, though its color is strange." - if("mead") - icon_state = "meadglass" - name = "Mead" - desc = "A Vikings Beverage, though a cheap one." - if("iced_beer") - icon_state = "iced_beerglass" - name = "Iced Beer" - desc = "A beer so frosty, the air around it freezes." - if("grog") - icon_state = "grogglass" - name = "Grog" - desc = "A fine and cepa drink for Space." - if("soy_latte") - icon_state = "soy_latte" - name = "Soy Latte" - desc = "A nice and refrshing beverage while you are reading." - if("cafe_latte") - icon_state = "cafe_latte" - name = "Cafe Latte" - desc = "A nice, strong and refreshing beverage while you are reading." - if("cafe_mocha") - icon_state = "cafe_latte" - name = "Cafe Mocha" - desc = "The perfect blend of coffe, milk, and chocolate." - if("acidspit") - icon_state = "acidspitglass" - name = "Acid Spit" - desc = "A drink from Nanotrasen. Made from live aliens." - if("amasec") - icon_state = "amasecglass" - name = "Amasec" - desc = "Always handy before COMBAT!!!" - if("neurotoxin") - icon_state = "neurotoxinglass" - name = "Neurotoxin" - desc = "A drink that is guaranteed to knock you silly." - if("hippiesdelight") - icon_state = "hippiesdelightglass" - name = "Hippie's Delight" - desc = "A drink enjoyed by people during the 1960's." - if("bananahonk") - icon_state = "bananahonkglass" - name = "Banana Honk" - desc = "A drink from Banana Heaven." - if("silencer") - icon_state = "silencerglass" - name = "Silencer" - desc = "A drink from mime Heaven." - if("nothing") - icon_state = "nothing" - name = "Nothing" - desc = "Absolutely nothing." - if("devilskiss") - icon_state = "devilskiss" - name = "Devils Kiss" - desc = "Creepy time!" - if("changelingsting") - icon_state = "changelingsting" - name = "Changeling Sting" - desc = "A stingy drink." - if("irishcarbomb") - icon_state = "irishcarbomb" - name = "Irish Car Bomb" - desc = "An irish car bomb." - if("syndicatebomb") - icon_state = "syndicatebomb" - name = "Syndicate Bomb" - desc = "A syndicate bomb." - if("erikasurprise") - icon_state = "erikasurprise" - name = "Erika Surprise" - desc = "The surprise is, it's green!" - if("driestmartini") - icon_state = "driestmartiniglass" - name = "Driest Martini" - desc = "Only for the experienced. You think you see sand floating in the glass." - if("ice") - icon_state = "iceglass" - name = "Glass of ice" - desc = "Generally, you're supposed to put something else in there too..." - if("icecoffee") - icon_state = "icedcoffeeglass" - name = "Iced Coffee" - desc = "A drink to perk you up and refresh you!" - if("coffee") - icon_state = "glass_brown" - name = "Glass of coffee" - desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere." - if("bilk") - icon_state = "glass_brown" - name = "Glass of bilk" - desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis." - if("fuel") - icon_state = "dr_gibb_glass" - name = "Glass of welder fuel" - desc = "Unless you are an industrial tool, this is probably not safe for consumption." - if("brownstar") - icon_state = "brownstar" - name = "Brown Star" - desc = "Its not what it sounds like..." - if("tea") - icon_state = "glass_brown" - name = "Glass of Tea" - desc = "A glass of hot tea. Perhaps a cup with a handle would have been smarter?" - if("icetea") - icon_state = "icetea" - name = "Iced Tea" - desc = "No relation to a certain rap artist/ actor." - if("milkshake") - icon_state = "milkshake" - name = "Milkshake" - desc = "Glorious brainfreezing mixture." - if("lemonade") - icon_state = "lemonade" - name = "Lemonade" - desc = "Oh the nostalgia..." - if("kiraspecial") - icon_state = "kiraspecial" - name = "Kira Special" - desc = "Long live the guy who everyone had mistaken for a girl. Baka!" - if("rewriter") - icon_state = "rewriter" - name = "Rewriter" - desc = "The secert of the sanctuary of the Libarian..." - if("applejack") - icon_state = "cognacglass" - name = "Glass of applejack" - desc = "When cider isn't strong enough, you gotta jack it." - if("jackrose") - icon_state = "patronglass" - name = "Jack Rose" - desc = "Drinking this makes you feel like you belong in a luxury hotel bar during the 1920s." - if("synthanol") - icon_state = "synthanolglass" - name = "Glass of Synthanol" - desc = "The equivalent of alcohol for synthetic crewmembers. They'd find it awful if they had tastebuds too." - if("robottears") - icon_state = "robottearsglass" - name = "Glass of Robot Tears" - desc = "No robots were hurt in the making of this drink." - if("trinary") - icon_state = "trinaryglass" - name = "Glass of Trinary" - desc = "Colorful drink made for synthetic crewmembers. It doesn't seem like it would taste well." - if("servo") - icon_state = "servoglass" - name = "Glass of Servo" - desc = "Chocolate - based drink made for IPCs. Not sure if anyone's actually tried out the recipe." - if("synthnsoda") - icon_state = "synthnsodaglass" - name = "Glass of Synth 'n Soda" - desc = "Classic drink altered to fit the tastes of a robot. Bad idea to drink if you're made of carbon." - if("synthignon") - icon_state = "synthignonglass" - name = "Glass of Synthignon" - desc = "Someone mixed good wine and robot booze. Romantic, but atrocious." - if("uplink") - icon_state = "uplinkglass" - name = "Glass of Uplink" - desc = "An exquisite mix of the finest liquoirs and synthanol. Meant only for synthetics." - if("holywater") - icon_state = "glass_clear" - name = "Glass of Water" - desc = "The father of all refreshments." - - - else - icon_state ="glass_brown" - name = "Glass of ..what?" - desc = "You can't really tell what this is." +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/on_reagent_change() + if(reagents.reagent_list.len) + var/datum/reagent/R = reagents.get_master_reagent() + icon_state = R.drink_icon + name = R.drink_name + desc = R.drink_desc else icon_state = "glass_empty" name = "glass" diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 12e8a73d35c..ea2b772098b 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -76,6 +76,16 @@ var/const/INGEST = 2 handle_reactions() return total_transfered +/datum/reagents/proc/get_master_reagent() + var/the_reagent = null + var/the_volume = 0 + for(var/datum/reagent/A in reagent_list) + if(A.volume > the_volume) + the_volume = A.volume + the_reagent = A + + return the_reagent + /datum/reagents/proc/get_master_reagent_name() var/the_name = null var/the_volume = 0 diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index f9e0a664e1a..8077b248587 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -32,6 +32,9 @@ var/last_addiction_dose = 0 var/overdosed = 0 // You fucked up and this is now triggering it's overdose effects, purge that shit quick. var/current_cycle = 1 + var/drink_icon = "glass_brown" // what icon state/name/description a drinking glass will use if this is the master reagent. + var/drink_name = "Glass of ..what?" + var/drink_desc = "You can't really tell what this is." /datum/reagent/Destroy() . = ..() diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index e337aa10e1f..a91c938871f 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -42,6 +42,9 @@ nutriment_factor = 2 * FOOD_METABOLISM color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon ="beerglass" + drink_name = "Beer glass" + drink_desc = "A freezing pint of beer" /datum/reagent/ethanol/cider name = "Cider" @@ -49,6 +52,9 @@ description = "An alcoholic beverage derived from apples." color = "#174116" alcohol_perc = 0.2 + drink_icon = "rewriter" + drink_name = "Cider" + drink_desc = "a refreshing glass of traditional cider" /datum/reagent/ethanol/whiskey name = "Whiskey" @@ -57,6 +63,9 @@ color = "#664300" // rgb: 102, 67, 0 dizzy_adj = 4 alcohol_perc = 0.4 + drink_icon = "whiskeyglass" + drink_name = "Glass of whiskey" + drink_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy." /datum/reagent/ethanol/specialwhiskey name = "Special Blend Whiskey" @@ -72,6 +81,9 @@ color = "#664300" // rgb: 102, 67, 0 dizzy_adj = 3 alcohol_perc = 0.5 + drink_icon = "ginvodkaglass" + drink_name = "Glass of gin" + drink_desc = "A crystal clear glass of Griffeater gin." /datum/reagent/ethanol/absinthe name = "Absinthe" @@ -81,6 +93,9 @@ overdose_threshold = 30 dizzy_adj = 5 alcohol_perc = 0.7 + drink_icon = "absinthebottle" + drink_name = "Glass of Absinthe" + drink_desc = "The green fairy is going to get you now!" //copy paste from LSD... shoot me /datum/reagent/ethanol/absinthe/on_mob_life(mob/living/M) @@ -98,6 +113,9 @@ overdose_threshold = 30 alcohol_perc = 0.4 dizzy_adj = 5 + drink_icon = "rumglass" + drink_name = "Glass of Rum" + drink_desc = "Now you want to Pray for a pirate suit, don't you?" /datum/reagent/ethanol/rum/overdose_process(mob/living/M, severity) M.adjustToxLoss(1) @@ -108,6 +126,9 @@ description = "If it's good enough for Spesscuba, it's good enough for you." color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "mojito" + drink_name = "Glass of Mojito" + drink_desc = "Fresh from Spesscuba." /datum/reagent/ethanol/vodka name = "Vodka" @@ -115,6 +136,9 @@ description = "Number one drink AND fueling choice for Russians worldwide." color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.4 + drink_icon = "ginvodkaglass" + drink_name = "Glass of vodka" + drink_desc = "The glass contain wodka. Xynta." /datum/reagent/ethanol/sake name = "Sake" @@ -122,6 +146,9 @@ description = "Anime's favorite drink." color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "ginvodkaglass" + drink_name = "Glass of Sake" + drink_desc = "A glass of Sake." /datum/reagent/ethanol/tequila name = "Tequila" @@ -129,6 +156,9 @@ description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?" color = "#A8B0B7" // rgb: 168, 176, 183 alcohol_perc = 0.4 + drink_icon = "tequilaglass" + drink_name = "Glass of Tequila" + drink_desc = "Now all that's missing is the weird colored shades!" /datum/reagent/ethanol/vermouth name = "Vermouth" @@ -136,6 +166,9 @@ description = "You suddenly feel a craving for a martini..." color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "vermouthglass" + drink_name = "Glass of Vermouth" + drink_desc = "You wonder why you're even drinking this straight." /datum/reagent/ethanol/wine name = "Wine" @@ -144,6 +177,9 @@ color = "#7E4043" // rgb: 126, 64, 67 dizzy_adj = 2 alcohol_perc = 0.2 + drink_icon = "wineglass" + drink_name = "Glass of wine" + drink_desc = "A very classy looking drink." /datum/reagent/ethanol/cognac name = "Cognac" @@ -152,6 +188,9 @@ color = "#664300" // rgb: 102, 67, 0 dizzy_adj = 4 alcohol_perc = 0.4 + drink_icon = "cognacglass" + drink_name = "Glass of cognac" + drink_desc = "Damn, you feel like some kind of French aristocrat just by holding this." /datum/reagent/ethanol/suicider //otherwise known as "I want to get so smashed my liver gives out and I die from alcohol poisoning". name = "Suicider" @@ -160,6 +199,9 @@ color = "#CF3811" dizzy_adj = 20 alcohol_perc = 1 //because that's a thing it's supposed to do, I guess + drink_icon = "suicider" + drink_name = "Suicider" + drink_desc = "You've really hit rock bottom now... your liver packed its bags and left last night." /datum/reagent/ethanol/ale name = "Ale" @@ -167,6 +209,9 @@ description = "A dark alchoholic beverage made by malted barley and yeast." color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.1 + drink_icon = "aleglass" + drink_name = "Ale glass" + drink_desc = "A freezing pint of delicious Ale" /datum/reagent/ethanol/thirteenloko name = "Thirteen Loko" @@ -176,6 +221,9 @@ color = "#102000" // rgb: 16, 32, 0 alcohol_perc = 0.3 heart_rate_increase = 1 + drink_icon = "thirteen_loko_glass" + drink_name = "Glass of Thirteen Loko" + drink_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass" /datum/reagent/ethanol/thirteenloko/on_mob_life(mob/living/M) M.nutrition += nutriment_factor @@ -196,6 +244,9 @@ reagent_state = LIQUID color = "#895C4C" // rgb: 137, 92, 76 alcohol_perc = 0.2 + drink_icon = "glass_brown" + drink_name = "Glass of bilk" + drink_desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis." /datum/reagent/ethanol/atomicbomb name = "Atomic Bomb" @@ -204,6 +255,9 @@ reagent_state = LIQUID color = "#666300" // rgb: 102, 99, 0 alcohol_perc = 0.2 + drink_icon = "atomicbombglass" + drink_name = "Atomic Bomb" + drink_desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing." /datum/reagent/ethanol/threemileisland name = "THree Mile Island Iced Tea" @@ -212,6 +266,9 @@ reagent_state = LIQUID color = "#666340" // rgb: 102, 99, 64 alcohol_perc = 0.2 + drink_icon = "threemileislandglass" + drink_name = "Three Mile Island Ice Tea" + drink_desc = "A glass of this is sure to prevent a meltdown." /datum/reagent/ethanol/goldschlager name = "Goldschlager" @@ -220,6 +277,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.4 + drink_icon = "ginvodkaglass" + drink_name = "Glass of goldschlager" + drink_desc = "100 proof that teen girls will drink anything with gold in it." /datum/reagent/ethanol/patron name = "Patron" @@ -228,6 +288,9 @@ reagent_state = LIQUID color = "#585840" // rgb: 88, 88, 64 alcohol_perc = 0.4 + drink_icon = "patronglass" + drink_name = "Glass of Patron" + drink_desc = "Drinking patron in the bar, with all the subpar ladies." /datum/reagent/ethanol/gintonic name = "Gin and Tonic" @@ -236,6 +299,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.4 + drink_icon = "gintonicglass" + drink_name = "Gin and Tonic" + drink_desc = "A mild but still great cocktail. Drink up, like a true Englishman." /datum/reagent/ethanol/cuba_libre name = "Cuba Libre" @@ -244,6 +310,9 @@ reagent_state = LIQUID color = "#3E1B00" // rgb: 62, 27, 0 alcohol_perc = 0.2 + drink_icon = "cubalibreglass" + drink_name = "Cuba Libre" + drink_desc = "A classic mix of rum and cola." /datum/reagent/ethanol/whiskey_cola name = "Whiskey Cola" @@ -252,6 +321,9 @@ reagent_state = LIQUID color = "#3E1B00" // rgb: 62, 27, 0 alcohol_perc = 0.3 + drink_icon = "whiskeycolaglass" + drink_name = "Whiskey Cola" + drink_desc = "An innocent-looking mixture of cola and Whiskey. Delicious." /datum/reagent/ethanol/martini name = "Classic Martini" @@ -260,6 +332,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.5 + drink_icon = "martiniglass" + drink_name = "Classic Martini" + drink_desc = "Damn, the bartender even stirred it, not shook it." /datum/reagent/ethanol/vodkamartini name = "Vodka Martini" @@ -268,6 +343,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.4 + drink_icon = "martiniglass" + drink_name = "Vodka martini" + drink_desc ="A bastardisation of the classic martini. Still great." /datum/reagent/ethanol/white_russian name = "White Russian" @@ -276,6 +354,9 @@ reagent_state = LIQUID color = "#A68340" // rgb: 166, 131, 64 alcohol_perc = 0.3 + drink_icon = "whiterussianglass" + drink_name = "White Russian" + drink_desc = "A very nice looking drink. But that's just, like, your opinion, man." /datum/reagent/ethanol/screwdrivercocktail name = "Screwdriver" @@ -284,6 +365,9 @@ reagent_state = LIQUID color = "#A68310" // rgb: 166, 131, 16 alcohol_perc = 0.3 + drink_icon = "screwdriverglass" + drink_name = "Screwdriver" + drink_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer." /datum/reagent/ethanol/booger name = "Booger" @@ -292,6 +376,9 @@ reagent_state = LIQUID color = "#A68310" // rgb: 166, 131, 16 alcohol_perc = 0.2 + drink_icon = "booger" + drink_name = "Booger" + drink_desc = "Ewww..." /datum/reagent/ethanol/bloody_mary name = "Bloody Mary" @@ -300,6 +387,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "bloodymaryglass" + drink_name = "Bloody Mary" + drink_desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder." /datum/reagent/ethanol/gargle_blaster name = "Pan-Galactic Gargle Blaster" @@ -308,6 +398,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.7 //ouch + drink_icon = "gargleblasterglass" + drink_name = "Pan-Galactic Gargle Blaster" + drink_desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy." /datum/reagent/ethanol/brave_bull name = "Brave Bull" @@ -316,6 +409,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.3 + drink_icon = "bravebullglass" + drink_name = "Brave Bull" + drink_desc = "Tequila and Coffee liquor, brought together in a mouthwatering mixture. Drink up." /datum/reagent/ethanol/tequila_sunrise name = "Tequila Sunrise" @@ -324,6 +420,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.3 + drink_icon = "tequilasunriseglass" + drink_name = "Tequila Sunrise" + drink_desc = "Oh great, now you feel nostalgic about sunrises back on Terra..." /datum/reagent/ethanol/toxins_special name = "Toxins Special" @@ -332,6 +431,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.5 + drink_icon = "toxinsspecialglass" + drink_name = "Toxins Special" + drink_desc = "Whoah, this thing is on FIRE" /datum/reagent/ethanol/toxins_special/on_mob_life(mob/living/M) if(M.bodytemperature < 330) @@ -345,6 +447,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.5 + drink_icon = "beepskysmashglass" + drink_name = "Beepsky Smash" + drink_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." /datum/reagent/ethanol/beepsky_smash/on_mob_life(mob/living/M) M.Stun(1) @@ -357,6 +462,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.3 + drink_icon = "irishcreamglass" + drink_name = "Irish Cream" + drink_desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?" /datum/reagent/ethanol/manly_dorf name = "The Manly Dorf" @@ -365,6 +473,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "manlydorfglass" + drink_name = "The Manly Dorf" + drink_desc = "A manly concotion made from Ale and Beer. Intended for true men only." /datum/reagent/ethanol/longislandicedtea name = "Long Island Iced Tea" @@ -373,6 +484,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.5 + drink_icon = "longislandicedteaglass" + drink_name = "Long Island Iced Tea" + drink_desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." /datum/reagent/ethanol/moonshine name = "Moonshine" @@ -381,6 +495,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.8 //yeeehaw + drink_icon = "glass_clear" + drink_name = "Moonshine" + drink_desc = "You've really hit rock bottom now... your liver packed its bags and left last night." /datum/reagent/ethanol/b52 name = "B-52" @@ -389,6 +506,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.3 + drink_icon = "b52glass" + drink_name = "B-52" + drink_desc = "Kahlua, Irish Cream, and congac. You will get bombed." /datum/reagent/ethanol/irishcoffee name = "Irish Coffee" @@ -397,6 +517,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "irishcoffeeglass" + drink_name = "Irish Coffee" + drink_desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning." /datum/reagent/ethanol/margarita name = "Margarita" @@ -405,6 +528,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.3 + drink_icon = "margaritaglass" + drink_name = "Margarita" + drink_desc = "On the rocks with salt on the rim. Arriba~!" /datum/reagent/ethanol/black_russian name = "Black Russian" @@ -413,6 +539,9 @@ reagent_state = LIQUID color = "#360000" // rgb: 54, 0, 0 alcohol_perc = 0.4 + drink_icon = "blackrussianglass" + drink_name = "Black Russian" + drink_desc = "For the lactose-intolerant. Still as classy as a White Russian." /datum/reagent/ethanol/manhattan name = "Manhattan" @@ -421,6 +550,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.4 + drink_icon = "manhattanglass" + drink_name = "Manhattan" + drink_desc = "The Detective's undercover drink of choice. He never could stomach gin..." /datum/reagent/ethanol/manhattan_proj name = "Manhattan Project" @@ -429,6 +561,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.4 + drink_icon = "proj_manhattanglass" + drink_name = "Manhattan Project" + drink_desc = "A scienitst drink of choice, for thinking how to blow up the station." /datum/reagent/ethanol/whiskeysoda name = "Whiskey Soda" @@ -437,6 +572,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.3 + drink_icon = "whiskeysodaglass2" + drink_name = "Whiskey Soda" + drink_desc = "Ultimate refreshment." /datum/reagent/ethanol/antifreeze name = "Anti-freeze" @@ -445,6 +583,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "antifreeze" + drink_name = "Anti-freeze" + drink_desc = "The ultimate refreshment." /datum/reagent/ethanol/antifreeze/on_mob_life(mob/living/M) if(M.bodytemperature < 330) @@ -458,6 +599,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "b&p" + drink_name = "Barefoot" + drink_desc = "Barefoot and pregnant" /datum/reagent/ethanol/snowwhite name = "Snow White" @@ -466,6 +610,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "snowwhite" + drink_name = "Snow White" + drink_desc = "A cold refreshment." /datum/reagent/ethanol/demonsblood name = "Demons Blood" @@ -475,6 +622,9 @@ color = "#664300" // rgb: 102, 67, 0 dizzy_adj = 10 alcohol_perc = 0.4 + drink_icon = "demonsblood" + drink_name = "Demons Blood" + drink_desc = "Just looking at this thing makes the hair at the back of your neck stand up." /datum/reagent/ethanol/vodkatonic name = "Vodka and Tonic" @@ -484,6 +634,9 @@ color = "#664300" // rgb: 102, 67, 0 dizzy_adj = 4 alcohol_perc = 0.3 + drink_icon = "vodkatonicglass" + drink_name = "Vodka and Tonic" + drink_desc = "For when a gin and tonic isn't russian enough." /datum/reagent/ethanol/ginfizz name = "Gin Fizz" @@ -493,6 +646,9 @@ color = "#664300" // rgb: 102, 67, 0 dizzy_adj = 4 alcohol_perc = 0.4 + drink_icon = "ginfizzglass" + drink_name = "Gin Fizz" + drink_desc = "Refreshingly lemony, deliciously dry." /datum/reagent/ethanol/bahama_mama name = "Bahama mama" @@ -501,6 +657,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "bahama_mama" + drink_name = "Bahama Mama" + drink_desc = "Tropic cocktail" /datum/reagent/ethanol/singulo name = "Singulo" @@ -510,6 +669,9 @@ color = "#2E6671" // rgb: 46, 102, 113 dizzy_adj = 15 alcohol_perc = 0.7 + drink_icon = "singulo" + drink_name = "Singulo" + drink_desc = "A blue-space beverage." /datum/reagent/ethanol/sbiten name = "Sbiten" @@ -518,6 +680,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.4 + drink_icon = "sbitenglass" + drink_name = "Sbiten" + drink_desc = "A spicy mix of Vodka and Spice. Very hot." /datum/reagent/ethanol/sbiten/on_mob_life(mob/living/M) if(M.bodytemperature < 360) @@ -531,6 +696,9 @@ reagent_state = LIQUID color = "#A68310" // rgb: 166, 131, 16 alcohol_perc = 0.3 + drink_icon = "devilskiss" + drink_name = "Devils Kiss" + drink_desc = "Creepy time!" /datum/reagent/ethanol/red_mead name = "Red Mead" @@ -539,6 +707,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "red_meadglass" + drink_name = "Red Mead" + drink_desc = "A True Vikings Beverage, though its color is strange." /datum/reagent/ethanol/mead name = "Mead" @@ -547,6 +718,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "meadglass" + drink_name = "Mead" + drink_desc = "A Vikings Beverage, though a cheap one." /datum/reagent/ethanol/iced_beer name = "Iced Beer" @@ -555,6 +729,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "iced_beerglass" + drink_name = "Iced Beer" + drink_desc = "A beer so frosty, the air around it freezes." /datum/reagent/ethanol/iced_beer/on_mob_life(mob/living/M) if(M.bodytemperature > 270) @@ -568,6 +745,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "grogglass" + drink_name = "Grog" + drink_desc = "A fine and cepa drink for Space." /datum/reagent/ethanol/aloe name = "Aloe" @@ -576,6 +756,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "aloe" + drink_name = "Aloe" + drink_desc = "Very, very, very good." /datum/reagent/ethanol/andalusia name = "Andalusia" @@ -584,6 +767,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.4 + drink_icon = "andalusia" + drink_name = "Andalusia" + drink_desc = "A nice, strange named drink." /datum/reagent/ethanol/alliescocktail name = "Allies Cocktail" @@ -592,6 +778,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.5 + drink_icon = "alliescocktail" + drink_name = "Allies cocktail" + drink_desc = "A drink made from your allies." /datum/reagent/ethanol/acid_spit name = "Acid Spit" @@ -600,6 +789,9 @@ reagent_state = LIQUID color = "#365000" // rgb: 54, 80, 0 alcohol_perc = 0.3 + drink_icon = "acidspitglass" + drink_name = "Acid Spit" + drink_desc = "A drink from Nanotrasen. Made from live aliens." /datum/reagent/ethanol/amasec name = "Amasec" @@ -608,6 +800,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.3 + drink_icon = "amasecglass" + drink_name = "Amasec" + drink_desc = "Always handy before COMBAT!!!" /datum/reagent/ethanol/neurotoxin name = "Neuro-toxin" @@ -618,6 +813,9 @@ dizzy_adj = 6 alcohol_perc = 0.7 heart_rate_decrease = 1 + drink_icon = "neurotoxinglass" + drink_name = "Neurotoxin" + drink_desc = "A drink that is guaranteed to knock you silly." /datum/reagent/ethanol/neurotoxin/on_mob_life(mob/living/M) M.weakened = max(M.weakened, 3) @@ -635,6 +833,9 @@ color = "#2E6671" // rgb: 46, 102, 113 alcohol_perc = 0.7 dizzy_adj = 5 + drink_icon = "changelingsting" + drink_name = "Changeling Sting" + drink_desc = "A stingy drink." /datum/reagent/ethanol/irishcarbomb name = "Irish Car Bomb" @@ -644,6 +845,9 @@ color = "#2E6671" // rgb: 46, 102, 113 alcohol_perc = 0.3 dizzy_adj = 5 + drink_icon = "irishcarbomb" + drink_name = "Irish Car Bomb" + drink_desc = "An irish car bomb." /datum/reagent/ethanol/syndicatebomb name = "Syndicate Bomb" @@ -652,6 +856,9 @@ reagent_state = LIQUID color = "#2E6671" // rgb: 46, 102, 113 alcohol_perc = 0.2 + drink_icon = "syndicatebomb" + drink_name = "Syndicate Bomb" + drink_desc = "A syndicate bomb." /datum/reagent/ethanol/erikasurprise name = "Erika Surprise" @@ -660,6 +867,9 @@ reagent_state = LIQUID color = "#2E6671" // rgb: 46, 102, 113 alcohol_perc = 0.2 + drink_icon = "erikasurprise" + name = "Erika Surprise" + drink_desc = "The surprise is, it's green!" /datum/reagent/ethanol/driestmartini name = "Driest Martini" @@ -669,6 +879,9 @@ color = "#2E6671" // rgb: 46, 102, 113 alcohol_perc = 0.5 dizzy_adj = 10 + drink_icon = "driestmartiniglass" + drink_name = "Driest Martini" + drink_desc = "Only for the experienced. You think you see sand floating in the glass." /datum/reagent/ethanol/driestmartini/on_mob_life(mob/living/M) if(current_cycle >= 55 && current_cycle < 115) @@ -681,6 +894,9 @@ description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!" color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 + drink_icon = "kahluaglass" + drink_name = "Glass of RR coffee Liquor" + drink_desc = "DAMN, THIS THING LOOKS ROBUST" /datum/reagent/ethanol/kahlua/on_mob_life(mob/living/M) M.AdjustDizzy(-5) @@ -688,3 +904,187 @@ M.AdjustSleeping(-2) M.Jitter(5) ..() + +/datum/reagent/ginsonic + name = "Gin and sonic" + id = "ginsonic" + description = "GOTTA GET CRUNK FAST BUT LIQUOR TOO SLOW" + reagent_state = LIQUID + color = "#1111CF" + drink_icon = "ginsonic" + drink_name = "Gin and Sonic" + drink_desc = "An extremely high amperage drink. Absolutely not for the true Englishman." + +/datum/reagent/ginsonic/on_mob_life(mob/living/M) + M.AdjustDrowsy(-5) + if(prob(25)) + M.AdjustParalysis(-1) + M.AdjustStunned(-1) + M.AdjustWeakened(-1) + if(prob(8)) + M.reagents.add_reagent("methamphetamine",1.2) + var/sonic_message = pick("Gotta go fast!", "Time to speed, keed!", "I feel a need for speed!", "Let's juice.", "Juice time.", "Way Past Cool!") + if(prob(50)) + M.say("[sonic_message]") + else + to_chat(M, "[sonic_message ]") + ..() + +/datum/reagent/ethanol/applejack + name = "Applejack" + id = "applejack" + description = "A highly concentrated alcoholic beverage made by repeatedly freezing cider and removing the ice." + color = "#997A00" + alcohol_perc = 0.4 + drink_icon = "cognacglass" + drink_name = "Glass of applejack" + drink_desc = "When cider isn't strong enough, you gotta jack it." + +/datum/reagent/ethanol/jackrose + name = "Jack Rose" + id = "jackrose" + description = "A classic cocktail that had fallen out of fashion, but never out of taste," + color = "#664300" + alcohol_perc = 0.4 + drink_icon = "patronglass" + drink_name = "Jack Rose" + drink_desc = "Drinking this makes you feel like you belong in a luxury hotel bar during the 1920s." + +/datum/reagent/ethanol/dragons_breath //inaccessible to players, but here for admin shennanigans + name = "Dragon's Breath" + id = "dragonsbreath" + description = "Possessing this stuff probably breaks the Geneva convention." + reagent_state = LIQUID + color = "#DC0000" + alcohol_perc = 1 + +/datum/reagent/ethanol/dragons_breath/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == INGEST && prob(20)) + if(M.on_fire) + M.adjust_fire_stacks(3) + +/datum/reagent/ethanol/dragons_breath/on_mob_life(mob/living/M) + if(M.reagents.has_reagent("milk")) + to_chat(M, "The milk stops the burning. Ahhh.") + M.reagents.del_reagent("milk") + M.reagents.del_reagent("dragonsbreath") + return + if(prob(8)) + to_chat(M, "Oh god! Oh GODD!!") + if(prob(50)) + to_chat(M, "Your throat burns terribly!") + M.emote(pick("scream","cry","choke","gasp")) + M.Stun(1) + if(prob(8)) + to_chat(M, "Why!? WHY!?") + if(prob(8)) + to_chat(M, "ARGHHHH!") + if(prob(2 * volume)) + to_chat(M, "OH GOD OH GOD PLEASE NO!!
") + if(M.on_fire) + M.adjust_fire_stacks(5) + if(prob(50)) + to_chat(M, "IT BURNS!!!!") + M.visible_message("[M] is consumed in flames!") + M.dust() + return + ..() + +// ROBOT ALCOHOL PAST THIS POINT +// WOOO! + + +/datum/reagent/ethanol/synthanol + name = "Synthanol" + id = "synthanol" + description = "A runny liquid with conductive capacities. Its effects on synthetics are similar to those of alcohol on organics." + reagent_state = LIQUID + color = "#1BB1FF" + process_flags = ORGANIC | SYNTHETIC + metabolization_rate = 0.4 + alcohol_perc = 0.5 + drink_icon = "synthanolglass" + drink_name = "Glass of Synthanol" + drink_desc = "The equivalent of alcohol for synthetic crewmembers. They'd find it awful if they had tastebuds too." + +/datum/reagent/ethanol/synthanol/on_mob_life(mob/living/M) + if(!M.isSynthetic()) + holder.remove_reagent(id, 3.6) //gets removed from organics very fast + if(prob(25)) + holder.remove_reagent(id, 15) + M.fakevomit() + ..() + +/datum/reagent/ethanol/synthanol/reaction_mob(mob/living/M, method=TOUCH, volume) + if(M.isSynthetic()) + return + if(method == INGEST) + to_chat(M, pick("That was awful!", "Yuck!")) + +/datum/reagent/ethanol/synthanol/robottears + name = "Robot Tears" + id = "robottears" + description = "An oily substance that an IPC could technically consider a 'drink'." + reagent_state = LIQUID + color = "#363636" + alcohol_perc = 0.25 + drink_icon = "robottearsglass" + drink_name = "Glass of Robot Tears" + drink_desc = "No robots were hurt in the making of this drink." + +/datum/reagent/ethanol/synthanol/trinary + name = "Trinary" + id = "trinary" + description = "A fruit drink meant only for synthetics, however that works." + reagent_state = LIQUID + color = "#adb21f" + alcohol_perc = 0.2 + drink_icon = "trinaryglass" + drink_name = "Glass of Trinary" + drink_desc = "Colorful drink made for synthetic crewmembers. It doesn't seem like it would taste well." + +/datum/reagent/ethanol/synthanol/servo + name = "Servo" + id = "servo" + description = "A drink containing some organic ingredients, but meant only for synthetics." + reagent_state = LIQUID + color = "#5b3210" + alcohol_perc = 0.25 + drink_icon = "servoglass" + drink_name = "Glass of Servo" + drink_desc = "Chocolate - based drink made for IPCs. Not sure if anyone's actually tried out the recipe." + +/datum/reagent/ethanol/synthanol/uplink + name = "Uplink" + id = "uplink" + description = "A potent mix of alcohol and synthanol. Will only work on synthetics." + reagent_state = LIQUID + color = "#e7ae04" + alcohol_perc = 0.15 + drink_icon = "uplinkglass" + drink_name = "Glass of Uplink" + drink_desc = "An exquisite mix of the finest liquoirs and synthanol. Meant only for synthetics." + +/datum/reagent/ethanol/synthanol/synthnsoda + name = "Synth 'n Soda" + id = "synthnsoda" + description = "The classic drink adjusted for a robot's tastes." + reagent_state = LIQUID + color = "#7204e7" + alcohol_perc = 0.25 + drink_icon = "synthnsodaglass" + drink_name = "Glass of Synth 'n Soda" + drink_desc = "Classic drink altered to fit the tastes of a robot. Bad idea to drink if you're made of carbon." + +/datum/reagent/ethanol/synthanol/synthignon + name = "Synthignon" + id = "synthignon" + description = "Someone mixed wine and alcohol for robots. Hope you're proud of yourself." + reagent_state = LIQUID + color = "#d004e7" + alcohol_perc = 0.25 + drink_icon = "synthignonglass" + drink_name = "Glass of Synthignon" + drink_desc = "Someone mixed good wine and robot booze. Romantic, but atrocious." + +// ROBOT ALCOHOL ENDS \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/drink_cold.dm b/code/modules/reagents/chemistry/reagents/drink_cold.dm index 3e3c2670608..31d75049590 100644 --- a/code/modules/reagents/chemistry/reagents/drink_cold.dm +++ b/code/modules/reagents/chemistry/reagents/drink_cold.dm @@ -10,6 +10,9 @@ adj_dizzy = -5 adj_drowsy = -3 adj_sleepy = -2 + drink_icon = "glass_clear" + drink_name = "Glass of Tonic Water" + drink_desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." /datum/reagent/drink/cold/sodawater name = "Soda Water" @@ -18,6 +21,9 @@ color = "#619494" // rgb: 97, 148, 148 adj_dizzy = -5 adj_drowsy = -3 + drink_icon = "glass_clear" + drink_name = "Glass of Soda Water" + drink_desc = "Soda water. Why not make a scotch and soda?" /datum/reagent/drink/cold/ice name = "Ice" @@ -26,6 +32,9 @@ reagent_state = SOLID color = "#619494" // rgb: 97, 148, 148 adj_temp_cool = 0 + drink_icon = "iceglass" + drink_name = "Glass of ice" + drink_desc = "Generally, you're supposed to put something else in there too..." /datum/reagent/drink/cold/ice/on_mob_life(mob/living/M) M.bodytemperature = max(M.bodytemperature - 5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0) @@ -38,6 +47,9 @@ reagent_state = LIQUID color = "#100800" // rgb: 16, 8, 0 adj_drowsy = -5 + drink_icon = "glass_brown" + drink_name = "Glass of Space Cola" + drink_desc = "A glass of refreshing Space Cola" /datum/reagent/drink/cold/nuka_cola name = "Nuka Cola" @@ -45,6 +57,9 @@ description = "Cola, cola never changes." color = "#100800" // rgb: 16, 8, 0 adj_sleepy = -2 + drink_icon = "nuka_colaglass" + drink_name = "Nuka Cola" + drink_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland" /datum/reagent/drink/cold/nuka_cola/on_mob_life(mob/living/M) M.Jitter(20) @@ -65,6 +80,9 @@ color = "#102000" // rgb: 16, 32, 0 adj_drowsy = -7 adj_sleepy = -1 + drink_icon = "Space_mountain_wind_glass" + drink_name = "Glass of Space Mountain Wind" + drink_desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind." /datum/reagent/drink/cold/dr_gibb name = "Dr. Gibb" @@ -72,6 +90,9 @@ description = "A delicious blend of 42 different flavours" color = "#102000" // rgb: 16, 32, 0 adj_drowsy = -6 + drink_icon = "dr_gibb_glass" + drink_name = "Glass of Dr. Gibb" + drink_desc = "Dr. Gibb. Not as dangerous as the name might imply." /datum/reagent/drink/cold/space_up name = "Space-Up" @@ -79,6 +100,9 @@ description = "Tastes like a hull breach in your mouth." color = "#202800" // rgb: 32, 40, 0 adj_temp_cool = 8 + drink_icon = "space-up_glass" + drink_name = "Glass of Space-up" + drink_desc = "Space-up. It helps keep your cool." /datum/reagent/drink/cold/lemon_lime name = "Lemon Lime" @@ -92,12 +116,18 @@ description = "Oh the nostalgia..." id = "lemonade" color = "#FFFF00" // rgb: 255, 255, 0 + drink_icon = "lemonade" + drink_name = "Lemonade" + drink_desc = "Oh the nostalgia..." /datum/reagent/drink/cold/kiraspecial name = "Kira Special" description = "Long live the guy who everyone had mistaken for a girl. Baka!" id = "kiraspecial" color = "#CCCC99" // rgb: 204, 204, 153 + drink_icon = "kiraspecial" + drink_name = "Kira Special" + drink_desc = "Long live the guy who everyone had mistaken for a girl. Baka!" /datum/reagent/drink/cold/brownstar name = "Brown Star" @@ -105,6 +135,9 @@ id = "brownstar" color = "#9F3400" // rgb: 159, 052, 000 adj_temp_cool = 2 + drink_icon = "brownstar" + drink_name = "Brown Star" + drink_desc = "Its not what it sounds like..." /datum/reagent/drink/cold/milkshake name = "Milkshake" @@ -112,12 +145,18 @@ id = "milkshake" color = "#AEE5E4" // rgb" 174, 229, 228 adj_temp_cool = 9 + drink_icon = "milkshake" + drink_name = "Milkshake" + drink_desc = "Glorious brainfreezing mixture." /datum/reagent/drink/cold/rewriter name = "Rewriter" description = "The secert of the sanctuary of the Libarian..." id = "rewriter" color = "#485000" // rgb:72, 080, 0 + drink_icon = "rewriter" + drink_name = "Rewriter" + drink_desc = "The secert of the sanctuary of the Libarian..." /datum/reagent/drink/cold/rewriter/on_mob_life(mob/living/M) M.Jitter(5) diff --git a/code/modules/reagents/chemistry/reagents/drinks.dm b/code/modules/reagents/chemistry/reagents/drinks.dm index b415d0f8d08..043f342cf0e 100644 --- a/code/modules/reagents/chemistry/reagents/drinks.dm +++ b/code/modules/reagents/chemistry/reagents/drinks.dm @@ -3,6 +3,9 @@ id = "orangejuice" description = "Both delicious AND rich in Vitamin C, what more do you need?" color = "#E78108" // rgb: 231, 129, 8 + drink_icon = "glass_orange" + drink_name = "Glass of Orange juice" + drink_desc = "Vitamins! Yay!" /datum/reagent/drink/orangejuicde/on_mob_life(mob/living/M) if(M.getOxyLoss() && prob(30)) @@ -14,6 +17,9 @@ id = "tomatojuice" description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?" color = "#731008" // rgb: 115, 16, 8 + drink_icon = "glass_red" + drink_name = "Glass of Tomato juice" + drink_desc = "Are you sure this is tomato juice?" /datum/reagent/drink/tomatojuice/on_mob_life(mob/living/M) if(M.getFireLoss() && prob(20)) @@ -25,6 +31,9 @@ id = "limejuice" description = "The sweet-sour juice of limes." color = "#365E30" // rgb: 54, 94, 48 + drink_icon = "glass_green" + drink_name = "Glass of Lime juice" + drink_desc = "A glass of sweet-sour lime juice." /datum/reagent/drink/limejuice/on_mob_life(mob/living/M) if(M.getToxLoss() && prob(20)) @@ -36,6 +45,9 @@ id = "carrotjuice" description = "It is just like a carrot but without crunching." color = "#973800" // rgb: 151, 56, 0 + drink_icon = "carrotjuice" + drink_name = "Glass of carrot juice" + drink_desc = "It is just like a carrot but without crunching." /datum/reagent/drink/carrotjuicde/on_mob_life(mob/living/M) M.AdjustEyeBlurry(-1) @@ -54,6 +66,9 @@ description = "A gulp a day keeps the MediBot away. That's probably for the best." reagent_state = LIQUID color = "#FF8CFF" // rgb: 255, 140, 255 + drink_icon = "doctorsdelightglass" + drink_name = "Doctor's Delight" + drink_desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place." /datum/reagent/drink/doctors_delight/on_mob_life(mob/living/M) if(M.getToxLoss() && prob(20)) @@ -65,12 +80,18 @@ id = "berryjuice" description = "A delicious blend of several different kinds of berries." color = "#863333" // rgb: 134, 51, 51 + drink_icon = "berryjuice" + drink_name = "Glass of berry juice" + drink_desc = "Berry juice. Or maybe its jam. Who cares?" /datum/reagent/drink/poisonberryjuice name = "Poison Berry Juice" id = "poisonberryjuice" description = "A tasty juice blended from various kinds of very deadly and toxic berries." color = "#863353" // rgb: 134, 51, 83 + drink_icon = "poisonberryjuice" + drink_name = "Glass of poison berry juice" + drink_desc = "A glass of deadly juice." /datum/reagent/drink/poisonberryjuice/on_mob_life(mob/living/M) M.adjustToxLoss(1) @@ -87,6 +108,9 @@ id = "lemonjuice" description = "This juice is VERY sour." color = "#863333" // rgb: 175, 175, 0 + drink_icon = "lemonglass" + drink_name = "Glass of lemonjuice" + drink_desc = "Sour..." /datum/reagent/drink/grapejuice name = "Grape Juice" @@ -99,6 +123,9 @@ id = "banana" description = "The raw essence of a banana." color = "#863333" // rgb: 175, 175, 0 + drink_icon = "banana" + drink_name = "Glass of banana juice" + drink_desc = "The raw essence of a banana. HONK" /datum/reagent/drink/banana/on_mob_life(mob/living/M) M.nutrition += nutriment_factor @@ -111,6 +138,9 @@ name = "Nothing" id = "nothing" description = "Absolutely nothing." + drink_icon = "nothing" + drink_name = "Nothing" + drink_desc = "Absolutely nothing." /datum/reagent/drink/nothing/on_mob_life(mob/living/M) M.nutrition += nutriment_factor @@ -125,12 +155,18 @@ description = "Juice of the potato. Bleh." nutriment_factor = 2 * FOOD_METABOLISM color = "#302000" // rgb: 48, 32, 0 + drink_icon = "glass_brown" + drink_name = "Glass of potato juice" + drink_desc = "Who in the hell requests this? Gross!" /datum/reagent/drink/milk name = "Milk" id = "milk" description = "An opaque white liquid produced by the mammary glands of mammals." color = "#DFDFDF" // rgb: 223, 223, 223 + drink_icon = "glass_white" + drink_name = "Glass of milk" + drink_desc = "White and nutritious goodness!" /datum/reagent/drink/milk/on_mob_life(mob/living/M) if(M.getBruteLoss() && prob(20)) @@ -144,12 +180,16 @@ id = "soymilk" description = "An opaque white liquid made from soybeans." color = "#DFDFC7" // rgb: 223, 223, 199 + drink_name = "Glass of soy milk" + drink_desc = "White and nutritious soy goodness!" /datum/reagent/drink/milk/cream name = "Cream" id = "cream" description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?" color = "#DFD7AF" // rgb: 223, 215, 175 + drink_name = "Glass of cream" + drink_desc = "Ewwww..." /datum/reagent/drink/milk/chocolate_milk name = "Chocolate milk" @@ -164,6 +204,9 @@ nutriment_factor = 2 * FOOD_METABOLISM color = "#403010" // rgb: 64, 48, 16 adj_temp_hot = 5 + drink_icon = "hot_coco" + drink_name = "Glass of hot coco" + drink_desc = "Delicious and cozy" /datum/reagent/drink/coffee name = "Coffee" @@ -177,6 +220,9 @@ overdose_threshold = 45 addiction_chance = 1 // It's true. heart_rate_increase = 1 + drink_icon = "glass_brown" + drink_name = "Glass of coffee" + drink_desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere." /datum/reagent/drink/coffee/on_mob_life(mob/living/M) if(holder.has_reagent("frostoil")) @@ -198,6 +244,9 @@ color = "#102838" // rgb: 16, 40, 56 adj_temp_hot = 0 adj_temp_cool = 5 + drink_icon = "icedcoffeeglass" + drink_name = "Iced Coffee" + drink_desc = "A drink to perk you up and refresh you!" /datum/reagent/drink/coffee/soy_latte name = "Soy Latte" @@ -206,6 +255,9 @@ color = "#664300" // rgb: 102, 67, 0 adj_sleepy = 0 adj_temp_hot = 5 + drink_icon = "soy_latte" + drink_name = "Soy Latte" + drink_desc = "A nice and refrshing beverage while you are reading." /datum/reagent/drink/coffee/soy_latte/on_mob_life(mob/living/M) ..() @@ -220,6 +272,9 @@ color = "#664300" // rgb: 102, 67, 0 adj_sleepy = 0 adj_temp_hot = 5 + drink_icon = "cafe_latte" + drink_name = "Cafe Latte" + drink_desc = "A nice, strong and refreshing beverage while you are reading." /datum/reagent/drink/coffee/cafe_latte/on_mob_life(mob/living/M) ..() @@ -232,6 +287,8 @@ id = "cafe_mocha" description = "The perfect blend of coffe, milk, and chocolate." color = "#673629" + drink_name = "Cafe Mocha" + drink_desc = "The perfect blend of coffe, milk, and chocolate." /datum/reagent/drink/tea name = "Tea" @@ -242,6 +299,9 @@ adj_drowsy = -1 adj_sleepy = -3 adj_temp_hot = 20 + drink_icon = "glass_brown" + drink_name = "Glass of Tea" + drink_desc = "A glass of hot tea. Perhaps a cup with a handle would have been smarter?" /datum/reagent/drink/tea/on_mob_life(mob/living/M) if(M.getToxLoss() && prob(20)) @@ -255,6 +315,9 @@ color = "#104038" // rgb: 16, 64, 56 adj_temp_hot = 0 adj_temp_cool = 5 + drink_icon = "icetea" + drink_name = "Iced Tea" + drink_desc = "No relation to a certain rap artist/ actor." /datum/reagent/drink/bananahonk name = "Banana Mama" @@ -262,6 +325,9 @@ description = "A drink from Clown Heaven." nutriment_factor = 1 * FOOD_METABOLISM color = "#664300" // rgb: 102, 67, 0 + drink_icon = "bananahonkglass" + drink_name = "Banana Honk" + drink_desc = "A drink from Banana Heaven." /datum/reagent/drink/bananahonk/on_mob_life(mob/living/M) M.nutrition += nutriment_factor @@ -276,157 +342,13 @@ description = "A drink from Mime Heaven." nutriment_factor = 1 * FOOD_METABOLISM color = "#664300" // rgb: 102, 67, 0 + drink_icon = "silencerglass" + drink_name = "Silencer" + drink_desc = "A drink from mime Heaven." /datum/reagent/drink/silencer/on_mob_life(mob/living/M) M.nutrition += nutriment_factor if(ishuman(M) && M.job in list("Mime")) M.adjustBruteLoss(-1) M.adjustFireLoss(-1) - ..() - -/datum/reagent/ginsonic/on_mob_life(mob/living/M) - M.AdjustDrowsy(-5) - if(prob(25)) - M.AdjustParalysis(-1) - M.AdjustStunned(-1) - M.AdjustWeakened(-1) - if(prob(8)) - M.reagents.add_reagent("methamphetamine",1.2) - var/sonic_message = pick("Gotta go fast!", "Time to speed, keed!", "I feel a need for speed!", "Let's juice.", "Juice time.", "Way Past Cool!") - if(prob(50)) - M.say("[sonic_message]") - else - to_chat(M, "[sonic_message ]") - ..() - -/datum/reagent/ethanol/applejack - name = "Applejack" - id = "applejack" - description = "A highly concentrated alcoholic beverage made by repeatedly freezing cider and removing the ice." - color = "#997A00" - alcohol_perc = 0.4 - -/datum/reagent/ethanol/jackrose - name = "Jack Rose" - id = "jackrose" - description = "A classic cocktail that had fallen out of fashion, but never out of taste," - color = "#664300" - alcohol_perc = 0.4 - -/datum/reagent/ethanol/dragons_breath //inaccessible to players, but here for admin shennanigans - name = "Dragon's Breath" - id = "dragonsbreath" - description = "Possessing this stuff probably breaks the Geneva convention." - reagent_state = LIQUID - color = "#DC0000" - alcohol_perc = 1 - -/datum/reagent/ethanol/dragons_breath/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == INGEST && prob(20)) - if(M.on_fire) - M.adjust_fire_stacks(3) - -/datum/reagent/ethanol/dragons_breath/on_mob_life(mob/living/M) - if(M.reagents.has_reagent("milk")) - to_chat(M, "The milk stops the burning. Ahhh.") - M.reagents.del_reagent("milk") - M.reagents.del_reagent("dragonsbreath") - return - if(prob(8)) - to_chat(M, "Oh god! Oh GODD!!") - if(prob(50)) - to_chat(M, "Your throat burns terribly!") - M.emote(pick("scream","cry","choke","gasp")) - M.Stun(1) - if(prob(8)) - to_chat(M, "Why!? WHY!?") - if(prob(8)) - to_chat(M, "ARGHHHH!") - if(prob(2 * volume)) - to_chat(M, "OH GOD OH GOD PLEASE NO!!
") - if(M.on_fire) - M.adjust_fire_stacks(5) - if(prob(50)) - to_chat(M, "IT BURNS!!!!") - M.visible_message("[M] is consumed in flames!") - M.dust() - return - ..() - -// ROBOT ALCOHOL PAST THIS POINT -// WOOO! - - -/datum/reagent/ethanol/synthanol - name = "Synthanol" - id = "synthanol" - description = "A runny liquid with conductive capacities. Its effects on synthetics are similar to those of alcohol on organics." - reagent_state = LIQUID - color = "#1BB1FF" - process_flags = ORGANIC | SYNTHETIC - metabolization_rate = 0.4 - alcohol_perc = 0.5 - -/datum/reagent/ethanol/synthanol/on_mob_life(mob/living/M) - if(!M.isSynthetic()) - holder.remove_reagent(id, 3.6) //gets removed from organics very fast - if(prob(25)) - holder.remove_reagent(id, 15) - M.fakevomit() - ..() - -/datum/reagent/ethanol/synthanol/reaction_mob(mob/living/M, method=TOUCH, volume) - if(M.isSynthetic()) - return - if(method == INGEST) - to_chat(M, pick("That was awful!", "Yuck!")) - -/datum/reagent/ethanol/synthanol/robottears - name = "Robot Tears" - id = "robottears" - description = "An oily substance that an IPC could technically consider a 'drink'." - reagent_state = LIQUID - color = "#363636" - alcohol_perc = 0.25 - -/datum/reagent/ethanol/synthanol/trinary - name = "Trinary" - id = "trinary" - description = "A fruit drink meant only for synthetics, however that works." - reagent_state = LIQUID - color = "#adb21f" - alcohol_perc = 0.2 - -/datum/reagent/ethanol/synthanol/servo - name = "Servo" - id = "servo" - description = "A drink containing some organic ingredients, but meant only for synthetics." - reagent_state = LIQUID - color = "#5b3210" - alcohol_perc = 0.25 - -/datum/reagent/ethanol/synthanol/uplink - name = "Uplink" - id = "uplink" - description = "A potent mix of alcohol and synthanol. Will only work on synthetics." - reagent_state = LIQUID - color = "#e7ae04" - alcohol_perc = 0.15 - -/datum/reagent/ethanol/synthanol/synthnsoda - name = "Synth 'n Soda" - id = "synthnsoda" - description = "The classic drink adjusted for a robot's tastes." - reagent_state = LIQUID - color = "#7204e7" - alcohol_perc = 0.25 - -/datum/reagent/ethanol/synthanol/synthignon - name = "Synthignon" - id = "synthignon" - description = "Someone mixed wine and alcohol for robots. Hope you're proud of yourself." - reagent_state = LIQUID - color = "#d004e7" - alcohol_perc = 0.25 - -// ROBOT ALCOHOL ENDS \ No newline at end of file + ..() \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index f70360baf28..d4986f92acd 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -35,6 +35,9 @@ reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 metabolization_rate = 0.2 * REAGENTS_METABOLISM + drink_icon = "hippiesdelightglass" + drink_name = "Hippie's Delight" + drink_desc = "A drink enjoyed by people during the 1960's." /datum/reagent/hippies_delight/on_mob_life(mob/living/M) M.Druggy(50) diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm index 83e0cbb031e..69864d487a6 100644 --- a/code/modules/reagents/chemistry/reagents/food.dm +++ b/code/modules/reagents/chemistry/reagents/food.dm @@ -427,6 +427,9 @@ description = "A refreshing mixed drink of orange, lemon and lime juice." reagent_state = LIQUID color = "#23A046" + drink_icon = "triplecitrus" + drink_name = "Glass of Triplecitrus Juice" + drink_desc = "As colorful and healthy as it is delicious." /datum/reagent/triple_citrus/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == INGEST) @@ -481,6 +484,9 @@ reagent_state = LIQUID nutriment_factor = 5 * REAGENTS_METABOLISM //same as pure cocoa powder, because it makes no sense that chocolate won't fill you up and make you fat color = "#2E2418" + drink_icon = "chocolateglass" + drink_name = "Glass of chocolate" + drink_desc = "Tasty" /datum/reagent/chocolate/on_mob_life(mob/living/M) M.nutrition += nutriment_factor diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm index 73b20340962..f30fec71f25 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm @@ -4,6 +4,9 @@ description = "A highly flammable blend of basic hydrocarbons, mostly Acetylene. Useful for both welding and organic chemistry, and can be fortified into a heavier oil." reagent_state = LIQUID color = "#060606" + drink_icon = "dr_gibb_glass" + drink_name = "Glass of welder fuel" + drink_desc = "Unless you are an industrial tool, this is probably not safe for consumption." /datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with welding fuel to make them easy to ignite! if(method == TOUCH) diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index b4510044594..bc4bf1adc92 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -335,6 +335,9 @@ description = "An alcoholic beverage made from malted grains, hops, yeast, and water." color = "#664300" // rgb: 102, 67, 0 metabolization_rate = 1.5 * REAGENTS_METABOLISM + drink_icon ="beerglass" + drink_name = "Beer glass" + drink_desc = "A freezing pint of beer" /datum/reagent/beer2/on_mob_life(mob/living/M) switch(current_cycle) diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index a2dd3eb7fc4..fb51fe75d67 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -15,6 +15,9 @@ color = "#0064C8" // rgb: 0, 100, 200 var/cooling_temperature = 2 process_flags = ORGANIC | SYNTHETIC + drink_icon = "glass_clear" + drink_name = "Glass of Water" + drink_desc = "The father of all refreshments." /datum/reagent/water/reaction_mob(mob/living/M, method=TOUCH, volume) // Put out fire @@ -133,6 +136,9 @@ id = "blood" reagent_state = LIQUID color = "#C80000" // rgb: 200, 0, 0 + drink_icon = "glass_red" + drink_name = "Glass of Tomato juice" + drink_desc = "Are you sure this is tomato juice?" /datum/reagent/blood/reaction_mob(mob/living/M, method=TOUCH, volume) if(data && data["viruses"]) @@ -262,6 +268,9 @@ reagent_state = LIQUID color = "#0064C8" // rgb: 0, 100, 200 process_flags = ORGANIC | SYNTHETIC + drink_icon = "glass_clear" + drink_name = "Glass of Water" + drink_desc = "The father of all refreshments." /datum/reagent/holywater/on_mob_life(mob/living/M) M.AdjustJitter(-5) From b77da4511e83dc5b5ab24c91dc6c6b724441f228 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sun, 6 Nov 2016 16:44:54 +0100 Subject: [PATCH 025/193] PA wording fixes --- .../particle_accelerator/particle_chamber.dm | 2 +- .../particle_accelerator/particle_control.dm | 2 +- .../particle_accelerator/particle_emitter.dm | 12 ++++++------ .../particle_accelerator/particle_power.dm | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/code/modules/power/singularity/particle_accelerator/particle_chamber.dm b/code/modules/power/singularity/particle_accelerator/particle_chamber.dm index 8d8e23e9964..411c039d480 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_chamber.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_chamber.dm @@ -1,6 +1,6 @@ /obj/structure/particle_accelerator/fuel_chamber name = "EM Acceleration Chamber" - desc_holder = "This is where the Alpha particles are accelerated to radical speeds." + desc_holder = "This part is where the Alpha particles are accelerated to radical speeds." icon = 'icons/obj/machines/particle_accelerator.dmi' icon_state = "fuel_chamber" reference = "fuel_chamber" diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index ed4d300d7ab..ed2fb257015 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -2,7 +2,7 @@ /obj/machinery/particle_accelerator/control_box name = "Particle Accelerator Control Console" - desc = "This controls the density of the particles." + desc = "This part controls the density of the particles." icon = 'icons/obj/machines/particle_accelerator.dmi' icon_state = "control_box" reference = "control_box" diff --git a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm index 8e260a1115d..cbfd212e873 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm @@ -2,7 +2,7 @@ /obj/structure/particle_accelerator/particle_emitter name = "EM Containment Grid" - desc_holder = "This launchs the Alpha particles, might not want to stand near this end." + desc_holder = "This part launches the Alpha particles. You might not want to stand near this end." icon = 'icons/obj/machines/particle_accelerator.dmi' icon_state = "none" var/fire_delay = 50 @@ -26,16 +26,16 @@ /obj/structure/particle_accelerator/particle_emitter/proc/set_delay(var/delay) if(delay && delay >= 0) - src.fire_delay = delay + fire_delay = delay return 1 return 0 /obj/structure/particle_accelerator/particle_emitter/proc/emit_particle(var/strength = 0) - if((src.last_shot + src.fire_delay) <= world.time) - src.last_shot = world.time + if((last_shot + fire_delay) <= world.time) + last_shot = world.time var/obj/effect/accelerated_particle/A = null - var/turf/T = get_step(src,dir) + var/turf/T = get_step(src, dir) switch(strength) if(0) A = new/obj/effect/accelerated_particle/weak(T, dir) @@ -46,6 +46,6 @@ if(3) A = new/obj/effect/accelerated_particle/powerful(T, dir) if(A) - A.dir = src.dir + A.dir = dir return 1 return 0 diff --git a/code/modules/power/singularity/particle_accelerator/particle_power.dm b/code/modules/power/singularity/particle_accelerator/particle_power.dm index e6deff37ddf..dafd19917da 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_power.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_power.dm @@ -1,6 +1,6 @@ /obj/structure/particle_accelerator/power_box name = "Particle Focusing EM Lens" - desc_holder = "This uses electromagnetic waves to focus the Alpha-Particles." + desc_holder = "This part uses electromagnetic waves to focus the Alpha particles." icon = 'icons/obj/machines/particle_accelerator.dmi' icon_state = "power_box" reference = "power_box" From 61da53cca1b7841838a212a6e856a1033d281634 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 6 Nov 2016 14:37:47 -0500 Subject: [PATCH 026/193] create reagents proc --- code/game/objects/items/devices/scanners.dm | 4 +- code/game/objects/items/toys.dm | 4 +- code/game/objects/structures/mop_bucket.dm | 4 +- .../kitchen_machinery/icecream_vat.dm | 5 +- .../kitchen_machinery/kitchen_machine.dm | 3 +- code/modules/hydroponics/grown_inedible.dm | 4 +- .../carbon/alien/humanoid/caste/drone.dm | 4 +- .../carbon/alien/humanoid/caste/hunter.dm | 4 +- .../carbon/alien/humanoid/caste/sentinel.dm | 4 +- .../living/carbon/alien/humanoid/empress.dm | 4 +- .../living/carbon/alien/humanoid/humanoid.dm | 4 +- .../mob/living/carbon/alien/humanoid/queen.dm | 4 +- .../mob/living/carbon/alien/larva/larva.dm | 4 +- code/modules/mob/living/carbon/brain/brain.dm | 68 +++++++++---------- code/modules/mob/living/carbon/human/human.dm | 10 ++- code/modules/projectiles/guns/dartgun.dm | 4 +- .../machinery/chemistry_machinery.dm | 4 +- code/modules/reagents/reagent_containers.dm | 4 +- code/modules/reagents/reagent_dispenser.dm | 4 +- 19 files changed, 54 insertions(+), 92 deletions(-) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 4b3a656c02e..9a9edbb62ad 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -381,9 +381,7 @@ REAGENT SCANNER /obj/item/device/mass_spectrometer/New() ..() - var/datum/reagents/R = new/datum/reagents(5) - reagents = R - R.my_atom = src + create_reagents(5) /obj/item/device/mass_spectrometer/on_reagent_change() if(reagents.total_volume) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 295a1538a65..01891d4c77a 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -38,9 +38,7 @@ item_state = "balloon-empty" /obj/item/toy/balloon/New() - var/datum/reagents/R = new/datum/reagents(10) - reagents = R - R.my_atom = src + create_reagents(10) /obj/item/toy/balloon/attack(mob/living/carbon/human/M as mob, mob/user as mob) return diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index 68589112080..49175dfa9e3 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -8,9 +8,7 @@ var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite /obj/structure/mopbucket/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) janitorial_equipment += src /obj/structure/mopbucket/full/New() diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm index 5fbd65deddc..59f9ec60d12 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm @@ -24,10 +24,7 @@ /obj/machinery/icemachine/New() - var/datum/reagents/R = new/datum/reagents(500) - reagents = R - R.my_atom = src - + create_reagents(500) /obj/machinery/icemachine/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/reagent_containers/glass)) diff --git a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm index 15458648513..ef7591e3955 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm @@ -32,8 +32,7 @@ ********************/ /obj/machinery/kitchen_machine/New() - reagents = new/datum/reagents(100) - reagents.my_atom = src + create_reagents(100) if(!available_recipes) available_recipes = new acceptable_items = new diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index 0e557ea1d31..712f368a078 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -13,9 +13,7 @@ ..() - var/datum/reagents/R = new/datum/reagents(50) - reagents = R - R.my_atom = src + create_reagents(50) //Handle some post-spawn var stuff. if(planttype) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index 958742b3e61..1249c0f462c 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -6,9 +6,7 @@ icon_state = "aliend_s" /mob/living/carbon/alien/humanoid/drone/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) if(src.name == "alien drone") src.name = text("alien drone ([rand(1, 1000)])") src.real_name = src.name diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index 60a7e4e2f1a..16393977806 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -6,9 +6,7 @@ icon_state = "alienh_s" /mob/living/carbon/alien/humanoid/hunter/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) if(name == "alien hunter") name = text("alien hunter ([rand(1, 1000)])") real_name = name diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index 186577a1908..2644ef8a306 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -35,9 +35,7 @@ overlays += I /mob/living/carbon/alien/humanoid/sentinel/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) if(name == "alien sentinel") name = text("alien sentinel ([rand(1, 1000)])") real_name = name diff --git a/code/modules/mob/living/carbon/alien/humanoid/empress.dm b/code/modules/mob/living/carbon/alien/humanoid/empress.dm index 346247c8e10..d50befa47f0 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/empress.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/empress.dm @@ -31,9 +31,7 @@ overlays += I /mob/living/carbon/alien/humanoid/empress/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) //there should only be one queen for(var/mob/living/carbon/alien/humanoid/empress/E in living_mob_list) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index c5cee9d3db4..b99cde337d6 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -16,9 +16,7 @@ //This is fine right now, if we're adding organ specific damage this needs to be updated /mob/living/carbon/alien/humanoid/New() - var/datum/reagents/R = new/datum/reagents(1000) - reagents = R - R.my_atom = src + create_reagents(1000) if(name == "alien") name = text("alien ([rand(1, 1000)])") real_name = name diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 0fcec18e8ad..11914d3c0ee 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -10,9 +10,7 @@ ventcrawler = 0 /mob/living/carbon/alien/humanoid/queen/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) //there should only be one queen for(var/mob/living/carbon/alien/humanoid/queen/Q in living_mob_list) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 04a460ec710..c7c8c1cefa8 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -15,9 +15,7 @@ //This is fine right now, if we're adding organ specific damage this needs to be updated /mob/living/carbon/alien/larva/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) if(name == "alien larva") name = "alien larva ([rand(1, 1000)])" real_name = name diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index 7809e1fb947..555fcff29da 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -8,45 +8,43 @@ icon = 'icons/obj/surgery.dmi' icon_state = "brain1" - New() - var/datum/reagents/R = new/datum/reagents(330) - reagents = R - R.my_atom = src - ..() +/mob/living/carbon/brain/New() + create_reagents(330) + ..() - Destroy() - if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting. - if(stat!=DEAD) //If not dead. - death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA - ghostize() //Ghostize checks for key so nothing else is necessary. - return ..() +/mob/living/carbon/brain/Destroy() + if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting. + if(stat!=DEAD) //If not dead. + death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA + ghostize() //Ghostize checks for key so nothing else is necessary. + return ..() - say_understands(var/other)//Goddamn is this hackish, but this say code is so odd - if(istype(other, /mob/living/silicon/ai)) - if(!(container && istype(container, /obj/item/device/mmi))) - return 0 - else - return 1 - if(istype(other, /mob/living/silicon/decoy)) - if(!(container && istype(container, /obj/item/device/mmi))) - return 0 - else - return 1 - if(istype(other, /mob/living/silicon/pai)) - if(!(container && istype(container, /obj/item/device/mmi))) - return 0 - else - return 1 - if(istype(other, /mob/living/silicon/robot)) - if(!(container && istype(container, /obj/item/device/mmi))) - return 0 - else - return 1 - if(istype(other, /mob/living/carbon/human)) +/mob/living/carbon/brain/say_understands(other)//Goddamn is this hackish, but this say code is so odd + if(istype(other, /mob/living/silicon/ai)) + if(!(container && istype(container, /obj/item/device/mmi))) + return 0 + else return 1 - if(istype(other, /mob/living/carbon/slime)) + if(istype(other, /mob/living/silicon/decoy)) + if(!(container && istype(container, /obj/item/device/mmi))) + return 0 + else return 1 - return ..() + if(istype(other, /mob/living/silicon/pai)) + if(!(container && istype(container, /obj/item/device/mmi))) + return 0 + else + return 1 + if(istype(other, /mob/living/silicon/robot)) + if(!(container && istype(container, /obj/item/device/mmi))) + return 0 + else + return 1 + if(istype(other, /mob/living/carbon/human)) + return 1 + if(istype(other, /mob/living/carbon/slime)) + return 1 + return ..() /mob/living/carbon/brain/update_canmove(delay_action_updates = 0) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 0bf23e3cae6..170673d2395 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -31,9 +31,7 @@ if(mind) mind.name = real_name - var/datum/reagents/R = new/datum/reagents(330) - reagents = R - R.my_atom = src + create_reagents(330) prev_gender = gender // Debug for plural genders make_blood() @@ -716,12 +714,12 @@ var/obj/item/device/pda/pda = wear_id if(istype(pda) && pda.id) id = pda.id - + if(check_hands) if(istype(get_active_hand(), /obj/item/weapon/card/id)) id = get_active_hand() else if(istype(get_inactive_hand(), /obj/item/weapon/card/id)) - id = get_inactive_hand() + id = get_inactive_hand() if(istype(id)) return id @@ -1994,7 +1992,7 @@ if(istype(pda)) var/obj/item/weapon/card/id/id = pda.id if(istype(id) && id.is_untrackable()) - return 0 + return 0 if(istype(head, /obj/item/clothing/head)) var/obj/item/clothing/head/hat = head if(hat.blockTracking) diff --git a/code/modules/projectiles/guns/dartgun.dm b/code/modules/projectiles/guns/dartgun.dm index 0307755f3c7..b8f659eb09f 100644 --- a/code/modules/projectiles/guns/dartgun.dm +++ b/code/modules/projectiles/guns/dartgun.dm @@ -302,6 +302,4 @@ density = 0 /obj/effect/syringe_gun_dummy/New() - var/datum/reagents/R = new/datum/reagents(15) - reagents = R - R.my_atom = src + create_reagents(15) diff --git a/code/modules/reagents/chemistry/machinery/chemistry_machinery.dm b/code/modules/reagents/chemistry/machinery/chemistry_machinery.dm index 913f6e593eb..dc19823649f 100644 --- a/code/modules/reagents/chemistry/machinery/chemistry_machinery.dm +++ b/code/modules/reagents/chemistry/machinery/chemistry_machinery.dm @@ -400,9 +400,7 @@ var/printing = null /obj/machinery/chem_master/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) overlays += "waitlight" /obj/machinery/chem_master/ex_act(severity) diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index f8e6f626bb1..f46d4010e69 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -29,9 +29,7 @@ ..() if(!possible_transfer_amounts) verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT - var/datum/reagents/R = new/datum/reagents(volume) - reagents = R - R.my_atom = src + create_reagents(volume) processing_objects.Add(src) if(spawned_disease) var/datum/disease/F = new spawned_disease(0) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index f5225daeae1..4c2d2caa6b8 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -16,9 +16,7 @@ return /obj/structure/reagent_dispensers/New() - var/datum/reagents/R = new/datum/reagents(1000) - reagents = R - R.my_atom = src + create_reagents(1000) if(!possible_transfer_amounts) verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT ..() From 36e84ccdf7bd9cc5311afad04cbb9eba866ce9d1 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 6 Nov 2016 15:02:25 -0500 Subject: [PATCH 027/193] further structure --- .../chemistry/machinery/chem_dispenser.dm | 377 +++++ .../chemistry/machinery/chem_master.dm | 415 ++++++ .../machinery/chemistry_machinery.dm | 1213 ----------------- .../chemistry/machinery/reagentgrinder.dm | 415 ++++++ paradise.dme | 4 +- 5 files changed, 1210 insertions(+), 1214 deletions(-) create mode 100644 code/modules/reagents/chemistry/machinery/chem_dispenser.dm create mode 100644 code/modules/reagents/chemistry/machinery/chem_master.dm delete mode 100644 code/modules/reagents/chemistry/machinery/chemistry_machinery.dm create mode 100644 code/modules/reagents/chemistry/machinery/reagentgrinder.dm diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm new file mode 100644 index 00000000000..5103f246a27 --- /dev/null +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -0,0 +1,377 @@ +#define SOLID 1 +#define LIQUID 2 +#define GAS 3 + +/obj/machinery/chem_dispenser + name = "chem dispenser" + density = 1 + anchored = 1 + icon = 'icons/obj/chemical.dmi' + icon_state = "dispenser" + use_power = 0 + idle_power_usage = 40 + var/ui_title = "Chem Dispenser 5000" + var/energy = 100 + var/max_energy = 100 + var/amount = 30 + var/obj/item/weapon/reagent_containers/beaker = null + var/recharged = 0 + var/hackedcheck = 0 + var/list/dispensable_reagents = list("hydrogen", "lithium", "carbon", "nitrogen", "oxygen", "fluorine", + "sodium", "aluminum", "silicon", "phosphorus", "sulfur", "chlorine", "potassium", "iron", + "copper", "mercury", "plasma", "radium", "water", "ethanol", "sugar", "iodine", "bromine", "silver") + var/list/hacked_reagents = list("toxin") + var/hack_message = "You disable the safety safeguards, enabling the \"Mad Scientist\" mode." + var/unhack_message = "You re-enable the safety safeguards, enabling the \"NT Standard\" mode." + var/list/broken_requirements = list() + var/broken_on_spawn = 0 + var/recharge_delay = 5 + var/image/icon_beaker = null //cached overlay + + +/obj/machinery/chem_dispenser/proc/recharge() + if(stat & (BROKEN|NOPOWER)) return + var/addenergy = 1 + var/oldenergy = energy + energy = min(energy + addenergy, max_energy) + if(energy != oldenergy) + use_power(1500) // This thing uses up alot of power (this is still low as shit for creating reagents from thin air) + nanomanager.update_uis(src) // update all UIs attached to src + +/obj/machinery/chem_dispenser/power_change() + if(powered()) + stat &= ~NOPOWER + else + spawn(rand(0, 15)) + stat |= NOPOWER + nanomanager.update_uis(src) // update all UIs attached to src + +/obj/machinery/chem_dispenser/process() + + if(recharged < 0) + recharge() + recharged = recharge_delay + else + recharged -= 1 + +/obj/machinery/chem_dispenser/New() + ..() + recharge() + dispensable_reagents = sortList(dispensable_reagents) + + if(broken_on_spawn) + overlays.Cut() + var/amount = pick(3,3,4) + var/list/options = list() + options[/obj/item/weapon/stock_parts/capacitor/adv] = "Add an advanced capacitor to fix it." + options[/obj/item/weapon/stock_parts/console_screen] = "Replace the console screen to fix it." + options[/obj/item/weapon/stock_parts/manipulator/pico] = "Upgrade to a pico manipulator to fix it." + options[/obj/item/weapon/stock_parts/matter_bin/super] = "Give it a super matter bin to fix it." + options[/obj/item/weapon/stock_parts/cell/super] = "Replace the reagent synthesizer with a super capacity cell to fix it." + options[/obj/item/device/mass_spectrometer/adv] = "Replace the reagent scanner with an advanced mass spectrometer to fix it" + options[/obj/item/weapon/stock_parts/micro_laser/high] = "Repair the reagent synthesizer with an high-power micro-laser to fix it" + options[/obj/item/device/reagent_scanner/adv] = "Replace the reagent scanner with an advanced reagent scanner to fix it" + options[/obj/item/stack/nanopaste] = "Apply some nanopaste to the broken nozzles to fix it." + options[/obj/item/stack/sheet/plasteel] = "Surround the outside with a plasteel cover to fix it." + options[/obj/item/stack/sheet/rglass] = "Insert a pane of reinforced glass to fix it." + + while(amount > 0) + amount -= 1 + + var/index = pick(options) + broken_requirements[index] = options[index] + options -= index + + +/obj/machinery/chem_dispenser/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if(prob(50)) + qdel(src) + return + +/obj/machinery/chem_dispenser/blob_act() + if(prob(50)) + qdel(src) + + /** + * The ui_interact proc is used to open and update Nano UIs + * If ui_interact is not used then the UI will not update correctly + * ui_interact is currently defined for /atom/movable + * + * @param user /mob The mob who is interacting with this ui + * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") + * + * @return nothing + */ + +/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) + if(broken_requirements.len) + to_chat(user, "[src] is broken. [broken_requirements[broken_requirements[1]]]") + return + + + // this is the data which will be sent to the ui + var/data[0] + data["amount"] = amount + data["energy"] = round(energy) + data["maxEnergy"] = round(max_energy) + data["isBeakerLoaded"] = beaker ? 1 : 0 + + var beakerContents[0] + var beakerCurrentVolume = 0 + if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) + for(var/datum/reagent/R in beaker.reagents.reagent_list) + beakerContents.Add(list(list("name" = R.name, "id"=R.id, "volume" = R.volume))) // list in a list because Byond merges the first list... + beakerCurrentVolume += R.volume + data["beakerContents"] = beakerContents + + if(beaker) + data["beakerCurrentVolume"] = beakerCurrentVolume + data["beakerMaxVolume"] = beaker.volume + else + data["beakerCurrentVolume"] = null + data["beakerMaxVolume"] = null + + var chemicals[0] + for(var/re in dispensable_reagents) + var/datum/reagent/temp = chemical_reagents_list[re] + if(temp) + chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("dispense" = temp.id)))) // list in a list because Byond merges the first list... + data["chemicals"] = chemicals + + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "chem_dispenser.tmpl", ui_title, 390, 655) + // when the ui is first opened this is the data it will use + ui.set_initial_data(data) + // open the new ui window + ui.open() + +/obj/machinery/chem_dispenser/Topic(href, href_list) + if(..()) + return 1 + + if(href_list["amount"]) + amount = round(text2num(href_list["amount"]), 5) // round to nearest 5 + if(amount < 0) // Since the user can actually type the commands himself, some sanity checking + amount = 0 + if(amount > 100) + amount = 100 + + if(href_list["dispense"]) + if(dispensable_reagents.Find(href_list["dispense"]) && beaker != null) + var/obj/item/weapon/reagent_containers/glass/B = beaker + var/datum/reagents/R = B.reagents + var/space = R.maximum_volume - R.total_volume + + R.add_reagent(href_list["dispense"], min(amount, energy * 10, space)) + energy = max(energy - min(amount, energy * 10, space) / 10, 0) + overlays.Cut() + icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position. + icon_beaker.pixel_x = rand(-10,5) + overlays += icon_beaker + + if(href_list["remove"]) + if(beaker) + if(href_list["removeamount"]) + var/amount = text2num(href_list["removeamount"]) + if(isnum(amount) && (amount > 0)) + var/obj/item/weapon/reagent_containers/glass/B = beaker + var/datum/reagents/R = B.reagents + var/id = href_list["remove"] + R.remove_reagent(id, amount) + + if(href_list["ejectBeaker"]) + if(beaker) + var/obj/item/weapon/reagent_containers/glass/B = beaker + B.forceMove(loc) + beaker = null + overlays.Cut() + add_fingerprint(usr) + return 1 // update UIs attached to this object + +/obj/machinery/chem_dispenser/attackby(obj/item/weapon/reagent_containers/B, mob/user, params) + if(isrobot(user)) + return + + if(broken_requirements.len && B.type == broken_requirements[1]) + if(istype(B,/obj/item/stack)) + var/obj/item/stack/S = B + S.use(1) + else + if(!user.drop_item()) + to_chat(user, "[B] is stuck to you!") + return + qdel(B) + broken_requirements -= broken_requirements[1] + to_chat(user, "You fix [src].") + return + + if(beaker) + to_chat(user, "Something is already loaded into the machine.") + return + + if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B, /obj/item/weapon/reagent_containers/food/drinks)) + beaker = B + if(!user.drop_item()) + to_chat(user, "[B] is stuck to you!") + return + B.forceMove(src) + to_chat(user, "You set [B] on the machine.") + nanomanager.update_uis(src) // update all UIs attached to src + if(!icon_beaker) + icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position. + icon_beaker.pixel_x = rand(-10,5) + overlays += icon_beaker + return + +/obj/machinery/chem_dispenser/attackby(obj/item/weapon/B, mob/user, params) + ..() + if(istype(B, /obj/item/device/multitool)) + if(hackedcheck == 0) + to_chat(user, hack_message) + dispensable_reagents += hacked_reagents + hackedcheck = 1 + return + + else + to_chat(user, unhack_message) + dispensable_reagents -= hacked_reagents + hackedcheck = 0 + return + +/obj/machinery/chem_dispenser/attack_ai(mob/user) + return attack_hand(user) + +/obj/machinery/chem_dispenser/attack_ghost(mob/user) + return attack_hand(user) + +/obj/machinery/chem_dispenser/attack_hand(mob/user) + if(stat & BROKEN) + return + + ui_interact(user) + +/obj/machinery/chem_dispenser/soda + icon_state = "soda_dispenser" + name = "soda fountain" + desc = "A drink fabricating machine, capable of producing many sugary drinks with just one touch." + ui_title = "Soda Dispens-o-matic" + energy = 100 + max_energy = 100 + dispensable_reagents = list("water", "ice", "milk", "soymilk", "coffee", "tea", "hot_coco", "cola", "spacemountainwind", "dr_gibb", "space_up", + "tonic", "sodawater", "lemon_lime", "grapejuice", "sugar", "orangejuice", "lemonjuice", "limejuice", "tomatojuice", "banana", + "watermelonjuice", "carrotjuice", "potato", "berryjuice") + hack_message = "You change the mode from 'McNano' to 'Pizza King'." + unhack_message = "You change the mode from 'Pizza King' to 'McNano'." + hacked_reagents = list("thirteenloko") + +/obj/machinery/chem_dispenser/beer + icon_state = "booze_dispenser" + name = "booze dispenser" + ui_title = "Booze Portal 9001" + energy = 100 + max_energy = 100 + desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one." + dispensable_reagents = list("ice", "cream", "cider", "beer", "kahlua", "whiskey", "wine", "vodka", "gin", "rum", "tequila", "vermouth", "cognac", "ale", "mead", "synthanol") + hack_message = "You disable the 'nanotrasen-are-cheap-bastards' lock, enabling hidden and very expensive boozes." + unhack_message = "You re-enable the 'nanotrasen-are-cheap-bastards' lock, disabling hidden and very expensive boozes." + hacked_reagents = list("goldschlager", "patron", "absinthe", "ethanol", "nothing") + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/obj/machinery/chem_dispenser/constructable + name = "portable chem dispenser" + icon = 'icons/obj/chemical.dmi' + icon_state = "minidispenser" + energy = 5 + max_energy = 5 + amount = 5 + recharge_delay = 10 + dispensable_reagents = list() + var/list/special_reagents = list(list("hydrogen", "oxygen", "silicon", "phosphorus", "sulfur", "carbon", "nitrogen", "water"), + list("lithium", "sugar", "copper", "mercury", "sodium","iodine","bromine"), + list("ethanol", "chlorine", "potassium", "aluminum","plasma", "radium", "fluorine", "iron", "silver"), + list("oil", "ash", "acetone", "saltpetre", "ammonia", "diethylamine", "fuel")) + +/obj/machinery/chem_dispenser/constructable/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(null) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + component_parts += new /obj/item/weapon/stock_parts/capacitor(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/weapon/stock_parts/cell/super(null) + RefreshParts() + +/obj/machinery/chem_dispenser/constructable/upgraded/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(null) + component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null) + component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null) + component_parts += new /obj/item/weapon/stock_parts/capacitor/super(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/weapon/stock_parts/cell/hyper(null) + RefreshParts() + +/obj/machinery/chem_dispenser/constructable/RefreshParts() + var/time = 0 + var/temp_energy = 0 + var/i + for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) + temp_energy += M.rating + temp_energy-- + max_energy = temp_energy * 5 //max energy = (bin1.rating + bin2.rating - 1) * 5, 5 on lowest 25 on highest + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + time += C.rating + for(var/obj/item/weapon/stock_parts/cell/P in component_parts) + time += round(P.maxcharge, 10000) / 10000 + recharge_delay = 10 / (time/2) //delay between recharges, double the usual time on lowest 33% less than usual on highest + for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) + for(i=1, i<=M.rating, i++) + dispensable_reagents = sortList(dispensable_reagents | special_reagents[i]) + +/obj/machinery/chem_dispenser/constructable/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/reagent_containers/glass)) + if(panel_open) + to_chat(user, "Close the maintenance panel first.") + return + ..() + else + ..() + + if(default_deconstruction_screwdriver(user, "minidispenser-o", "minidispenser", I)) + return + + if(exchange_parts(user, I)) + return + + if(istype(I, /obj/item/weapon/wrench)) + playsound(src, 'sound/items/Ratchet.ogg', 50, 1) + if(anchored) + anchored = 0 + to_chat(user, "[src] can now be moved.") + else if(!anchored) + anchored = 1 + to_chat(user, "[src] is now secured.") + + if(panel_open) + if(istype(I, /obj/item/weapon/crowbar)) + if(beaker) + var/obj/item/weapon/reagent_containers/glass/B = beaker + B.forceMove(loc) + beaker = null + default_deconstruction_crowbar(I) + return 1 \ No newline at end of file diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm new file mode 100644 index 00000000000..b6b0de6e0a0 --- /dev/null +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -0,0 +1,415 @@ +/obj/machinery/chem_master + name = "\improper ChemMaster 3000" + density = 1 + anchored = 1 + icon = 'icons/obj/chemical.dmi' + icon_state = "mixer0" + use_power = 1 + idle_power_usage = 20 + var/obj/item/weapon/reagent_containers/beaker = null + var/obj/item/weapon/storage/pill_bottle/loaded_pill_bottle = null + var/mode = 0 + var/condi = 0 + var/useramount = 30 // Last used amount + var/pillamount = 10 + var/patchamount = 10 + var/bottlesprite = "bottle" + var/pillsprite = "1" + var/client/has_sprites = list() + var/printing = null + +/obj/machinery/chem_master/New() + create_reagents(100) + overlays += "waitlight" + +/obj/machinery/chem_master/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if(prob(50)) + qdel(src) + return + +/obj/machinery/chem_master/blob_act() + if(prob(50)) + qdel(src) + +/obj/machinery/chem_master/power_change() + if(powered()) + stat &= ~NOPOWER + else + spawn(rand(0, 15)) + stat |= NOPOWER + +/obj/machinery/chem_master/attackby(obj/item/weapon/B, mob/user, params) + + if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B, /obj/item/weapon/reagent_containers/food/drinks/drinkingglass)) + + if(beaker) + to_chat(user, "A beaker is already loaded into the machine.") + return + if(!user.drop_item()) + to_chat(user, "[B] is stuck to you!") + return + beaker = B + B.forceMove(src) + to_chat(user, "You add the beaker to the machine!") + nanomanager.update_uis(src) + icon_state = "mixer1" + + else if(istype(B, /obj/item/weapon/storage/pill_bottle)) + + if(loaded_pill_bottle) + to_chat(user, "A pill bottle is already loaded into the machine.") + return + + if(!user.drop_item()) + to_chat(user, "[B] is stuck to you!") + return + loaded_pill_bottle = B + B.forceMove(src) + to_chat(user, "You add the pill bottle into the dispenser slot!") + nanomanager.update_uis(src) + return + +/obj/machinery/chem_master/Topic(href, href_list) + if(..()) + return 1 + + add_fingerprint(usr) + usr.set_machine(src) + + + if(href_list["ejectp"]) + if(loaded_pill_bottle) + loaded_pill_bottle.forceMove(loc) + loaded_pill_bottle = null + else if(href_list["close"]) + usr << browse(null, "window=chem_master") + onclose(usr, "chem_master") + usr.unset_machine() + return + + if(href_list["print_p"]) + if(!(printing)) + printing = 1 + visible_message("[src] rattles and prints out a sheet of paper.") + playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc) + P.info = "
Chemical Analysis

" + P.info += "Time of analysis: [worldtime2text(world.time)]

" + P.info += "Chemical name: [href_list["name"]]
" + if(href_list["name"] == "Blood") + var/datum/reagents/R = beaker.reagents + var/datum/reagent/blood/G + for(var/datum/reagent/F in R.reagent_list) + if(F.name == href_list["name"]) + G = F + break + var/B = G.data["blood_type"] + var/C = G.data["blood_DNA"] + P.info += "Description:
Blood Type: [B]
DNA: [C]" + else + P.info += "Description: [href_list["desc"]]" + P.info += "

Notes:
" + P.name = "Chemical Analysis - [href_list["name"]]" + printing = null + + if(beaker) + var/datum/reagents/R = beaker.reagents + if(href_list["analyze"]) + var/dat = "" + if(!condi) + if(href_list["name"] == "Blood") + var/datum/reagent/blood/G + for(var/datum/reagent/F in R.reagent_list) + if(F.name == href_list["name"]) + G = F + break + var/A = G.name + var/B = G.data["blood_type"] + var/C = G.data["blood_DNA"] + dat += "Chemmaster 3000Chemical infos:

Name:
[A]

Description:
Blood Type: [B]
DNA: [C]" + else + dat += "Chemmaster 3000Chemical infos:

Name:
[href_list["name"]]

Description:
[href_list["desc"]]" + dat += "

(Print Analysis)
" + dat += "(Back)" + else + dat += "Condimaster 3000Condiment infos:

Name:
[href_list["name"]]

Description:
[href_list["desc"]]


(Back)" + usr << browse(dat, "window=chem_master;size=575x400") + return + + else if(href_list["add"]) + + if(href_list["amount"]) + var/id = href_list["add"] + var/amount = text2num(href_list["amount"]) + R.trans_id_to(src, id, amount) + + else if(href_list["addcustom"]) + + var/id = href_list["addcustom"] + useramount = input("Select the amount to transfer.", 30, useramount) as num + useramount = isgoodnumber(useramount) + Topic(null, list("amount" = "[useramount]", "add" = "[id]")) + + else if(href_list["remove"]) + + if(href_list["amount"]) + var/id = href_list["remove"] + var/amount = text2num(href_list["amount"]) + if(mode) + reagents.trans_id_to(beaker, id, amount) + else + reagents.remove_reagent(id, amount) + + + else if(href_list["removecustom"]) + + var/id = href_list["removecustom"] + useramount = input("Select the amount to transfer.", 30, useramount) as num + useramount = isgoodnumber(useramount) + Topic(null, list("amount" = "[useramount]", "remove" = "[id]")) + + else if(href_list["toggle"]) + mode = !mode + + else if(href_list["main"]) + attack_hand(usr) + return + else if(href_list["eject"]) + if(beaker) + beaker.forceMove(get_turf(src)) + beaker = null + reagents.clear_reagents() + icon_state = "mixer0" + else if(href_list["createpill"] || href_list["createpill_multiple"]) + if(!condi) + var/count = 1 + if(href_list["createpill_multiple"]) + count = input("Select the number of pills to make.", 10, pillamount) as num|null + if(count == null) + return + count = isgoodnumber(count) + if(count > 20) count = 20 //Pevent people from creating huge stacks of pills easily. Maybe move the number to defines? + if(count <= 0) return + var/amount_per_pill = reagents.total_volume/count + if(amount_per_pill > 50) amount_per_pill = 50 + var/name = input(usr,"Name:","Name your pill!","[reagents.get_master_reagent_name()] ([amount_per_pill]u)") as text|null + if(!name) + return + name = reject_bad_text(name) + while(count--) + var/obj/item/weapon/reagent_containers/food/pill/P = new/obj/item/weapon/reagent_containers/food/pill(loc) + if(!name) name = reagents.get_master_reagent_name() + P.name = "[name] pill" + P.pixel_x = rand(-7, 7) //random position + P.pixel_y = rand(-7, 7) + P.icon_state = "pill"+pillsprite + reagents.trans_to(P,amount_per_pill) + if(loaded_pill_bottle) + if(loaded_pill_bottle.contents.len < loaded_pill_bottle.storage_slots) + P.forceMove(loaded_pill_bottle) + updateUsrDialog() + else + var/name = input(usr,"Name:","Name your bag!",reagents.get_master_reagent_name()) as text|null + if(!name) + return + name = reject_bad_text(name) + var/obj/item/weapon/reagent_containers/food/condiment/pack/P = new/obj/item/weapon/reagent_containers/food/condiment/pack(loc) + if(!name) name = reagents.get_master_reagent_name() + P.originalname = name + P.name = "[name] pack" + P.desc = "A small condiment pack. The label says it contains [name]." + reagents.trans_to(P,10) + else if(href_list["createpatch"] || href_list["createpatch_multiple"]) + if(!condi) + var/count = 1 + if(href_list["createpatch_multiple"]) + count = input("Select the number of patches to make.", 10, patchamount) as num|null + if(count == null) + return + count = isgoodnumber(count) + if(!count || count <= 0) + return + if(count > 20) count = 20 //Pevent people from creating huge stacks of patches easily. Maybe move the number to defines? + var/amount_per_patch = reagents.total_volume/count + if(amount_per_patch > 40) amount_per_patch = 40 + var/name = input(usr,"Name:","Name your patch!","[reagents.get_master_reagent_name()] ([amount_per_patch]u)") as text|null + if(!name) + return + name = reject_bad_text(name) + var/is_medical_patch = chemical_safety_check(reagents) + while(count--) + var/obj/item/weapon/reagent_containers/food/pill/patch/P = new/obj/item/weapon/reagent_containers/food/pill/patch(loc) + if(!name) name = reagents.get_master_reagent_name() + P.name = "[name] patch" + P.pixel_x = rand(-7, 7) //random position + P.pixel_y = rand(-7, 7) + reagents.trans_to(P,amount_per_patch) + if(is_medical_patch) + P.instant_application = 1 + P.icon_state = "bandaid_med" + else if(href_list["createbottle"]) + if(!condi) + var/name = input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name()) as text|null + if(!name) + return + name = reject_bad_text(name) + var/obj/item/weapon/reagent_containers/glass/bottle/P = new/obj/item/weapon/reagent_containers/glass/bottle(loc) + if(!name) name = reagents.get_master_reagent_name() + P.name = "[name] bottle" + P.pixel_x = rand(-7, 7) //random position + P.pixel_y = rand(-7, 7) + P.icon_state = bottlesprite + reagents.trans_to(P,30) + else + var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(loc) + reagents.trans_to(P,50) + else if(href_list["change_pill"]) + #define MAX_PILL_SPRITE 20 //max icon state of the pill sprites + var/dat = "" + var/j = 0 + for(var/i = 1 to MAX_PILL_SPRITE) + j++ + if(j == 1) + dat += "" + dat += "" + if(j == 5) + dat += "" + j = 0 + dat += "
" + usr << browse(dat, "window=chem_master_iconsel;size=225x193") + return + else if(href_list["change_bottle"]) + var/dat = "" + var/j = 0 + for(var/i in list("bottle", "small_bottle", "wide_bottle", "round_bottle")) + j++ + if(j == 1) + dat += "" + dat += "" + if(j == 5) + dat += "" + j = 0 + dat += "
" + usr << browse(dat, "window=chem_master_iconsel;size=225x193") + return + else if(href_list["pill_sprite"]) + pillsprite = href_list["pill_sprite"] + usr << browse(null, "window=chem_master_iconsel") + else if(href_list["bottle_sprite"]) + bottlesprite = href_list["bottle_sprite"] + usr << browse(null, "window=chem_master_iconsel") + + nanomanager.update_uis(src) + return + +/obj/machinery/chem_master/attack_ai(mob/user) + return attack_hand(user) + +/obj/machinery/chem_master/attack_ghost(mob/user) + return attack_hand(user) + +/obj/machinery/chem_master/attack_hand(mob/user) + if(..()) + return 1 + ui_interact(user) + return + +/obj/machinery/chem_master/ui_interact(mob/user, ui_key="main", datum/nanoui/ui = null, force_open = 1) + + var/datum/asset/chem_master/assets = get_asset_datum(/datum/asset/chem_master) + assets.send(user) + + var/data = list() + + data["condi"] = condi + data["loaded_pill_bottle"] = (loaded_pill_bottle ? 1 : 0) + if(loaded_pill_bottle) + data["loaded_pill_bottle_contents_len"] = loaded_pill_bottle.contents.len + data["loaded_pill_bottle_storage_slots"] = loaded_pill_bottle.storage_slots + + data["beaker"] = (beaker ? 1 : 0) + if(beaker) + var/list/beaker_reagents_list = list() + data["beaker_reagents"] = beaker_reagents_list + for(var/datum/reagent/R in beaker.reagents.reagent_list) + beaker_reagents_list[++beaker_reagents_list.len] = list("name" = R.name, "volume" = R.volume, "id" = R.id, "description" = R.description) + var/list/buffer_reagents_list = list() + data["buffer_reagents"] = buffer_reagents_list + for(var/datum/reagent/R in reagents.reagent_list) + buffer_reagents_list[++buffer_reagents_list.len] = list("name" = R.name, "volume" = R.volume, "id" = R.id, "description" = R.description) + + data["pillsprite"] = pillsprite + data["bottlesprite"] = bottlesprite + data["mode"] = mode + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "chem_master.tmpl", name, 575, 400) + ui.set_initial_data(data) + ui.open() + +/obj/machinery/chem_master/proc/isgoodnumber(num) + if(isnum(num)) + if(num > 200) + num = 200 + else if(num < 0) + num = 1 + else + num = round(num) + return num + else + return 0 + +/obj/machinery/chem_master/proc/chemical_safety_check(datum/reagents/R) + var/all_safe = 1 + for(var/datum/reagent/A in R.reagent_list) + if(!safe_chem_list.Find(A.id)) + all_safe = 0 + return all_safe + +/obj/machinery/chem_master/condimaster + name = "\improper CondiMaster 3000" + condi = 1 + +/obj/machinery/chem_master/constructable + name = "ChemMaster 2999" + desc = "Used to seperate chemicals and distribute them in a variety of forms." + +/obj/machinery/chem_master/constructable/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/chem_master(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null) + component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null) + +/obj/machinery/chem_master/constructable/attackby(obj/item/B, mob/user, params) + + if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", B)) + if(beaker) + beaker.forceMove(get_turf(src)) + beaker = null + reagents.clear_reagents() + if(loaded_pill_bottle) + loaded_pill_bottle.forceMove(get_turf(src)) + loaded_pill_bottle = null + return + + if(exchange_parts(user, B)) + return + + if(panel_open) + if(istype(B, /obj/item/weapon/crowbar)) + default_deconstruction_crowbar(B) + return 1 + else + to_chat(user, "You can't use the [name] while it's panel is opened!") + return 1 + else + ..() \ No newline at end of file diff --git a/code/modules/reagents/chemistry/machinery/chemistry_machinery.dm b/code/modules/reagents/chemistry/machinery/chemistry_machinery.dm deleted file mode 100644 index dc19823649f..00000000000 --- a/code/modules/reagents/chemistry/machinery/chemistry_machinery.dm +++ /dev/null @@ -1,1213 +0,0 @@ -#define SOLID 1 -#define LIQUID 2 -#define GAS 3 - -/obj/machinery/chem_dispenser - name = "chem dispenser" - density = 1 - anchored = 1 - icon = 'icons/obj/chemical.dmi' - icon_state = "dispenser" - use_power = 0 - idle_power_usage = 40 - var/ui_title = "Chem Dispenser 5000" - var/energy = 100 - var/max_energy = 100 - var/amount = 30 - var/obj/item/weapon/reagent_containers/beaker = null - var/recharged = 0 - var/hackedcheck = 0 - var/list/dispensable_reagents = list("hydrogen", "lithium", "carbon", "nitrogen", "oxygen", "fluorine", - "sodium", "aluminum", "silicon", "phosphorus", "sulfur", "chlorine", "potassium", "iron", - "copper", "mercury", "plasma", "radium", "water", "ethanol", "sugar", "iodine", "bromine", "silver") - var/list/hacked_reagents = list("toxin") - var/hack_message = "You disable the safety safeguards, enabling the \"Mad Scientist\" mode." - var/unhack_message = "You re-enable the safety safeguards, enabling the \"NT Standard\" mode." - var/list/broken_requirements = list() - var/broken_on_spawn = 0 - var/recharge_delay = 5 - var/image/icon_beaker = null //cached overlay - - -/obj/machinery/chem_dispenser/proc/recharge() - if(stat & (BROKEN|NOPOWER)) return - var/addenergy = 1 - var/oldenergy = energy - energy = min(energy + addenergy, max_energy) - if(energy != oldenergy) - use_power(1500) // This thing uses up alot of power (this is still low as shit for creating reagents from thin air) - nanomanager.update_uis(src) // update all UIs attached to src - -/obj/machinery/chem_dispenser/power_change() - if(powered()) - stat &= ~NOPOWER - else - spawn(rand(0, 15)) - stat |= NOPOWER - nanomanager.update_uis(src) // update all UIs attached to src - -/obj/machinery/chem_dispenser/process() - - if(recharged < 0) - recharge() - recharged = recharge_delay - else - recharged -= 1 - -/obj/machinery/chem_dispenser/New() - ..() - recharge() - dispensable_reagents = sortList(dispensable_reagents) - - if(broken_on_spawn) - overlays.Cut() - var/amount = pick(3,3,4) - var/list/options = list() - options[/obj/item/weapon/stock_parts/capacitor/adv] = "Add an advanced capacitor to fix it." - options[/obj/item/weapon/stock_parts/console_screen] = "Replace the console screen to fix it." - options[/obj/item/weapon/stock_parts/manipulator/pico] = "Upgrade to a pico manipulator to fix it." - options[/obj/item/weapon/stock_parts/matter_bin/super] = "Give it a super matter bin to fix it." - options[/obj/item/weapon/stock_parts/cell/super] = "Replace the reagent synthesizer with a super capacity cell to fix it." - options[/obj/item/device/mass_spectrometer/adv] = "Replace the reagent scanner with an advanced mass spectrometer to fix it" - options[/obj/item/weapon/stock_parts/micro_laser/high] = "Repair the reagent synthesizer with an high-power micro-laser to fix it" - options[/obj/item/device/reagent_scanner/adv] = "Replace the reagent scanner with an advanced reagent scanner to fix it" - options[/obj/item/stack/nanopaste] = "Apply some nanopaste to the broken nozzles to fix it." - options[/obj/item/stack/sheet/plasteel] = "Surround the outside with a plasteel cover to fix it." - options[/obj/item/stack/sheet/rglass] = "Insert a pane of reinforced glass to fix it." - - while(amount > 0) - amount -= 1 - - var/index = pick(options) - broken_requirements[index] = options[index] - options -= index - - -/obj/machinery/chem_dispenser/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if(prob(50)) - qdel(src) - return - -/obj/machinery/chem_dispenser/blob_act() - if(prob(50)) - qdel(src) - - /** - * The ui_interact proc is used to open and update Nano UIs - * If ui_interact is not used then the UI will not update correctly - * ui_interact is currently defined for /atom/movable - * - * @param user /mob The mob who is interacting with this ui - * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") - * - * @return nothing - */ - -/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) - if(broken_requirements.len) - to_chat(user, "[src] is broken. [broken_requirements[broken_requirements[1]]]") - return - - - // this is the data which will be sent to the ui - var/data[0] - data["amount"] = amount - data["energy"] = round(energy) - data["maxEnergy"] = round(max_energy) - data["isBeakerLoaded"] = beaker ? 1 : 0 - - var beakerContents[0] - var beakerCurrentVolume = 0 - if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beakerContents.Add(list(list("name" = R.name, "id"=R.id, "volume" = R.volume))) // list in a list because Byond merges the first list... - beakerCurrentVolume += R.volume - data["beakerContents"] = beakerContents - - if(beaker) - data["beakerCurrentVolume"] = beakerCurrentVolume - data["beakerMaxVolume"] = beaker.volume - else - data["beakerCurrentVolume"] = null - data["beakerMaxVolume"] = null - - var chemicals[0] - for(var/re in dispensable_reagents) - var/datum/reagent/temp = chemical_reagents_list[re] - if(temp) - chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("dispense" = temp.id)))) // list in a list because Byond merges the first list... - data["chemicals"] = chemicals - - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "chem_dispenser.tmpl", ui_title, 390, 655) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - -/obj/machinery/chem_dispenser/Topic(href, href_list) - if(..()) - return 1 - - if(href_list["amount"]) - amount = round(text2num(href_list["amount"]), 5) // round to nearest 5 - if(amount < 0) // Since the user can actually type the commands himself, some sanity checking - amount = 0 - if(amount > 100) - amount = 100 - - if(href_list["dispense"]) - if(dispensable_reagents.Find(href_list["dispense"]) && beaker != null) - var/obj/item/weapon/reagent_containers/glass/B = beaker - var/datum/reagents/R = B.reagents - var/space = R.maximum_volume - R.total_volume - - R.add_reagent(href_list["dispense"], min(amount, energy * 10, space)) - energy = max(energy - min(amount, energy * 10, space) / 10, 0) - overlays.Cut() - icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position. - icon_beaker.pixel_x = rand(-10,5) - overlays += icon_beaker - - if(href_list["remove"]) - if(beaker) - if(href_list["removeamount"]) - var/amount = text2num(href_list["removeamount"]) - if(isnum(amount) && (amount > 0)) - var/obj/item/weapon/reagent_containers/glass/B = beaker - var/datum/reagents/R = B.reagents - var/id = href_list["remove"] - R.remove_reagent(id, amount) - - if(href_list["ejectBeaker"]) - if(beaker) - var/obj/item/weapon/reagent_containers/glass/B = beaker - B.forceMove(loc) - beaker = null - overlays.Cut() - add_fingerprint(usr) - return 1 // update UIs attached to this object - -/obj/machinery/chem_dispenser/attackby(obj/item/weapon/reagent_containers/B, mob/user, params) - if(isrobot(user)) - return - - if(broken_requirements.len && B.type == broken_requirements[1]) - if(istype(B,/obj/item/stack)) - var/obj/item/stack/S = B - S.use(1) - else - if(!user.drop_item()) - to_chat(user, "[B] is stuck to you!") - return - qdel(B) - broken_requirements -= broken_requirements[1] - to_chat(user, "You fix [src].") - return - - if(beaker) - to_chat(user, "Something is already loaded into the machine.") - return - - if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B, /obj/item/weapon/reagent_containers/food/drinks)) - beaker = B - if(!user.drop_item()) - to_chat(user, "[B] is stuck to you!") - return - B.forceMove(src) - to_chat(user, "You set [B] on the machine.") - nanomanager.update_uis(src) // update all UIs attached to src - if(!icon_beaker) - icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position. - icon_beaker.pixel_x = rand(-10,5) - overlays += icon_beaker - return - -/obj/machinery/chem_dispenser/attackby(obj/item/weapon/B, mob/user, params) - ..() - if(istype(B, /obj/item/device/multitool)) - if(hackedcheck == 0) - to_chat(user, hack_message) - dispensable_reagents += hacked_reagents - hackedcheck = 1 - return - - else - to_chat(user, unhack_message) - dispensable_reagents -= hacked_reagents - hackedcheck = 0 - return - -/obj/machinery/chem_dispenser/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/chem_dispenser/attack_ghost(mob/user) - return attack_hand(user) - -/obj/machinery/chem_dispenser/attack_hand(mob/user) - if(stat & BROKEN) - return - - ui_interact(user) - -/obj/machinery/chem_dispenser/soda - icon_state = "soda_dispenser" - name = "soda fountain" - desc = "A drink fabricating machine, capable of producing many sugary drinks with just one touch." - ui_title = "Soda Dispens-o-matic" - energy = 100 - max_energy = 100 - dispensable_reagents = list("water", "ice", "milk", "soymilk", "coffee", "tea", "hot_coco", "cola", "spacemountainwind", "dr_gibb", "space_up", - "tonic", "sodawater", "lemon_lime", "grapejuice", "sugar", "orangejuice", "lemonjuice", "limejuice", "tomatojuice", "banana", - "watermelonjuice", "carrotjuice", "potato", "berryjuice") - hack_message = "You change the mode from 'McNano' to 'Pizza King'." - unhack_message = "You change the mode from 'Pizza King' to 'McNano'." - hacked_reagents = list("thirteenloko") - -/obj/machinery/chem_dispenser/beer - icon_state = "booze_dispenser" - name = "booze dispenser" - ui_title = "Booze Portal 9001" - energy = 100 - max_energy = 100 - desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one." - dispensable_reagents = list("ice", "cream", "cider", "beer", "kahlua", "whiskey", "wine", "vodka", "gin", "rum", "tequila", "vermouth", "cognac", "ale", "mead", "synthanol") - hack_message = "You disable the 'nanotrasen-are-cheap-bastards' lock, enabling hidden and very expensive boozes." - unhack_message = "You re-enable the 'nanotrasen-are-cheap-bastards' lock, disabling hidden and very expensive boozes." - hacked_reagents = list("goldschlager", "patron", "absinthe", "ethanol", "nothing") - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/obj/machinery/chem_dispenser/constructable - name = "portable chem dispenser" - icon = 'icons/obj/chemical.dmi' - icon_state = "minidispenser" - energy = 5 - max_energy = 5 - amount = 5 - recharge_delay = 10 - dispensable_reagents = list() - var/list/special_reagents = list(list("hydrogen", "oxygen", "silicon", "phosphorus", "sulfur", "carbon", "nitrogen", "water"), - list("lithium", "sugar", "copper", "mercury", "sodium","iodine","bromine"), - list("ethanol", "chlorine", "potassium", "aluminum","plasma", "radium", "fluorine", "iron", "silver"), - list("oil", "ash", "acetone", "saltpetre", "ammonia", "diethylamine", "fuel")) - -/obj/machinery/chem_dispenser/constructable/New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/cell/super(null) - RefreshParts() - -/obj/machinery/chem_dispenser/constructable/upgraded/New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor/super(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/cell/hyper(null) - RefreshParts() - -/obj/machinery/chem_dispenser/constructable/RefreshParts() - var/time = 0 - var/temp_energy = 0 - var/i - for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) - temp_energy += M.rating - temp_energy-- - max_energy = temp_energy * 5 //max energy = (bin1.rating + bin2.rating - 1) * 5, 5 on lowest 25 on highest - for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) - time += C.rating - for(var/obj/item/weapon/stock_parts/cell/P in component_parts) - time += round(P.maxcharge, 10000) / 10000 - recharge_delay = 10 / (time/2) //delay between recharges, double the usual time on lowest 33% less than usual on highest - for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) - for(i=1, i<=M.rating, i++) - dispensable_reagents = sortList(dispensable_reagents | special_reagents[i]) - -/obj/machinery/chem_dispenser/constructable/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/reagent_containers/glass)) - if(panel_open) - to_chat(user, "Close the maintenance panel first.") - return - ..() - else - ..() - - if(default_deconstruction_screwdriver(user, "minidispenser-o", "minidispenser", I)) - return - - if(exchange_parts(user, I)) - return - - if(istype(I, /obj/item/weapon/wrench)) - playsound(src, 'sound/items/Ratchet.ogg', 50, 1) - if(anchored) - anchored = 0 - to_chat(user, "[src] can now be moved.") - else if(!anchored) - anchored = 1 - to_chat(user, "[src] is now secured.") - - if(panel_open) - if(istype(I, /obj/item/weapon/crowbar)) - if(beaker) - var/obj/item/weapon/reagent_containers/glass/B = beaker - B.forceMove(loc) - beaker = null - default_deconstruction_crowbar(I) - return 1 - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/obj/machinery/chem_master - name = "\improper ChemMaster 3000" - density = 1 - anchored = 1 - icon = 'icons/obj/chemical.dmi' - icon_state = "mixer0" - use_power = 1 - idle_power_usage = 20 - var/obj/item/weapon/reagent_containers/beaker = null - var/obj/item/weapon/storage/pill_bottle/loaded_pill_bottle = null - var/mode = 0 - var/condi = 0 - var/useramount = 30 // Last used amount - var/pillamount = 10 - var/patchamount = 10 - var/bottlesprite = "bottle" - var/pillsprite = "1" - var/client/has_sprites = list() - var/printing = null - -/obj/machinery/chem_master/New() - create_reagents(100) - overlays += "waitlight" - -/obj/machinery/chem_master/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if(prob(50)) - qdel(src) - return - -/obj/machinery/chem_master/blob_act() - if(prob(50)) - qdel(src) - -/obj/machinery/chem_master/power_change() - if(powered()) - stat &= ~NOPOWER - else - spawn(rand(0, 15)) - stat |= NOPOWER - -/obj/machinery/chem_master/attackby(obj/item/weapon/B, mob/user, params) - - if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B, /obj/item/weapon/reagent_containers/food/drinks/drinkingglass)) - - if(beaker) - to_chat(user, "A beaker is already loaded into the machine.") - return - if(!user.drop_item()) - to_chat(user, "[B] is stuck to you!") - return - beaker = B - B.forceMove(src) - to_chat(user, "You add the beaker to the machine!") - nanomanager.update_uis(src) - icon_state = "mixer1" - - else if(istype(B, /obj/item/weapon/storage/pill_bottle)) - - if(loaded_pill_bottle) - to_chat(user, "A pill bottle is already loaded into the machine.") - return - - if(!user.drop_item()) - to_chat(user, "[B] is stuck to you!") - return - loaded_pill_bottle = B - B.forceMove(src) - to_chat(user, "You add the pill bottle into the dispenser slot!") - nanomanager.update_uis(src) - return - -/obj/machinery/chem_master/Topic(href, href_list) - if(..()) - return 1 - - add_fingerprint(usr) - usr.set_machine(src) - - - if(href_list["ejectp"]) - if(loaded_pill_bottle) - loaded_pill_bottle.forceMove(loc) - loaded_pill_bottle = null - else if(href_list["close"]) - usr << browse(null, "window=chem_master") - onclose(usr, "chem_master") - usr.unset_machine() - return - - if(href_list["print_p"]) - if(!(printing)) - printing = 1 - visible_message("[src] rattles and prints out a sheet of paper.") - playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc) - P.info = "
Chemical Analysis

" - P.info += "Time of analysis: [worldtime2text(world.time)]

" - P.info += "Chemical name: [href_list["name"]]
" - if(href_list["name"] == "Blood") - var/datum/reagents/R = beaker.reagents - var/datum/reagent/blood/G - for(var/datum/reagent/F in R.reagent_list) - if(F.name == href_list["name"]) - G = F - break - var/B = G.data["blood_type"] - var/C = G.data["blood_DNA"] - P.info += "Description:
Blood Type: [B]
DNA: [C]" - else - P.info += "Description: [href_list["desc"]]" - P.info += "

Notes:
" - P.name = "Chemical Analysis - [href_list["name"]]" - printing = null - - if(beaker) - var/datum/reagents/R = beaker.reagents - if(href_list["analyze"]) - var/dat = "" - if(!condi) - if(href_list["name"] == "Blood") - var/datum/reagent/blood/G - for(var/datum/reagent/F in R.reagent_list) - if(F.name == href_list["name"]) - G = F - break - var/A = G.name - var/B = G.data["blood_type"] - var/C = G.data["blood_DNA"] - dat += "Chemmaster 3000Chemical infos:

Name:
[A]

Description:
Blood Type: [B]
DNA: [C]" - else - dat += "Chemmaster 3000Chemical infos:

Name:
[href_list["name"]]

Description:
[href_list["desc"]]" - dat += "

(Print Analysis)
" - dat += "(Back)" - else - dat += "Condimaster 3000Condiment infos:

Name:
[href_list["name"]]

Description:
[href_list["desc"]]


(Back)" - usr << browse(dat, "window=chem_master;size=575x400") - return - - else if(href_list["add"]) - - if(href_list["amount"]) - var/id = href_list["add"] - var/amount = text2num(href_list["amount"]) - R.trans_id_to(src, id, amount) - - else if(href_list["addcustom"]) - - var/id = href_list["addcustom"] - useramount = input("Select the amount to transfer.", 30, useramount) as num - useramount = isgoodnumber(useramount) - Topic(null, list("amount" = "[useramount]", "add" = "[id]")) - - else if(href_list["remove"]) - - if(href_list["amount"]) - var/id = href_list["remove"] - var/amount = text2num(href_list["amount"]) - if(mode) - reagents.trans_id_to(beaker, id, amount) - else - reagents.remove_reagent(id, amount) - - - else if(href_list["removecustom"]) - - var/id = href_list["removecustom"] - useramount = input("Select the amount to transfer.", 30, useramount) as num - useramount = isgoodnumber(useramount) - Topic(null, list("amount" = "[useramount]", "remove" = "[id]")) - - else if(href_list["toggle"]) - mode = !mode - - else if(href_list["main"]) - attack_hand(usr) - return - else if(href_list["eject"]) - if(beaker) - beaker.forceMove(get_turf(src)) - beaker = null - reagents.clear_reagents() - icon_state = "mixer0" - else if(href_list["createpill"] || href_list["createpill_multiple"]) - if(!condi) - var/count = 1 - if(href_list["createpill_multiple"]) - count = input("Select the number of pills to make.", 10, pillamount) as num|null - if(count == null) - return - count = isgoodnumber(count) - if(count > 20) count = 20 //Pevent people from creating huge stacks of pills easily. Maybe move the number to defines? - if(count <= 0) return - var/amount_per_pill = reagents.total_volume/count - if(amount_per_pill > 50) amount_per_pill = 50 - var/name = input(usr,"Name:","Name your pill!","[reagents.get_master_reagent_name()] ([amount_per_pill]u)") as text|null - if(!name) - return - name = reject_bad_text(name) - while(count--) - var/obj/item/weapon/reagent_containers/food/pill/P = new/obj/item/weapon/reagent_containers/food/pill(loc) - if(!name) name = reagents.get_master_reagent_name() - P.name = "[name] pill" - P.pixel_x = rand(-7, 7) //random position - P.pixel_y = rand(-7, 7) - P.icon_state = "pill"+pillsprite - reagents.trans_to(P,amount_per_pill) - if(loaded_pill_bottle) - if(loaded_pill_bottle.contents.len < loaded_pill_bottle.storage_slots) - P.forceMove(loaded_pill_bottle) - updateUsrDialog() - else - var/name = input(usr,"Name:","Name your bag!",reagents.get_master_reagent_name()) as text|null - if(!name) - return - name = reject_bad_text(name) - var/obj/item/weapon/reagent_containers/food/condiment/pack/P = new/obj/item/weapon/reagent_containers/food/condiment/pack(loc) - if(!name) name = reagents.get_master_reagent_name() - P.originalname = name - P.name = "[name] pack" - P.desc = "A small condiment pack. The label says it contains [name]." - reagents.trans_to(P,10) - else if(href_list["createpatch"] || href_list["createpatch_multiple"]) - if(!condi) - var/count = 1 - if(href_list["createpatch_multiple"]) - count = input("Select the number of patches to make.", 10, patchamount) as num|null - if(count == null) - return - count = isgoodnumber(count) - if(!count || count <= 0) - return - if(count > 20) count = 20 //Pevent people from creating huge stacks of patches easily. Maybe move the number to defines? - var/amount_per_patch = reagents.total_volume/count - if(amount_per_patch > 40) amount_per_patch = 40 - var/name = input(usr,"Name:","Name your patch!","[reagents.get_master_reagent_name()] ([amount_per_patch]u)") as text|null - if(!name) - return - name = reject_bad_text(name) - var/is_medical_patch = chemical_safety_check(reagents) - while(count--) - var/obj/item/weapon/reagent_containers/food/pill/patch/P = new/obj/item/weapon/reagent_containers/food/pill/patch(loc) - if(!name) name = reagents.get_master_reagent_name() - P.name = "[name] patch" - P.pixel_x = rand(-7, 7) //random position - P.pixel_y = rand(-7, 7) - reagents.trans_to(P,amount_per_patch) - if(is_medical_patch) - P.instant_application = 1 - P.icon_state = "bandaid_med" - else if(href_list["createbottle"]) - if(!condi) - var/name = input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name()) as text|null - if(!name) - return - name = reject_bad_text(name) - var/obj/item/weapon/reagent_containers/glass/bottle/P = new/obj/item/weapon/reagent_containers/glass/bottle(loc) - if(!name) name = reagents.get_master_reagent_name() - P.name = "[name] bottle" - P.pixel_x = rand(-7, 7) //random position - P.pixel_y = rand(-7, 7) - P.icon_state = bottlesprite - reagents.trans_to(P,30) - else - var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(loc) - reagents.trans_to(P,50) - else if(href_list["change_pill"]) - #define MAX_PILL_SPRITE 20 //max icon state of the pill sprites - var/dat = "" - var/j = 0 - for(var/i = 1 to MAX_PILL_SPRITE) - j++ - if(j == 1) - dat += "" - dat += "" - if(j == 5) - dat += "" - j = 0 - dat += "
" - usr << browse(dat, "window=chem_master_iconsel;size=225x193") - return - else if(href_list["change_bottle"]) - var/dat = "" - var/j = 0 - for(var/i in list("bottle", "small_bottle", "wide_bottle", "round_bottle")) - j++ - if(j == 1) - dat += "" - dat += "" - if(j == 5) - dat += "" - j = 0 - dat += "
" - usr << browse(dat, "window=chem_master_iconsel;size=225x193") - return - else if(href_list["pill_sprite"]) - pillsprite = href_list["pill_sprite"] - usr << browse(null, "window=chem_master_iconsel") - else if(href_list["bottle_sprite"]) - bottlesprite = href_list["bottle_sprite"] - usr << browse(null, "window=chem_master_iconsel") - - nanomanager.update_uis(src) - return - -/obj/machinery/chem_master/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/chem_master/attack_ghost(mob/user) - return attack_hand(user) - -/obj/machinery/chem_master/attack_hand(mob/user) - if(..()) - return 1 - ui_interact(user) - return - -/obj/machinery/chem_master/ui_interact(mob/user, ui_key="main", datum/nanoui/ui = null, force_open = 1) - - var/datum/asset/chem_master/assets = get_asset_datum(/datum/asset/chem_master) - assets.send(user) - - var/data = list() - - data["condi"] = condi - data["loaded_pill_bottle"] = (loaded_pill_bottle ? 1 : 0) - if(loaded_pill_bottle) - data["loaded_pill_bottle_contents_len"] = loaded_pill_bottle.contents.len - data["loaded_pill_bottle_storage_slots"] = loaded_pill_bottle.storage_slots - - data["beaker"] = (beaker ? 1 : 0) - if(beaker) - var/list/beaker_reagents_list = list() - data["beaker_reagents"] = beaker_reagents_list - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beaker_reagents_list[++beaker_reagents_list.len] = list("name" = R.name, "volume" = R.volume, "id" = R.id, "description" = R.description) - var/list/buffer_reagents_list = list() - data["buffer_reagents"] = buffer_reagents_list - for(var/datum/reagent/R in reagents.reagent_list) - buffer_reagents_list[++buffer_reagents_list.len] = list("name" = R.name, "volume" = R.volume, "id" = R.id, "description" = R.description) - - data["pillsprite"] = pillsprite - data["bottlesprite"] = bottlesprite - data["mode"] = mode - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "chem_master.tmpl", name, 575, 400) - ui.set_initial_data(data) - ui.open() - -/obj/machinery/chem_master/proc/isgoodnumber(num) - if(isnum(num)) - if(num > 200) - num = 200 - else if(num < 0) - num = 1 - else - num = round(num) - return num - else - return 0 - -/obj/machinery/chem_master/proc/chemical_safety_check(datum/reagents/R) - var/all_safe = 1 - for(var/datum/reagent/A in R.reagent_list) - if(!safe_chem_list.Find(A.id)) - all_safe = 0 - return all_safe - -/obj/machinery/chem_master/condimaster - name = "\improper CondiMaster 3000" - condi = 1 - -/obj/machinery/chem_master/constructable - name = "ChemMaster 2999" - desc = "Used to seperate chemicals and distribute them in a variety of forms." - -/obj/machinery/chem_master/constructable/New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/chem_master(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null) - -/obj/machinery/chem_master/constructable/attackby(obj/item/B, mob/user, params) - - if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", B)) - if(beaker) - beaker.forceMove(get_turf(src)) - beaker = null - reagents.clear_reagents() - if(loaded_pill_bottle) - loaded_pill_bottle.forceMove(get_turf(src)) - loaded_pill_bottle = null - return - - if(exchange_parts(user, B)) - return - - if(panel_open) - if(istype(B, /obj/item/weapon/crowbar)) - default_deconstruction_crowbar(B) - return 1 - else - to_chat(user, "You can't use the [name] while it's panel is opened!") - return 1 - else - ..() - -/obj/machinery/reagentgrinder - - name = "\improper All-In-One Grinder" - icon = 'icons/obj/kitchen.dmi' - icon_state = "juicer1" - layer = 2.9 - density = 1 - anchored = 1 - use_power = 1 - idle_power_usage = 5 - active_power_usage = 100 - var/inuse = 0 - var/obj/item/weapon/reagent_containers/beaker = null - var/limit = 10 - - //IMPORTANT NOTE! A negative number is a multiplier, a positive number is a flat amount to add. 0 means equal to the amount of the original reagent - var/list/blend_items = list ( - - //Sheets - /obj/item/stack/sheet/mineral/plasma = list("plasma_dust" = 20), - /obj/item/stack/sheet/mineral/uranium = list("uranium" = 20), - /obj/item/stack/sheet/mineral/bananium = list("banana" = 20), - /obj/item/stack/sheet/mineral/tranquillite = list("nothing" = 20), - /obj/item/stack/sheet/mineral/silver = list("silver" = 20), - /obj/item/stack/sheet/mineral/gold = list("gold" = 20), - /obj/item/weapon/grown/novaflower = list("capsaicin" = 0), - - //archaeology! - ///obj/item/weapon/rocksliver = list("ground_rock" = 50), - - - //All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.! - /obj/item/weapon/reagent_containers/food = list(), - /obj/item/weapon/reagent_containers/honeycomb = list() - ) - - var/list/blend_tags = list ( - "nettle" = list("sacid" = 0), - "deathnettle" = list("facid" = 0), - "soybeans" = list("soymilk" = 0), - "tomato" = list("ketchup" = 0), - "wheat" = list("flour" = -5), - "rice" = list("rice" = -5), - "cherries" = list("cherryjelly" = 0), - ) - - var/list/juice_items = list ( - /obj/item/weapon/reagent_containers/food/snacks/watermelonslice = list("watermelonjuice" = 0), - ) - - var/list/juice_tags = list ( - "tomato" = list("tomatojuice" = 0), - "carrot" = list("carrotjuice" = 0), - "berries" = list("berryjuice" = 0), - "banana" = list("banana" = 0), - "potato" = list("potato" = 0), - "lemon" = list("lemonjuice" = 0), - "orange" = list("orangejuice" = 0), - "lime" = list("limejuice" = 0), - "poisonberries" = list("poisonberryjuice" = 0), - "grapes" = list("grapejuice" = 0), - "corn" = list("cornoil" = 0), - ) - - var/list/holdingitems = list() - -/obj/machinery/reagentgrinder/New() - ..() - beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) - return - -/obj/machinery/reagentgrinder/update_icon() - icon_state = "juicer"+num2text(!isnull(beaker)) - return - -/obj/machinery/reagentgrinder/attackby(obj/item/O, mob/user, params) - - if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ - istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \ - istype(O,/obj/item/weapon/reagent_containers/food/drinks/shaker)) - - if(beaker) - return 1 - else - if(!user.drop_item()) - to_chat(user, "[O] is stuck to you!") - return - beaker = O - O.forceMove(src) - update_icon() - updateUsrDialog() - return 0 - - if(holdingitems && holdingitems.len >= limit) - to_chat(usr, "The machine cannot hold anymore items.") - return 1 - - //Fill machine with a plantbag! - if(istype(O, /obj/item/weapon/storage/bag/plants)) - var/obj/item/weapon/storage/bag/plants/PB = O - for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in PB.contents) - PB.remove_from_storage(G, src) - holdingitems += G - if(holdingitems && holdingitems.len >= limit) //Sanity checking so the blender doesn't overfill - to_chat(user, "You empty [PB] into the All-In-One grinder.") - - updateUsrDialog() - return 0 - - - if(!is_type_in_list(O, blend_items) && !is_type_in_list(O, juice_items)) - to_chat(user, "Cannot refine into a reagent.") - return 1 - - user.unEquip(O) - O.forceMove(src) - holdingitems += O - updateUsrDialog() - return 0 - -/obj/machinery/reagentgrinder/attack_ai(mob/user) - return 0 - -/obj/machinery/reagentgrinder/attack_hand(mob/user) - user.set_machine(src) - interact(user) - -/obj/machinery/reagentgrinder/interact(mob/user) // The microwave Menu - var/is_chamber_empty = 0 - var/is_beaker_ready = 0 - var/processing_chamber = "" - var/beaker_contents = "" - var/dat = "" - - if(!inuse) - for(var/obj/item/O in holdingitems) - processing_chamber += "\A [O.name]
" - - if(!processing_chamber) - is_chamber_empty = 1 - processing_chamber = "Nothing." - if(!beaker) - beaker_contents = "No beaker attached.
" - else - is_beaker_ready = 1 - beaker_contents = "The beaker contains:
" - var/anything = 0 - for(var/datum/reagent/R in beaker.reagents.reagent_list) - anything = 1 - beaker_contents += "[R.volume] - [R.name]
" - if(!anything) - beaker_contents += "Nothing
" - - - dat = {" - Processing chamber contains:
- [processing_chamber]
- [beaker_contents]
- "} - if(is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) - dat += "Grind the reagents
" - dat += "Juice the reagents

" - if(holdingitems && holdingitems.len > 0) - dat += "Eject the reagents
" - if(beaker) - dat += "Detach the beaker
" - else - dat += "Please wait..." - user << browse("All-In-One Grinder[dat]", "window=reagentgrinder") - onclose(user, "reagentgrinder") - return - -/obj/machinery/reagentgrinder/Topic(href, href_list) - if(..()) - return - usr.set_machine(src) - switch(href_list["action"]) - if("grind") - grind() - if("juice") - juice() - if("eject") - eject() - if("detach") - detach() - updateUsrDialog() - return - -/obj/machinery/reagentgrinder/proc/detach() - - if(usr.stat != 0) - return - if(!beaker) - return - beaker.forceMove(loc) - beaker = null - update_icon() - -/obj/machinery/reagentgrinder/proc/eject() - - if(usr.stat != 0) - return - if(holdingitems && holdingitems.len == 0) - return - - for(var/obj/item/O in holdingitems) - O.forceMove(loc) - holdingitems -= O - holdingitems = list() - -/obj/machinery/reagentgrinder/proc/is_allowed(obj/item/weapon/reagent_containers/O) - for(var/i in blend_items) - if(istype(O, i)) - return 1 - return 0 - -/obj/machinery/reagentgrinder/proc/get_allowed_by_id(obj/item/weapon/grown/O) - for(var/i in blend_items) - if(istype(O, i)) - return blend_items[i] - -/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_id(obj/item/weapon/reagent_containers/food/snacks/O) - for(var/i in blend_items) - if(istype(O, i)) - return blend_items[i] - -/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_id(obj/item/weapon/reagent_containers/food/snacks/O) - for(var/i in juice_items) - if(istype(O, i)) - return juice_items[i] - -/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_tag(obj/item/weapon/reagent_containers/food/snacks/grown/O) - for(var/i in blend_tags) - if(O.seed.kitchen_tag == i) - return blend_tags[i] - -/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_tag(obj/item/weapon/reagent_containers/food/snacks/grown/O) - for(var/i in juice_tags) - if(O.seed.kitchen_tag == i) - return juice_tags[i] - -/obj/machinery/reagentgrinder/proc/get_grownweapon_amount(obj/item/weapon/grown/O) - if(!istype(O)) - return 5 - else if(O.potency == -1) - return 5 - else - return round(O.potency) - -/obj/machinery/reagentgrinder/proc/get_juice_amount(obj/item/weapon/reagent_containers/food/snacks/grown/O) - if(!istype(O)) - return 5 - else if(O.potency == -1) - return 5 - else - return round(5*sqrt(O.potency)) - -/obj/machinery/reagentgrinder/proc/remove_object(obj/item/O) - holdingitems -= O - qdel(O) - -/obj/machinery/reagentgrinder/proc/juice() - power_change() - if(stat & (NOPOWER|BROKEN)) - return - if(!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) - return - playsound(loc, 'sound/machines/juicer.ogg', 20, 1) - var/offset = prob(50) ? -2 : 2 - animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking - inuse = 1 - spawn(50) - pixel_x = initial(pixel_x) //return to its spot after shaking - inuse = 0 - interact(usr) - //Snacks - for(var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems) - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - - var/allowed = null - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) - allowed = get_allowed_juice_by_tag(O) - else - allowed = get_allowed_juice_by_id(O) - if(isnull(allowed)) - break - - for(var/r_id in allowed) - - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = get_juice_amount(O) - - beaker.reagents.add_reagent(r_id, min(amount, space)) - - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - - remove_object(O) - -/obj/machinery/reagentgrinder/proc/grind() - - power_change() - if(stat & (NOPOWER|BROKEN)) - return - if(!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) - return - playsound(loc, 'sound/machines/blender.ogg', 50, 1) - var/offset = prob(50) ? -2 : 2 - animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking - inuse = 1 - spawn(60) - pixel_x = initial(pixel_x) //return to its spot after shaking - inuse = 0 - interact(usr) - //Snacks and Plants - for(var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems) - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - - var/allowed = null - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) - allowed = get_allowed_snack_by_tag(O) - else - allowed = get_allowed_snack_by_id(O) - if(isnull(allowed)) - break - - for(var/r_id in allowed) - - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - if(amount <= 0) //Negative amounts are multipliers for the reagent amount (Example: "amount = -5" means "reagent_amount * 5") - if(amount == 0) - if(O.reagents != null && O.reagents.has_reagent("nutriment")) - beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("nutriment"), space)) - O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) - if(O.reagents != null && O.reagents.has_reagent("plantmatter")) - beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("plantmatter"), space)) - O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) - else - if(O.reagents != null && O.reagents.has_reagent("nutriment")) - beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("nutriment")*abs(amount)), space)) - O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) - if(O.reagents != null && O.reagents.has_reagent("plantmatter")) - beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("plantmatter")*abs(amount)), space)) - O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) - - else - O.reagents.trans_id_to(beaker, r_id, min(amount, space)) - - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - - if(O.reagents.reagent_list.len == 0) - remove_object(O) - - //Sheets - for(var/obj/item/stack/sheet/O in holdingitems) - var/allowed = get_allowed_by_id(O) - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - for(var/i = 1; i <= round(O.amount, 1); i++) - for(var/r_id in allowed) - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - beaker.reagents.add_reagent(r_id,min(amount, space)) - if(space < amount) - break - if(i == round(O.amount, 1)) - remove_object(O) - break - //Plants - for(var/obj/item/weapon/grown/O in holdingitems) - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/allowed = get_allowed_by_id(O) - for(var/r_id in allowed) - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - if(amount == 0) - if(O.reagents != null && O.reagents.has_reagent(r_id)) - beaker.reagents.add_reagent(r_id,min(O.reagents.get_reagent_amount(r_id), space)) - else - beaker.reagents.add_reagent(r_id,min(amount, space)) - - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - remove_object(O) - - //xenoarch - /*for(var/obj/item/weapon/rocksliver/O in holdingitems) - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/allowed = get_allowed_by_id(O) - for(var/r_id in allowed) - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - beaker.reagents.add_reagent(r_id,min(amount, space), O.geological_data) - - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - remove_object(O)*/ - - //Everything else - Transfers reagents from it into beaker - for(var/obj/item/weapon/reagent_containers/O in holdingitems) - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/amount = O.reagents.total_volume - O.reagents.trans_to(beaker, amount) - if(!O.reagents.total_volume) - remove_object(O) \ No newline at end of file diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm new file mode 100644 index 00000000000..38cfdf4b0ae --- /dev/null +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -0,0 +1,415 @@ +/obj/machinery/reagentgrinder + name = "\improper All-In-One Grinder" + icon = 'icons/obj/kitchen.dmi' + icon_state = "juicer1" + layer = 2.9 + density = 1 + anchored = 1 + use_power = 1 + idle_power_usage = 5 + active_power_usage = 100 + var/inuse = 0 + var/obj/item/weapon/reagent_containers/beaker = null + var/limit = 10 + + //IMPORTANT NOTE! A negative number is a multiplier, a positive number is a flat amount to add. 0 means equal to the amount of the original reagent + var/list/blend_items = list ( + + //Sheets + /obj/item/stack/sheet/mineral/plasma = list("plasma_dust" = 20), + /obj/item/stack/sheet/mineral/uranium = list("uranium" = 20), + /obj/item/stack/sheet/mineral/bananium = list("banana" = 20), + /obj/item/stack/sheet/mineral/tranquillite = list("nothing" = 20), + /obj/item/stack/sheet/mineral/silver = list("silver" = 20), + /obj/item/stack/sheet/mineral/gold = list("gold" = 20), + /obj/item/weapon/grown/novaflower = list("capsaicin" = 0), + + //archaeology! + ///obj/item/weapon/rocksliver = list("ground_rock" = 50), + + + //All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.! + /obj/item/weapon/reagent_containers/food = list(), + /obj/item/weapon/reagent_containers/honeycomb = list() + ) + + var/list/blend_tags = list ( + "nettle" = list("sacid" = 0), + "deathnettle" = list("facid" = 0), + "soybeans" = list("soymilk" = 0), + "tomato" = list("ketchup" = 0), + "wheat" = list("flour" = -5), + "rice" = list("rice" = -5), + "cherries" = list("cherryjelly" = 0), + ) + + var/list/juice_items = list ( + /obj/item/weapon/reagent_containers/food/snacks/watermelonslice = list("watermelonjuice" = 0), + ) + + var/list/juice_tags = list ( + "tomato" = list("tomatojuice" = 0), + "carrot" = list("carrotjuice" = 0), + "berries" = list("berryjuice" = 0), + "banana" = list("banana" = 0), + "potato" = list("potato" = 0), + "lemon" = list("lemonjuice" = 0), + "orange" = list("orangejuice" = 0), + "lime" = list("limejuice" = 0), + "poisonberries" = list("poisonberryjuice" = 0), + "grapes" = list("grapejuice" = 0), + "corn" = list("cornoil" = 0), + ) + + var/list/holdingitems = list() + +/obj/machinery/reagentgrinder/New() + ..() + beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) + return + +/obj/machinery/reagentgrinder/update_icon() + icon_state = "juicer"+num2text(!isnull(beaker)) + return + +/obj/machinery/reagentgrinder/attackby(obj/item/O, mob/user, params) + + if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ + istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \ + istype(O,/obj/item/weapon/reagent_containers/food/drinks/shaker)) + + if(beaker) + return 1 + else + if(!user.drop_item()) + to_chat(user, "[O] is stuck to you!") + return + beaker = O + O.forceMove(src) + update_icon() + updateUsrDialog() + return 0 + + if(holdingitems && holdingitems.len >= limit) + to_chat(usr, "The machine cannot hold anymore items.") + return 1 + + //Fill machine with a plantbag! + if(istype(O, /obj/item/weapon/storage/bag/plants)) + var/obj/item/weapon/storage/bag/plants/PB = O + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in PB.contents) + PB.remove_from_storage(G, src) + holdingitems += G + if(holdingitems && holdingitems.len >= limit) //Sanity checking so the blender doesn't overfill + to_chat(user, "You empty [PB] into the All-In-One grinder.") + + updateUsrDialog() + return 0 + + + if(!is_type_in_list(O, blend_items) && !is_type_in_list(O, juice_items)) + to_chat(user, "Cannot refine into a reagent.") + return 1 + + user.unEquip(O) + O.forceMove(src) + holdingitems += O + updateUsrDialog() + return 0 + +/obj/machinery/reagentgrinder/attack_ai(mob/user) + return 0 + +/obj/machinery/reagentgrinder/attack_hand(mob/user) + user.set_machine(src) + interact(user) + +/obj/machinery/reagentgrinder/interact(mob/user) // The microwave Menu + var/is_chamber_empty = 0 + var/is_beaker_ready = 0 + var/processing_chamber = "" + var/beaker_contents = "" + var/dat = "" + + if(!inuse) + for(var/obj/item/O in holdingitems) + processing_chamber += "\A [O.name]
" + + if(!processing_chamber) + is_chamber_empty = 1 + processing_chamber = "Nothing." + if(!beaker) + beaker_contents = "No beaker attached.
" + else + is_beaker_ready = 1 + beaker_contents = "The beaker contains:
" + var/anything = 0 + for(var/datum/reagent/R in beaker.reagents.reagent_list) + anything = 1 + beaker_contents += "[R.volume] - [R.name]
" + if(!anything) + beaker_contents += "Nothing
" + + + dat = {" + Processing chamber contains:
+ [processing_chamber]
+ [beaker_contents]
+ "} + if(is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) + dat += "Grind the reagents
" + dat += "Juice the reagents

" + if(holdingitems && holdingitems.len > 0) + dat += "Eject the reagents
" + if(beaker) + dat += "Detach the beaker
" + else + dat += "Please wait..." + user << browse("All-In-One Grinder[dat]", "window=reagentgrinder") + onclose(user, "reagentgrinder") + return + +/obj/machinery/reagentgrinder/Topic(href, href_list) + if(..()) + return + usr.set_machine(src) + switch(href_list["action"]) + if("grind") + grind() + if("juice") + juice() + if("eject") + eject() + if("detach") + detach() + updateUsrDialog() + return + +/obj/machinery/reagentgrinder/proc/detach() + + if(usr.stat != 0) + return + if(!beaker) + return + beaker.forceMove(loc) + beaker = null + update_icon() + +/obj/machinery/reagentgrinder/proc/eject() + + if(usr.stat != 0) + return + if(holdingitems && holdingitems.len == 0) + return + + for(var/obj/item/O in holdingitems) + O.forceMove(loc) + holdingitems -= O + holdingitems = list() + +/obj/machinery/reagentgrinder/proc/is_allowed(obj/item/weapon/reagent_containers/O) + for(var/i in blend_items) + if(istype(O, i)) + return 1 + return 0 + +/obj/machinery/reagentgrinder/proc/get_allowed_by_id(obj/item/weapon/grown/O) + for(var/i in blend_items) + if(istype(O, i)) + return blend_items[i] + +/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_id(obj/item/weapon/reagent_containers/food/snacks/O) + for(var/i in blend_items) + if(istype(O, i)) + return blend_items[i] + +/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_id(obj/item/weapon/reagent_containers/food/snacks/O) + for(var/i in juice_items) + if(istype(O, i)) + return juice_items[i] + +/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_tag(obj/item/weapon/reagent_containers/food/snacks/grown/O) + for(var/i in blend_tags) + if(O.seed.kitchen_tag == i) + return blend_tags[i] + +/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_tag(obj/item/weapon/reagent_containers/food/snacks/grown/O) + for(var/i in juice_tags) + if(O.seed.kitchen_tag == i) + return juice_tags[i] + +/obj/machinery/reagentgrinder/proc/get_grownweapon_amount(obj/item/weapon/grown/O) + if(!istype(O)) + return 5 + else if(O.potency == -1) + return 5 + else + return round(O.potency) + +/obj/machinery/reagentgrinder/proc/get_juice_amount(obj/item/weapon/reagent_containers/food/snacks/grown/O) + if(!istype(O)) + return 5 + else if(O.potency == -1) + return 5 + else + return round(5*sqrt(O.potency)) + +/obj/machinery/reagentgrinder/proc/remove_object(obj/item/O) + holdingitems -= O + qdel(O) + +/obj/machinery/reagentgrinder/proc/juice() + power_change() + if(stat & (NOPOWER|BROKEN)) + return + if(!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) + return + playsound(loc, 'sound/machines/juicer.ogg', 20, 1) + var/offset = prob(50) ? -2 : 2 + animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking + inuse = 1 + spawn(50) + pixel_x = initial(pixel_x) //return to its spot after shaking + inuse = 0 + interact(usr) + //Snacks + for(var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems) + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + + var/allowed = null + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) + allowed = get_allowed_juice_by_tag(O) + else + allowed = get_allowed_juice_by_id(O) + if(isnull(allowed)) + break + + for(var/r_id in allowed) + + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + var/amount = get_juice_amount(O) + + beaker.reagents.add_reagent(r_id, min(amount, space)) + + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + + remove_object(O) + +/obj/machinery/reagentgrinder/proc/grind() + + power_change() + if(stat & (NOPOWER|BROKEN)) + return + if(!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) + return + playsound(loc, 'sound/machines/blender.ogg', 50, 1) + var/offset = prob(50) ? -2 : 2 + animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking + inuse = 1 + spawn(60) + pixel_x = initial(pixel_x) //return to its spot after shaking + inuse = 0 + interact(usr) + //Snacks and Plants + for(var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems) + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + + var/allowed = null + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) + allowed = get_allowed_snack_by_tag(O) + else + allowed = get_allowed_snack_by_id(O) + if(isnull(allowed)) + break + + for(var/r_id in allowed) + + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + var/amount = allowed[r_id] + if(amount <= 0) //Negative amounts are multipliers for the reagent amount (Example: "amount = -5" means "reagent_amount * 5") + if(amount == 0) + if(O.reagents != null && O.reagents.has_reagent("nutriment")) + beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("nutriment"), space)) + O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) + if(O.reagents != null && O.reagents.has_reagent("plantmatter")) + beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("plantmatter"), space)) + O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) + else + if(O.reagents != null && O.reagents.has_reagent("nutriment")) + beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("nutriment")*abs(amount)), space)) + O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) + if(O.reagents != null && O.reagents.has_reagent("plantmatter")) + beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("plantmatter")*abs(amount)), space)) + O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) + + else + O.reagents.trans_id_to(beaker, r_id, min(amount, space)) + + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + + if(O.reagents.reagent_list.len == 0) + remove_object(O) + + //Sheets + for(var/obj/item/stack/sheet/O in holdingitems) + var/allowed = get_allowed_by_id(O) + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + for(var/i = 1; i <= round(O.amount, 1); i++) + for(var/r_id in allowed) + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + var/amount = allowed[r_id] + beaker.reagents.add_reagent(r_id,min(amount, space)) + if(space < amount) + break + if(i == round(O.amount, 1)) + remove_object(O) + break + //Plants + for(var/obj/item/weapon/grown/O in holdingitems) + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + var/allowed = get_allowed_by_id(O) + for(var/r_id in allowed) + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + var/amount = allowed[r_id] + if(amount == 0) + if(O.reagents != null && O.reagents.has_reagent(r_id)) + beaker.reagents.add_reagent(r_id,min(O.reagents.get_reagent_amount(r_id), space)) + else + beaker.reagents.add_reagent(r_id,min(amount, space)) + + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + remove_object(O) + + //xenoarch + /*for(var/obj/item/weapon/rocksliver/O in holdingitems) + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + var/allowed = get_allowed_by_id(O) + for(var/r_id in allowed) + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + var/amount = allowed[r_id] + beaker.reagents.add_reagent(r_id,min(amount, space), O.geological_data) + + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + remove_object(O)*/ + + //Everything else - Transfers reagents from it into beaker + for(var/obj/item/weapon/reagent_containers/O in holdingitems) + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + var/amount = O.reagents.total_volume + O.reagents.trans_to(beaker, amount) + if(!O.reagents.total_volume) + remove_object(O) \ No newline at end of file diff --git a/paradise.dme b/paradise.dme index 0d341f894de..dbbd8cb9b87 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1838,9 +1838,11 @@ #include "code\modules\reagents\chemistry\readme.dm" #include "code\modules\reagents\chemistry\reagents.dm" #include "code\modules\reagents\chemistry\recipes.dm" +#include "code\modules\reagents\chemistry\machinery\chem_dispenser.dm" #include "code\modules\reagents\chemistry\machinery\chem_heater.dm" -#include "code\modules\reagents\chemistry\machinery\chemistry_machinery.dm" +#include "code\modules\reagents\chemistry\machinery\chem_master.dm" #include "code\modules\reagents\chemistry\machinery\pandemic.dm" +#include "code\modules\reagents\chemistry\machinery\reagentgrinder.dm" #include "code\modules\reagents\chemistry\reagents\admin.dm" #include "code\modules\reagents\chemistry\reagents\alcohol.dm" #include "code\modules\reagents\chemistry\reagents\blob.dm" From 49a52fe3f36ccdc7ddc029699fac695fdf8d997c Mon Sep 17 00:00:00 2001 From: Twinmold Date: Sun, 6 Nov 2016 21:21:19 -0600 Subject: [PATCH 028/193] Additional Sprites :cl:Twinmold Adds: Missing drask jumpskirt sprites. Adds: Missing Riot Helmet sprite for drask. Fixes: Inconsistency with security sprite (gold bar was on both side views, should only be on one). /:cl: --- icons/mob/species/drask/helmet.dmi | Bin 47354 -> 48023 bytes icons/mob/species/drask/uniform.dmi | Bin 315980 -> 326463 bytes icons/mob/uniform.dmi | Bin 345081 -> 345065 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/species/drask/helmet.dmi b/icons/mob/species/drask/helmet.dmi index 9e8953e4c4f3a106fd84fe771b1deacf4a5b1c6b..9c4ccd89c4b1766852ace1336ab461715fabc5e2 100644 GIT binary patch delta 11147 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 delta 10471 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

>%Q)!9r>#UE8xJo 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

N)PO>do`rnVhmR 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

UGsrmVk3Uwh= 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

5`h@rJmE~frxMq5hR55v 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

QhmUm>70Len`={3I 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 literal 315980 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�+D$?w)YtGu|&%R-FtaTgYB0K-qT|up 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 z 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

c_n5yfN*;1z9O)K?v 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 O_*0O1CXJLbdGlW$A8Km= diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 568fcce444332796dbb266e4ed105a9358779e65..74ef949dd10997d83cea08c03865f10a397473ba 100644 GIT binary patch delta 24208 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 ZP$v!cX`H14C|m)7JbkRGT&`sK_J0h~*6RQO delta 24203 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 Date: Sun, 6 Nov 2016 21:36:24 -0800 Subject: [PATCH 029/193] Fixes defib leaving people in deadchat, n2o paralyse time --- code/game/objects/items/weapons/defib.dm | 10 ++++++---- .../mob/living/carbon/human/species/plasmaman.dm | 2 +- .../modules/mob/living/carbon/human/species/species.dm | 6 ++++-- code/modules/mob/living/death.dm | 2 +- code/modules/mob/living/stat_states.dm | 5 +++-- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index a4420872e5e..eda6d74b296 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -408,8 +408,9 @@ H.adjustBruteLoss(tobehealed) user.visible_message("[defib] pings: Resuscitation successful.") playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0) - H.stat = 1 - H.update_revive() + H.update_revive(FALSE) + H.KnockOut(FALSE) + H.Paralyse(5) H.emote("gasp") if(tplus > tloss) H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100)))) @@ -527,8 +528,9 @@ H.adjustBruteLoss(tobehealed) user.visible_message("[user] pings: Resuscitation successful.") playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0) - H.stat = UNCONSCIOUS - H.update_revive() + H.update_revive(FALSE) + H.KnockOut(FALSE) + H.Paralyse(5) H.emote("gasp") if(tplus > tloss) H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100)))) diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index 49d6d7fe245..5fe7d44ab6d 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -189,7 +189,7 @@ if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit H.Paralyse(3) // 3 gives them one second to wake up and run away a bit! if(SA_pp > SA_sleep_min) // Enough to make us sleep as well - H.AdjustSleeping(2, bound_lower = 0, bound_upper = 10) + H.AdjustSleeping(8, bound_lower = 0, bound_upper = 10) else if(SA_pp > 0.15) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning if(prob(20)) spawn(0) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 7b91d51261c..2af29aefe72 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -305,7 +305,7 @@ if(!H.co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so. H.co2overloadtime = world.time else if(world.time - H.co2overloadtime > 120) - H.Paralyse(3) + H.Paralyse(5) H.adjustOxyLoss(3) // Lets hurt em a little, let them know we mean business if(world.time - H.co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good! H.adjustOxyLoss(8) @@ -314,6 +314,7 @@ H.emote("cough") else H.clear_alert("co2") + H.co2overloadtime = 0 if(atmos_requirements["min_co2"]) //species breathes this gas, so they got their air H.failed_last_breath = 0 H.adjustOxyLoss(-5) @@ -332,7 +333,8 @@ if(SA_pp > atmos_requirements["sa_para"]) // Enough to make us paralysed for a bit H.Paralyse(3) // 3 gives them one second to wake up and run away a bit! if(SA_pp > atmos_requirements["sa_sleep"]) // Enough to make us sleep as well - H.AdjustSleeping(2, bound_lower = 0, bound_upper = 10) + // This value is large because breaths are taken only once every 4 life ticks. + H.AdjustSleeping(8, bound_lower = 0, bound_upper = 10) else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning if(prob(20)) spawn(0) diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index e17d9af6250..c5ce705ba17 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -3,4 +3,4 @@ clear_fullscreens() update_action_buttons_icon() - ..(gibbed) \ No newline at end of file + ..(gibbed) diff --git a/code/modules/mob/living/stat_states.dm b/code/modules/mob/living/stat_states.dm index 49c91a10d99..f04196f9fc9 100644 --- a/code/modules/mob/living/stat_states.dm +++ b/code/modules/mob/living/stat_states.dm @@ -35,7 +35,7 @@ // death() is used to make a mob die // handles revival through other means than cloning or adminbus (defib, IPC repair) -/mob/living/proc/update_revive() +/mob/living/proc/update_revive(updating = TRUE) if(stat != DEAD) return if(!can_be_revived()) @@ -45,6 +45,7 @@ dead_mob_list -= src living_mob_list += src timeofdeath = null - update_canmove() + if(updating) + update_canmove() // update_blind_effects() updatehealth() From 03bd253bc749ed1af11f539f057d7d7e3f177126 Mon Sep 17 00:00:00 2001 From: Twinmold Date: Mon, 7 Nov 2016 04:54:58 -0600 Subject: [PATCH 030/193] CE's Ass Doesn't look as Square (Free) Simply changes the Chief Engineer's back sprite to not have such a square ass. Pointed out by FreeStylaLT. --- icons/mob/species/drask/uniform.dmi | Bin 326463 -> 326450 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/species/drask/uniform.dmi b/icons/mob/species/drask/uniform.dmi index f98777684dd6ceba22ef4cdc1c082cb29647327a..6610948f64147be2df6cd8caba90cac87dc5164a 100644 GIT binary patch delta 6352 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 f{BPy|k`EE5P}u`gkUkg_D% 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 From ce7c6a93660e794c87aa60be63a855d68b442749 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Mon, 7 Nov 2016 16:59:57 -0800 Subject: [PATCH 031/193] Repaths humans as simplemobs, removes organs --- html/changelog.html | 29 +++++++++++++++++++++++ html/changelogs/.all_changelog.yml | 21 ++++++++++++++++ html/changelogs/AutoChangeLog-pr-5601.yml | 4 ---- html/changelogs/AutoChangeLog-pr-5811.yml | 7 ------ html/changelogs/AutoChangeLog-pr-5826.yml | 4 ---- html/changelogs/AutoChangeLog-pr-5831.yml | 4 ---- html/changelogs/AutoChangeLog-pr-5845.yml | 5 ---- html/changelogs/AutoChangeLog-pr-5846.yml | 6 ----- 8 files changed, 50 insertions(+), 30 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5601.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-5811.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-5826.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-5831.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-5845.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-5846.yml diff --git a/html/changelog.html b/html/changelog.html index 2d41f163168..afc90835472 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,35 @@ -->

+

07 November 2016

+

Crazylemon updated:

+
    +
  • Status effects should work a little more consistently now
  • +
+

Crazylemon64 updated:

+
    +
  • The mech-mounted plasma cutter can now be constructed again
  • +
  • Space pod lasers can now be constructed again
  • +
+

Fox McCloud updated:

+
    +
  • Fixes hunters not being weakened when crashing into a shield/wall
  • +
  • Fixes xeno stuns half the time intended
  • +
  • Fixes stopping, dropping, and rolling not properly weakening Xenos/Hulks
  • +
+

KasparoVy updated:

+
    +
  • Fixes a bug where changing your alt head required two icon updates to show.
  • +
  • Fixes a bug where you couldn't choose head marking styles that would ordinarily be available regardless of your alt head.
  • +
  • Fixes a bug where Tajara couldn't choose undergarments.
  • +
  • Resolves an issue with the Vulpkanin Jagged hairstyle missing a pixel.
  • +
+

Twinmold93 updated:

+
    +
  • Fixes a runtime issue caused by using the detective's scanner on the space hotel cleaver.
  • +
  • Scrubber pipe missing segment behind the operating theatres.
  • +
+

23 October 2016

KasparoVy updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 7f682f24250..0ca6343017d 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3048,3 +3048,24 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. in sprite_accessories.dm. - imageadd: Adds mask sprites tweaked to fit the new Unathi alternate head to go along with the new alt. head mask fitting system. +2016-11-07: + Crazylemon: + - tweak: Status effects should work a little more consistently now + Crazylemon64: + - bugfix: The mech-mounted plasma cutter can now be constructed again + - bugfix: Space pod lasers can now be constructed again + Fox McCloud: + - bugfix: Fixes hunters not being weakened when crashing into a shield/wall + - bugfix: Fixes xeno stuns half the time intended + - bugfix: Fixes stopping, dropping, and rolling not properly weakening Xenos/Hulks + KasparoVy: + - bugfix: Fixes a bug where changing your alt head required two icon updates to + show. + - bugfix: Fixes a bug where you couldn't choose head marking styles that would ordinarily + be available regardless of your alt head. + - bugfix: Fixes a bug where Tajara couldn't choose undergarments. + - bugfix: Resolves an issue with the Vulpkanin Jagged hairstyle missing a pixel. + Twinmold93: + - bugfix: Fixes a runtime issue caused by using the detective's scanner on the space + hotel cleaver. + - bugfix: Scrubber pipe missing segment behind the operating theatres. diff --git a/html/changelogs/AutoChangeLog-pr-5601.yml b/html/changelogs/AutoChangeLog-pr-5601.yml deleted file mode 100644 index cd74a767312..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5601.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Crazylemon -delete-after: True -changes: - - tweak: "Status effects should work a little more consistently now" diff --git a/html/changelogs/AutoChangeLog-pr-5811.yml b/html/changelogs/AutoChangeLog-pr-5811.yml deleted file mode 100644 index 33d9eb32a8b..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5811.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: KasparoVy -delete-after: True -changes: - - bugfix: "Fixes a bug where changing your alt head required two icon updates to show." - - bugfix: "Fixes a bug where you couldn't choose head marking styles that would ordinarily be available regardless of your alt head." - - bugfix: "Fixes a bug where Tajara couldn't choose undergarments." - - bugfix: "Resolves an issue with the Vulpkanin Jagged hairstyle missing a pixel." diff --git a/html/changelogs/AutoChangeLog-pr-5826.yml b/html/changelogs/AutoChangeLog-pr-5826.yml deleted file mode 100644 index 62bc989c620..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5826.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Twinmold93 -delete-after: True -changes: - - bugfix: "Fixes a runtime issue caused by using the detective's scanner on the space hotel cleaver." diff --git a/html/changelogs/AutoChangeLog-pr-5831.yml b/html/changelogs/AutoChangeLog-pr-5831.yml deleted file mode 100644 index deea7aa729e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5831.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Twinmold93 -delete-after: True -changes: - - bugfix: "Scrubber pipe missing segment behind the operating theatres." diff --git a/html/changelogs/AutoChangeLog-pr-5845.yml b/html/changelogs/AutoChangeLog-pr-5845.yml deleted file mode 100644 index e982c917c18..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5845.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Crazylemon64 -delete-after: True -changes: - - bugfix: "The mech-mounted plasma cutter can now be constructed again" - - bugfix: "Space pod lasers can now be constructed again" diff --git a/html/changelogs/AutoChangeLog-pr-5846.yml b/html/changelogs/AutoChangeLog-pr-5846.yml deleted file mode 100644 index d621028a26b..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5846.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Fox McCloud -delete-after: True -changes: - - bugfix: "Fixes hunters not being weakened when crashing into a shield/wall" - - bugfix: "Fixes xeno stuns half the time intended" - - bugfix: "Fixes stopping, dropping, and rolling not properly weakening Xenos/Hulks" From 46887e88d831fc17de6c6e66f41ac22e635fc31a Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 8 Nov 2016 06:41:48 -0500 Subject: [PATCH 032/193] fixes --- code/modules/reagents/chemistry/colors.dm | 4 +- code/modules/reagents/chemistry/holder.dm | 2 +- .../reagents/chemistry/machinery/pandemic.dm | 3 +- .../reagents/chemistry/reagents/alcohol.dm | 37 ++++++++++++++-- .../reagents/chemistry/reagents/blob.dm | 2 +- .../reagents/chemistry/reagents/drink_base.dm | 2 +- .../reagents/chemistry/reagents/drink_cold.dm | 2 +- .../reagents/chemistry/reagents/drugs.dm | 40 ------------------ .../reagents/chemistry/reagents/misc.dm | 7 ++++ .../chemistry/reagents/paradise_pop.dm | 3 +- .../chemistry/reagents/pyrotechnic.dm | 28 +------------ .../reagents/chemistry/reagents/toxins.dm | 17 -------- .../reagents/chemistry/reagents/water.dm | 42 ++++++++++++++++++- .../reagents/chemistry/recipes/drinks.dm | 7 ---- .../reagents/chemistry/recipes/medicine.dm | 3 +- .../reagents/reagent_containers/borghydro.dm | 2 +- .../reagents/reagent_containers/bottle.dm | 3 +- .../reagent_containers/glass_containers.dm | 4 +- .../reagents/reagent_containers/hypospray.dm | 2 +- .../reagents/reagent_containers/spray.dm | 2 +- 20 files changed, 96 insertions(+), 116 deletions(-) diff --git a/code/modules/reagents/chemistry/colors.dm b/code/modules/reagents/chemistry/colors.dm index 381c3153ae9..3d4ab41fe9c 100644 --- a/code/modules/reagents/chemistry/colors.dm +++ b/code/modules/reagents/chemistry/colors.dm @@ -28,6 +28,4 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 color = BlendRGB(color, reagent_color, vol_temp/vol_counter) else color = BlendRGB(reagent_color, color, vol_temp/vol_counter) - return color - - + return color \ No newline at end of file diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index ea2b772098b..9c0c14014e4 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -727,4 +727,4 @@ atom/proc/create_reagents(max_vol) reagent_list.Cut() reagent_list = null if(my_atom && my_atom.reagents == src) - my_atom.reagents = null + my_atom.reagents = null \ No newline at end of file diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 1f801d0ace5..1aa72ac0918 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -293,5 +293,4 @@ ..() return else - ..() - return + ..() \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index a91c938871f..077bd0c3fe5 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -825,6 +825,38 @@ M.adjustToxLoss(2) ..() +/datum/reagent/ethanol/hippies_delight + name = "Hippie's Delight" + id = "hippiesdelight" + description = "You just don't get it maaaan." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + metabolization_rate = 0.2 * REAGENTS_METABOLISM + drink_icon = "hippiesdelightglass" + drink_name = "Hippie's Delight" + drink_desc = "A drink enjoyed by people during the 1960's." + +/datum/reagent/ethanol/hippies_delight/on_mob_life(mob/living/M) + M.Druggy(50) + switch(current_cycle) + if(1 to 5) + if(!M.stuttering) M.stuttering = 1 + M.Dizzy(10) + if(prob(10)) M.emote(pick("twitch","giggle")) + if(5 to 10) + if(!M.stuttering) M.stuttering = 1 + M.Jitter(20) + M.Dizzy(20) + M.Druggy(45) + if(prob(20)) M.emote(pick("twitch","giggle")) + if(10 to INFINITY) + if(!M.stuttering) M.stuttering = 1 + M.Jitter(40) + M.Dizzy(40) + M.Druggy(60) + if(prob(30)) M.emote(pick("twitch","giggle")) + ..() + /datum/reagent/ethanol/changelingsting name = "Changeling Sting" id = "changelingsting" @@ -993,7 +1025,6 @@ // ROBOT ALCOHOL PAST THIS POINT // WOOO! - /datum/reagent/ethanol/synthanol name = "Synthanol" id = "synthanol" @@ -1085,6 +1116,4 @@ alcohol_perc = 0.25 drink_icon = "synthignonglass" drink_name = "Glass of Synthignon" - drink_desc = "Someone mixed good wine and robot booze. Romantic, but atrocious." - -// ROBOT ALCOHOL ENDS \ No newline at end of file + drink_desc = "Someone mixed good wine and robot booze. Romantic, but atrocious." \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/blob.dm b/code/modules/reagents/chemistry/reagents/blob.dm index a7cfa32f403..a1fc820d282 100644 --- a/code/modules/reagents/chemistry/reagents/blob.dm +++ b/code/modules/reagents/chemistry/reagents/blob.dm @@ -149,4 +149,4 @@ if(message_living && !issilicon(M)) totalmessage += message_living totalmessage += "!" - to_chat(M, "[totalmessage]") + to_chat(M, "[totalmessage]") \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/drink_base.dm b/code/modules/reagents/chemistry/reagents/drink_base.dm index 6e30efb9423..884451c2dd0 100644 --- a/code/modules/reagents/chemistry/reagents/drink_base.dm +++ b/code/modules/reagents/chemistry/reagents/drink_base.dm @@ -25,4 +25,4 @@ if(adj_temp_cool) if(M.bodytemperature > 310)//310 is the normal bodytemp. 310.055 M.bodytemperature = max(310, M.bodytemperature - (adj_temp_cool * TEMPERATURE_DAMAGE_COEFFICIENT)) - ..() + ..() \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/drink_cold.dm b/code/modules/reagents/chemistry/reagents/drink_cold.dm index 31d75049590..56e399373e4 100644 --- a/code/modules/reagents/chemistry/reagents/drink_cold.dm +++ b/code/modules/reagents/chemistry/reagents/drink_cold.dm @@ -160,4 +160,4 @@ /datum/reagent/drink/cold/rewriter/on_mob_life(mob/living/M) M.Jitter(5) - ..() + ..() \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index d4986f92acd..037f1ebd8ab 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -27,39 +27,6 @@ if(prob(5)) M.emote(pick("twitch","drool","moan")) ..() - -/datum/reagent/hippies_delight - name = "Hippie's Delight" - id = "hippiesdelight" - description = "You just don't get it maaaan." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - metabolization_rate = 0.2 * REAGENTS_METABOLISM - drink_icon = "hippiesdelightglass" - drink_name = "Hippie's Delight" - drink_desc = "A drink enjoyed by people during the 1960's." - -/datum/reagent/hippies_delight/on_mob_life(mob/living/M) - M.Druggy(50) - switch(current_cycle) - if(1 to 5) - if(!M.stuttering) M.stuttering = 1 - M.Dizzy(10) - if(prob(10)) M.emote(pick("twitch","giggle")) - if(5 to 10) - if(!M.stuttering) M.stuttering = 1 - M.Jitter(20) - M.Dizzy(20) - M.Druggy(45) - if(prob(20)) M.emote(pick("twitch","giggle")) - if(10 to INFINITY) - if(!M.stuttering) M.stuttering = 1 - M.Jitter(40) - M.Dizzy(40) - M.Druggy(60) - if(prob(30)) M.emote(pick("twitch","giggle")) - ..() - /datum/reagent/lsd name = "Lysergic acid diethylamide" id = "lsd" @@ -369,13 +336,6 @@ else if(effect <= 7) M.emote("laugh") -/datum/reagent/saltpetre - name = "Saltpetre" - id = "saltpetre" - description = "Volatile." - reagent_state = LIQUID - color = "#60A584" // rgb: 96, 165, 132 - /datum/reagent/bath_salts name = "Bath Salts" id = "bath_salts" diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm index 3a33fcddcd2..9837e2e27dc 100644 --- a/code/modules/reagents/chemistry/reagents/misc.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -245,6 +245,13 @@ M.adjustToxLoss(1.5) ..() +/datum/reagent/saltpetre + name = "Saltpetre" + id = "saltpetre" + description = "Volatile." + reagent_state = LIQUID + color = "#60A584" // rgb: 96, 165, 132 + /datum/reagent/colorful_reagent name = "Colorful Reagent" id = "colorful_reagent" diff --git a/code/modules/reagents/chemistry/reagents/paradise_pop.dm b/code/modules/reagents/chemistry/reagents/paradise_pop.dm index 055b96020db..7a7085a5e5f 100644 --- a/code/modules/reagents/chemistry/reagents/paradise_pop.dm +++ b/code/modules/reagents/chemistry/reagents/paradise_pop.dm @@ -1,4 +1,3 @@ - /* Paradise Pop reagents Created through the bottler machine via bottler_recipes, not through standard reactions @@ -136,4 +135,4 @@ var/amount = rand(1, 5) var/mineral = pick("copper", "iron", "gold", "carbon", "silver", "aluminum", "silicon", "sodiumchloride", "plasma") M.reagents.add_reagent(mineral, amount) - ..() + ..() \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm index f30fec71f25..ef376910699 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm @@ -14,32 +14,6 @@ return ..() -/datum/reagent/fuel/unholywater //if you somehow managed to extract this from someone, dont splash it on yourself and have a smoke - name = "Unholy Water" - id = "unholywater" - description = "Something that shouldn't exist on this plane of existance." - process_flags = ORGANIC | SYNTHETIC //ethereal means everything processes it. - metabolization_rate = 1 - -/datum/reagent/fuel/unholywater/on_mob_life(mob/living/M) - M.adjustBrainLoss(3) - if(iscultist(M)) - M.status_flags |= GOTTAGOFAST - M.AdjustDrowsy(-5) - M.AdjustParalysis(-2) - M.AdjustStunned(-2) - M.AdjustWeakened(-2) - else - M.adjustToxLoss(2) - M.adjustFireLoss(2) - M.adjustOxyLoss(2) - M.adjustBruteLoss(2) - ..() - -/datum/reagent/fuel/unholywater/on_mob_delete(mob/living/M) - M.status_flags &= ~GOTTAGOFAST - ..() - /datum/reagent/plasma name = "Plasma" id = "plasma" @@ -325,4 +299,4 @@ if(method == TOUCH) M.adjust_fire_stacks(volume / 5) return - ..() + ..() \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index bc4bf1adc92..abffbcde16e 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -275,23 +275,6 @@ O.visible_message("[O] melts.") qdel(O) - -/datum/reagent/hellwater - name = "Hell Water" - id = "hell_water" - description = "YOUR FLESH! IT BURNS!" - process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL. - metabolization_rate = 1 - -/datum/reagent/hellwater/on_mob_life(mob/living/M) - M.fire_stacks = min(5, M.fire_stacks + 3) - M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire - M.adjustToxLoss(1) - M.adjustFireLoss(1) //Hence the other damages... ain't I a bastard? - M.adjustBrainLoss(5) - ..() - - /datum/reagent/carpotoxin name = "Carpotoxin" id = "carpotoxin" diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index fb51fe75d67..233211d93f9 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -339,6 +339,46 @@ qdel(R) T.Bless() +/datum/reagent/fuel/unholywater //if you somehow managed to extract this from someone, dont splash it on yourself and have a smoke + name = "Unholy Water" + id = "unholywater" + description = "Something that shouldn't exist on this plane of existance." + process_flags = ORGANIC | SYNTHETIC //ethereal means everything processes it. + metabolization_rate = 1 + +/datum/reagent/fuel/unholywater/on_mob_life(mob/living/M) + M.adjustBrainLoss(3) + if(iscultist(M)) + M.status_flags |= GOTTAGOFAST + M.AdjustDrowsy(-5) + M.AdjustParalysis(-2) + M.AdjustStunned(-2) + M.AdjustWeakened(-2) + else + M.adjustToxLoss(2) + M.adjustFireLoss(2) + M.adjustOxyLoss(2) + M.adjustBruteLoss(2) + ..() + +/datum/reagent/fuel/unholywater/on_mob_delete(mob/living/M) + M.status_flags &= ~GOTTAGOFAST + ..() + +/datum/reagent/hellwater + name = "Hell Water" + id = "hell_water" + description = "YOUR FLESH! IT BURNS!" + process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL. + metabolization_rate = 1 + +/datum/reagent/hellwater/on_mob_life(mob/living/M) + M.fire_stacks = min(5, M.fire_stacks + 3) + M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire + M.adjustToxLoss(1) + M.adjustFireLoss(1) //Hence the other damages... ain't I a bastard? + M.adjustBrainLoss(5) + ..() /datum/reagent/liquidgibs name = "Liquid gibs" @@ -374,4 +414,4 @@ if(istype(O, /obj/item/clothing/shoes/galoshes)) var/t_loc = get_turf(O) qdel(O) - new /obj/item/clothing/shoes/galoshes/dry(t_loc) + new /obj/item/clothing/shoes/galoshes/dry(t_loc) \ No newline at end of file diff --git a/code/modules/reagents/chemistry/recipes/drinks.dm b/code/modules/reagents/chemistry/recipes/drinks.dm index fb10986cd0b..d1866a2b2f1 100644 --- a/code/modules/reagents/chemistry/recipes/drinks.dm +++ b/code/modules/reagents/chemistry/recipes/drinks.dm @@ -677,13 +677,6 @@ result_amount = 2 mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' -/datum/reagent/ginsonic - name = "Gin and sonic" - id = "ginsonic" - description = "GOTTA GET CRUNK FAST BUT LIQUOR TOO SLOW" - reagent_state = LIQUID - color = "#1111CF" - /datum/chemical_reaction/ginsonic name = "ginsonic" id = "ginsonic" diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index 3d0a0feb8d8..1c22693513f 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -271,5 +271,4 @@ required_reagents = list("ethanol" = 1, "copper" = 1, "silver" = 1) result_amount = 3 min_temp = 370 - mix_message = "The solution gently swirls with a metallic sheen." - + mix_message = "The solution gently swirls with a metallic sheen." \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index 634e0875aaf..c69c7b4a0ef 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -118,4 +118,4 @@ empty = 0 if(empty) - to_chat(user, "It is currently empty. Allow some time for the internal syntheszier to produce more.") + to_chat(user, "It is currently empty. Allow some time for the internal syntheszier to produce more.") \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index a22802a4a45..d46ba85c3c9 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -1,4 +1,3 @@ - //Not to be confused with /obj/item/weapon/reagent_containers/food/drinks/bottle @@ -331,4 +330,4 @@ name = "BVAK bottle" desc = "A small bottle containing Bio Virus Antidote Kit." icon_state = "wide_bottle" - list_reagents = list("atropine" = 5, "epinephrine" = 5, "salbutamol" = 10, "spaceacillin" = 10) + list_reagents = list("atropine" = 5, "epinephrine" = 5, "salbutamol" = 10, "spaceacillin" = 10) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index 32836a15cc9..60c924e0515 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -1,4 +1,4 @@ - //////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// /// (Mixing)Glass. //////////////////////////////////////////////////////////////////////////////// /obj/item/weapon/reagent_containers/glass @@ -331,7 +331,7 @@ armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) slot_flags = SLOT_HEAD flags = OPENCONTAINER - + /obj/item/weapon/reagent_containers/glass/bucket/equipped(mob/user, slot) ..() if(slot == slot_head && reagents.total_volume) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 6533dbf52c2..490f46e0a52 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -110,4 +110,4 @@ amount_per_transfer_from_this = 50 possible_transfer_amounts = list(50) volume = 50 - list_reagents = list("stimulants" = 50) + list_reagents = list("stimulants" = 50) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 3972f0a4a13..a706d443d90 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -216,4 +216,4 @@ if(istype(A, /obj/effect/blob)) // blob damage in blob code return - ..() + ..() \ No newline at end of file From b1b78ec3eeab4f992c29aead7cc83479d65aece5 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 8 Nov 2016 06:48:24 -0500 Subject: [PATCH 033/193] nutrition fix --- code/modules/reagents/chemistry/reagents/alcohol.dm | 1 - code/modules/reagents/chemistry/reagents/drinks.dm | 4 ---- 2 files changed, 5 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index 077bd0c3fe5..59313654d35 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -226,7 +226,6 @@ drink_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass" /datum/reagent/ethanol/thirteenloko/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor M.AdjustDrowsy(-7) M.AdjustSleeping(-2) if(M.bodytemperature > 310) diff --git a/code/modules/reagents/chemistry/reagents/drinks.dm b/code/modules/reagents/chemistry/reagents/drinks.dm index 043f342cf0e..58574701a40 100644 --- a/code/modules/reagents/chemistry/reagents/drinks.dm +++ b/code/modules/reagents/chemistry/reagents/drinks.dm @@ -128,7 +128,6 @@ drink_desc = "The raw essence of a banana. HONK" /datum/reagent/drink/banana/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor if((ishuman(M) && M.job in list("Clown") ) || issmall(M)) M.adjustBruteLoss(-1) M.adjustFireLoss(-1) @@ -143,7 +142,6 @@ drink_desc = "Absolutely nothing." /datum/reagent/drink/nothing/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor if(ishuman(M) && M.job in list("Mime")) M.adjustBruteLoss(-1) M.adjustFireLoss(-1) @@ -330,7 +328,6 @@ drink_desc = "A drink from Banana Heaven." /datum/reagent/drink/bananahonk/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor if((ishuman(M) && M.job in list("Clown") ) || issmall(M)) M.adjustBruteLoss(-1) M.adjustFireLoss(-1) @@ -347,7 +344,6 @@ drink_desc = "A drink from mime Heaven." /datum/reagent/drink/silencer/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor if(ishuman(M) && M.job in list("Mime")) M.adjustBruteLoss(-1) M.adjustFireLoss(-1) From cff0528673dcab2c760b9ad1a67fd6629875bfde Mon Sep 17 00:00:00 2001 From: Markolie Date: Tue, 8 Nov 2016 16:23:13 +0100 Subject: [PATCH 034/193] Verb category changes, telecoms verb fix --- code/game/gamemodes/cult/ritual.dm | 9 ++++++++- code/game/gamemodes/gameticker.dm | 2 +- code/modules/admin/admin.dm | 4 ++-- code/modules/admin/admin_verbs.dm | 2 +- code/modules/admin/buildmode.dm | 3 ++- code/modules/admin/verbs/adminsay.dm | 4 ++-- code/modules/admin/verbs/deadsay.dm | 2 +- code/modules/admin/verbs/freeze.dm | 23 +++++++++++++---------- code/modules/admin/verbs/randomverbs.dm | 18 +++++++++--------- code/modules/karma/karma.dm | 6 +++--- 10 files changed, 42 insertions(+), 31 deletions(-) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index e60b7406675..ab25f22a8fd 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -6,13 +6,20 @@ var/runedec = 0 var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", "self", "see", "other", "hide") /client/proc/check_words() // -- Urist - set category = "Special Verbs" + set category = "Admin" set name = "Check Rune Words" set desc = "Check the rune-word meaning" + + if(!check_rights(R_ADMIN)) + return + if(!cultwords["travel"]) runerandom() for(var/word in engwords) to_chat(usr, "[cultwords[word]] is [word]") + + log_and_message_admins("checked the rune words.") + feedback_add_details("admin_verb","CRW") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /proc/runerandom() //randomizes word meaning var/list/runewords=list("ire","ego","nahlizet","certum","veri","jatkaa","mgar","balaq", "karazet", "geeri") ///"orkan" and "allaq" removed. diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 5deb2bafa0f..328facd08c6 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -414,7 +414,7 @@ var/round_start_time = 0 var/dat dat += {"Karma Reminder

    Karma Reminder


    You have not yet spent your karma for the round, surely there is a player who was worthy of receiving
    - your reward? Look under 'Special Verbs' for the 'Award Karma' button, and use it once a round for best results!
"} + your reward? Look under 'OOC' for the 'Award Karma' button, and use it once a round for best results!"} player << browse(dat, "window=karmareminder;size=400x300") diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index dcbb5c74c4d..6f1d4dc65a8 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -540,9 +540,9 @@ var/global/nologevent = 0 world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", delay) /datum/admins/proc/announce() - set category = "Special Verbs" + set category = "Admin" set name = "Announce" - set desc="Announce your desires to the world" + set desc = "Announce your desires to the world" if(!check_rights(R_ADMIN)) return diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index fda1382d4df..ba46a995ffd 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -534,7 +534,7 @@ var/list/admin_verbs_snpc = list( #undef AUTOBANTIME /client/proc/drop_bomb() // Some admin dickery that can probably be done better -- TLE - set category = "Special Verbs" + set category = "Event" set name = "Drop Bomb" set desc = "Cause an explosion of varying strength at your location." diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm index 87721320af5..8ad4bfcbb0e 100644 --- a/code/modules/admin/buildmode.dm +++ b/code/modules/admin/buildmode.dm @@ -396,7 +396,8 @@ /proc/togglebuildmode(mob/M as mob in player_list) set name = "Toggle Build Mode" - set category = "Special Verbs" + set category = "Event" + if(M.client) if(istype(M.client.click_intercept,/datum/click_intercept/buildmode)) var/datum/click_intercept/buildmode/B = M.client.click_intercept diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 67130872222..7c7569e5907 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -1,5 +1,5 @@ /client/proc/cmd_admin_say(msg as text) - set category = "Special Verbs" + set category = "Admin" set name = "Asay" //Gave this shit a shorter name so you only have to time out "asay" rather than "admin say" to use it --NeoFite set hidden = 1 if(!check_rights(R_ADMIN)) return @@ -17,7 +17,7 @@ feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_mentor_say(msg as text) - set category = "Special Verbs" + set category = "Admin" set name = "Msay" set hidden = 1 diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index 690cac87536..3874e26e9de 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -1,5 +1,5 @@ /client/proc/dsay(msg as text) - set category = "Special Verbs" + set category = "Admin" set name = "Dsay" //Gave this shit a shorter name so you only have to time out "dsay" rather than "dead say" to use it --NeoFite set hidden = 1 diff --git a/code/modules/admin/verbs/freeze.dm b/code/modules/admin/verbs/freeze.dm index fb93cd3512d..b0c63544634 100644 --- a/code/modules/admin/verbs/freeze.dm +++ b/code/modules/admin/verbs/freeze.dm @@ -7,13 +7,15 @@ //////////////////////////////////////////////////////////////////////////////// var/global/list/frozen_mob_list = list() /client/proc/freeze(var/mob/living/M as mob in mob_list) - set category = "Special Verbs" + set category = "Admin" set name = "Freeze" - if(!holder) - to_chat(src, "Error: Freeze: Only administrators may use this command.") + + if(!check_rights(R_ADMIN)) return - if(!istype(M)) return - if(!check_rights(R_ADMIN)) return + + if(!istype(M)) + return + if(M in frozen_mob_list) M.admin_unFreeze(src) else @@ -83,14 +85,15 @@ var/global/list/frozen_mob_list = list() //////////////////////////Freeze Mech /client/proc/freezemecha(var/obj/mecha/O as obj in mechas_list) - set category = "Special Verbs" + set category = "Admin" set name = "Freeze Mech" - if(!holder) - to_chat(src, "Only administrators may use this command.") - return + + if(!check_rights(R_ADMIN)) + return + var/obj/mecha/M = O if(!istype(M,/obj/mecha)) - to_chat(src, "This can only be used on Mechs!") + to_chat(src, "This can only be used on mechs!") return else if(usr) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index b776eb9a649..79ee34fb635 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -139,7 +139,7 @@ feedback_add_details("admin_verb","DIRN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_godmode(mob/M as mob in mob_list) - set category = "Special Verbs" + set category = "Admin" set name = "Godmode" if(!check_rights(R_ADMIN)) @@ -287,7 +287,7 @@ Works kind of like entering the game with a new character. Character receives a Traitors and the like can also be revived with the previous role mostly intact. /N */ /client/proc/respawn_character() - set category = "Special Verbs" + set category = "Event" set name = "Respawn Character" set desc = "Respawn a person that has been gibbed/dusted/killed. They must be a ghost for this to work and preferably should not have a body to go back into." @@ -520,7 +520,7 @@ Traitors and the like can also be revived with the previous role mostly intact. feedback_add_details("admin_verb","IONC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_rejuvenate(mob/living/M as mob in mob_list) - set category = "Special Verbs" + set category = "Event" set name = "Rejuvenate" if(!check_rights(R_REJUVINATE)) @@ -659,7 +659,7 @@ Traitors and the like can also be revived with the previous role mostly intact. return /client/proc/cmd_admin_emp(atom/O as obj|mob|turf in view()) - set category = "Special Verbs" + set category = "Event" set name = "EM Pulse" if(!check_rights(R_DEBUG|R_EVENT)) @@ -682,7 +682,7 @@ Traitors and the like can also be revived with the previous role mostly intact. return /client/proc/cmd_admin_gib(mob/M as mob in mob_list) - set category = "Special Verbs" + set category = "Admin" set name = "Gib" if(!check_rights(R_ADMIN|R_EVENT)) @@ -722,7 +722,7 @@ Traitors and the like can also be revived with the previous role mostly intact. feedback_add_details("admin_verb","GIBS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_check_contents(mob/living/M as mob in mob_list) - set category = "Special Verbs" + set category = "Admin" set name = "Check Contents" if(!check_rights(R_ADMIN)) @@ -734,7 +734,7 @@ Traitors and the like can also be revived with the previous role mostly intact. feedback_add_details("admin_verb","CC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggle_view_range() - set category = "Special Verbs" + set category = "Admin" set name = "Change View Range" set desc = "switches between 1x and custom views" @@ -806,7 +806,7 @@ Traitors and the like can also be revived with the previous role mostly intact. message_admins("[key_name_admin(usr)] has [shuttle_master.emergencyNoEscape ? "denied" : "allowed"] the shuttle to be called.") /client/proc/cmd_admin_attack_log(mob/M as mob in mob_list) - set category = "Special Verbs" + set category = "Admin" set name = "Attack Log" if(!check_rights(R_ADMIN)) @@ -875,7 +875,7 @@ Traitors and the like can also be revived with the previous role mostly intact. set name = "Reset Telecomms Scripts" set desc = "Blanks all telecomms scripts from all telecomms servers" - if(!check_rights(R_ADMIN, 1, src)) + if(!check_rights(R_ADMIN)) return var/confirm = alert(src, "You sure you want to blank all NTSL scripts?", "Confirm", "Yes", "No") diff --git a/code/modules/karma/karma.dm b/code/modules/karma/karma.dm index e8c047c98bc..d1f3f5d98c3 100644 --- a/code/modules/karma/karma.dm +++ b/code/modules/karma/karma.dm @@ -84,7 +84,7 @@ var/list/karma_spenders = list() /mob/verb/spend_karma_list() set name = "Award Karma" set desc = "Let the gods know whether someone's been nice. Can only be used once per round." - set category = "Special Verbs" + set category = "OOC" if(!can_give_karma()) return @@ -113,7 +113,7 @@ var/list/karma_spenders = list() /mob/verb/spend_karma(var/mob/M) set name = "Award Karma to Player" set desc = "Let the gods know whether someone's been nice. Can only be used once per round." - set category = "Special Verbs" + set category = "OOC" if(!M) to_chat(usr, "Please right click a mob to award karma directly, or use the 'Award Karma' verb to select a player from the player listing.") @@ -144,7 +144,7 @@ var/list/karma_spenders = list() /client/verb/check_karma() set name = "Check Karma" - set category = "Special Verbs" + set category = "OOC" set desc = "Reports how much karma you have accrued." var/currentkarma=verify_karma() From 14e2eb8eb049db7c3bb4dcc04a372fba4a130517 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 8 Nov 2016 10:26:29 -0500 Subject: [PATCH 035/193] consumables --- .../food_and_drinks/drinks/drinks/bottle.dm | 2 +- .../recipes/tablecraft/recipes_table.dm | 4 +- code/modules/mob/living/carbon/human/life.dm | 2 +- .../modules/projectiles/projectile/bullets.dm | 2 +- code/modules/reagents/chemistry/reagents.dm | 2 - .../reagents/chemistry/reagents/alcohol.dm | 215 ++-- .../reagents/chemistry/reagents/disease.dm | 6 +- .../reagents/chemistry/reagents/drink_base.dm | 6 +- .../reagents/chemistry/reagents/drink_cold.dm | 38 +- .../reagents/chemistry/reagents/drinks.dm | 106 +- .../reagents/chemistry/reagents/food.dm | 970 +++++++++--------- .../reagents/chemistry/reagents/medicine.dm | 2 +- .../reagents/chemistry/reagents/misc.dm | 34 + .../reagents/chemistry/reagents/toxins.dm | 67 -- code/modules/surgery/organs/organ_internal.dm | 4 +- 15 files changed, 708 insertions(+), 752 deletions(-) diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 7ee7509d8f1..53130d972f4 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -284,7 +284,7 @@ desc = "A throwing weapon used to ignite things, typically filled with an accelerant. Recommended highly by rioters and revolutionaries. Light and toss." icon_state = "vodkabottle" list_reagents = list() - var/list/accelerants = list(/datum/reagent/ethanol,/datum/reagent/fuel,/datum/reagent/clf3,/datum/reagent/phlogiston, + var/list/accelerants = list(/datum/reagent/consumable/ethanol,/datum/reagent/fuel,/datum/reagent/clf3,/datum/reagent/phlogiston, /datum/reagent/napalm,/datum/reagent/hellwater,/datum/reagent/plasma,/datum/reagent/plasma_dust) var/active = 0 diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm index 005be6c1f7e..b6c943dbdab 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm @@ -31,7 +31,7 @@ /datum/crafting_recipe/cherrysandwich name = "Cherry Jelly Sandwich" reqs = list( - /datum/reagent/cherryjelly = 5, + /datum/reagent/consumable/cherryjelly = 5, /obj/item/weapon/reagent_containers/food/snacks/breadslice = 2, ) result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry @@ -49,7 +49,7 @@ /datum/crafting_recipe/jellyburger name = "Cherry Jelly Burger" reqs = list( - /datum/reagent/cherryjelly = 5, + /datum/reagent/consumable/cherryjelly = 5, /obj/item/weapon/reagent_containers/food/snacks/bun = 1, ) result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 471cb6bbf69..4685b3b3113 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -787,7 +787,7 @@ /mob/living/carbon/human/proc/has_booze() //checks if the human has ethanol or its subtypes inside for(var/A in reagents.reagent_list) var/datum/reagent/R = A - if(istype(R, /datum/reagent/ethanol)) + if(istype(R, /datum/reagent/consumable/ethanol)) return 1 return 0 diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 275e2ec94e5..9c3475d2141 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -28,7 +28,7 @@ M.AdjustConfused(20) M.AdjustEyeBlurry(20) M.AdjustDrowsy(20) - for(var/datum/reagent/ethanol/A in M.reagents.reagent_list) + for(var/datum/reagent/consumable/ethanol/A in M.reagents.reagent_list) M.AdjustParalysis(2) M.AdjustDizzy(10) M.AdjustSlur(10) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 8077b248587..1b6e2e08854 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -1,7 +1,6 @@ #define SOLID 1 #define LIQUID 2 #define GAS 3 -#define FOOD_METABOLISM 0.4 #define REM REAGENTS_EFFECT_MULTIPLIER /datum/reagent @@ -12,7 +11,6 @@ var/reagent_state = SOLID var/list/data = null var/volume = 0 - var/nutriment_factor = 0 var/metabolization_rate = REAGENTS_METABOLISM //var/list/viruses = list() var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!) diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index 59313654d35..adebb394fc0 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -1,5 +1,5 @@ //ALCOHOL WOO -/datum/reagent/ethanol +/datum/reagent/consumable/ethanol name = "Ethanol" //Parent class for all alcoholic reagents. id = "ethanol" description = "A well-known alcohol with a variety of applications." @@ -10,14 +10,13 @@ var/dizzy_adj = 3 var/alcohol_perc = 1 //percentage of ethanol in a beverage 0.0 - 1.0 -/datum/reagent/ethanol/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor +/datum/reagent/consumable/ethanol/on_mob_life(mob/living/M) M.AdjustDrunk(alcohol_perc) M.AdjustDizzy(dizzy_adj) ..() -/datum/reagent/ethanol/reaction_obj(obj/O, volume) +/datum/reagent/consumable/ethanol/reaction_obj(obj/O, volume) if(istype(O,/obj/item/weapon/paper)) var/obj/item/weapon/paper/paperaffected = O paperaffected.clearpaper() @@ -30,23 +29,23 @@ else to_chat(usr, "It wasn't enough...") -/datum/reagent/ethanol/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with ethanol isn't quite as good as fuel. +/datum/reagent/consumable/ethanol/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with ethanol isn't quite as good as fuel. if(method == TOUCH) M.adjust_fire_stacks(volume / 15) -/datum/reagent/ethanol/beer +/datum/reagent/consumable/ethanol/beer name = "Beer" id = "beer" description = "An alcoholic beverage made from malted grains, hops, yeast, and water." - nutriment_factor = 2 * FOOD_METABOLISM + nutriment_factor = 2 * REAGENTS_METABOLISM color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.2 drink_icon ="beerglass" drink_name = "Beer glass" drink_desc = "A freezing pint of beer" -/datum/reagent/ethanol/cider +/datum/reagent/consumable/ethanol/cider name = "Cider" id = "cider" description = "An alcoholic beverage derived from apples." @@ -56,7 +55,7 @@ drink_name = "Cider" drink_desc = "a refreshing glass of traditional cider" -/datum/reagent/ethanol/whiskey +/datum/reagent/consumable/ethanol/whiskey name = "Whiskey" id = "whiskey" description = "A superb and well-aged single-malt whiskey. Damn." @@ -67,14 +66,14 @@ drink_name = "Glass of whiskey" drink_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy." -/datum/reagent/ethanol/specialwhiskey +/datum/reagent/consumable/ethanol/specialwhiskey name = "Special Blend Whiskey" id = "specialwhiskey" description = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything." color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.5 -/datum/reagent/ethanol/gin +/datum/reagent/consumable/ethanol/gin name = "Gin" id = "gin" description = "It's gin. In space. I say, good sir." @@ -85,7 +84,7 @@ drink_name = "Glass of gin" drink_desc = "A crystal clear glass of Griffeater gin." -/datum/reagent/ethanol/absinthe +/datum/reagent/consumable/ethanol/absinthe name = "Absinthe" id = "absinthe" description = "Watch out that the Green Fairy doesn't come for you!" @@ -98,14 +97,14 @@ drink_desc = "The green fairy is going to get you now!" //copy paste from LSD... shoot me -/datum/reagent/ethanol/absinthe/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/absinthe/on_mob_life(mob/living/M) M.AdjustHallucinate(5) ..() -/datum/reagent/ethanol/absinthe/overdose_process(mob/living/M, severity) +/datum/reagent/consumable/ethanol/absinthe/overdose_process(mob/living/M, severity) M.adjustToxLoss(1) -/datum/reagent/ethanol/rum +/datum/reagent/consumable/ethanol/rum name = "Rum" id = "rum" description = "Popular with the sailors. Not very popular with everyone else." @@ -117,10 +116,10 @@ drink_name = "Glass of Rum" drink_desc = "Now you want to Pray for a pirate suit, don't you?" -/datum/reagent/ethanol/rum/overdose_process(mob/living/M, severity) +/datum/reagent/consumable/ethanol/rum/overdose_process(mob/living/M, severity) M.adjustToxLoss(1) -/datum/reagent/ethanol/mojito +/datum/reagent/consumable/ethanol/mojito name = "Mojito" id = "mojito" description = "If it's good enough for Spesscuba, it's good enough for you." @@ -130,7 +129,7 @@ drink_name = "Glass of Mojito" drink_desc = "Fresh from Spesscuba." -/datum/reagent/ethanol/vodka +/datum/reagent/consumable/ethanol/vodka name = "Vodka" id = "vodka" description = "Number one drink AND fueling choice for Russians worldwide." @@ -140,7 +139,7 @@ drink_name = "Glass of vodka" drink_desc = "The glass contain wodka. Xynta." -/datum/reagent/ethanol/sake +/datum/reagent/consumable/ethanol/sake name = "Sake" id = "sake" description = "Anime's favorite drink." @@ -150,7 +149,7 @@ drink_name = "Glass of Sake" drink_desc = "A glass of Sake." -/datum/reagent/ethanol/tequila +/datum/reagent/consumable/ethanol/tequila name = "Tequila" id = "tequila" description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?" @@ -160,7 +159,7 @@ drink_name = "Glass of Tequila" drink_desc = "Now all that's missing is the weird colored shades!" -/datum/reagent/ethanol/vermouth +/datum/reagent/consumable/ethanol/vermouth name = "Vermouth" id = "vermouth" description = "You suddenly feel a craving for a martini..." @@ -170,7 +169,7 @@ drink_name = "Glass of Vermouth" drink_desc = "You wonder why you're even drinking this straight." -/datum/reagent/ethanol/wine +/datum/reagent/consumable/ethanol/wine name = "Wine" id = "wine" description = "An premium alchoholic beverage made from distilled grape juice." @@ -181,7 +180,7 @@ drink_name = "Glass of wine" drink_desc = "A very classy looking drink." -/datum/reagent/ethanol/cognac +/datum/reagent/consumable/ethanol/cognac name = "Cognac" id = "cognac" description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication." @@ -192,7 +191,7 @@ drink_name = "Glass of cognac" drink_desc = "Damn, you feel like some kind of French aristocrat just by holding this." -/datum/reagent/ethanol/suicider //otherwise known as "I want to get so smashed my liver gives out and I die from alcohol poisoning". +/datum/reagent/consumable/ethanol/suicider //otherwise known as "I want to get so smashed my liver gives out and I die from alcohol poisoning". name = "Suicider" id = "suicider" description = "An unbelievably strong and potent variety of Cider." @@ -203,7 +202,7 @@ drink_name = "Suicider" drink_desc = "You've really hit rock bottom now... your liver packed its bags and left last night." -/datum/reagent/ethanol/ale +/datum/reagent/consumable/ethanol/ale name = "Ale" id = "ale" description = "A dark alchoholic beverage made by malted barley and yeast." @@ -213,7 +212,7 @@ drink_name = "Ale glass" drink_desc = "A freezing pint of delicious Ale" -/datum/reagent/ethanol/thirteenloko +/datum/reagent/consumable/ethanol/thirteenloko name = "Thirteen Loko" id = "thirteenloko" description = "A potent mixture of caffeine and alcohol." @@ -225,7 +224,7 @@ drink_name = "Glass of Thirteen Loko" drink_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass" -/datum/reagent/ethanol/thirteenloko/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/M) M.AdjustDrowsy(-7) M.AdjustSleeping(-2) if(M.bodytemperature > 310) @@ -236,7 +235,7 @@ /////////////////////////////////////////////////////////////////cocktail entities////////////////////////////////////////////// -/datum/reagent/ethanol/bilk +/datum/reagent/consumable/ethanol/bilk name = "Bilk" id = "bilk" description = "This appears to be beer mixed with milk. Disgusting." @@ -247,7 +246,7 @@ drink_name = "Glass of bilk" drink_desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis." -/datum/reagent/ethanol/atomicbomb +/datum/reagent/consumable/ethanol/atomicbomb name = "Atomic Bomb" id = "atomicbomb" description = "Nuclear proliferation never tasted so good." @@ -258,7 +257,7 @@ drink_name = "Atomic Bomb" drink_desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing." -/datum/reagent/ethanol/threemileisland +/datum/reagent/consumable/ethanol/threemileisland name = "THree Mile Island Iced Tea" id = "threemileisland" description = "Made for a woman, strong enough for a man." @@ -269,7 +268,7 @@ drink_name = "Three Mile Island Ice Tea" drink_desc = "A glass of this is sure to prevent a meltdown." -/datum/reagent/ethanol/goldschlager +/datum/reagent/consumable/ethanol/goldschlager name = "Goldschlager" id = "goldschlager" description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break." @@ -280,7 +279,7 @@ drink_name = "Glass of goldschlager" drink_desc = "100 proof that teen girls will drink anything with gold in it." -/datum/reagent/ethanol/patron +/datum/reagent/consumable/ethanol/patron name = "Patron" id = "patron" description = "Tequila with silver in it, a favorite of alcoholic women in the club scene." @@ -291,7 +290,7 @@ drink_name = "Glass of Patron" drink_desc = "Drinking patron in the bar, with all the subpar ladies." -/datum/reagent/ethanol/gintonic +/datum/reagent/consumable/ethanol/gintonic name = "Gin and Tonic" id = "gintonic" description = "An all time classic, mild cocktail." @@ -302,7 +301,7 @@ drink_name = "Gin and Tonic" drink_desc = "A mild but still great cocktail. Drink up, like a true Englishman." -/datum/reagent/ethanol/cuba_libre +/datum/reagent/consumable/ethanol/cuba_libre name = "Cuba Libre" id = "cubalibre" description = "Rum, mixed with cola. Viva la revolution." @@ -313,7 +312,7 @@ drink_name = "Cuba Libre" drink_desc = "A classic mix of rum and cola." -/datum/reagent/ethanol/whiskey_cola +/datum/reagent/consumable/ethanol/whiskey_cola name = "Whiskey Cola" id = "whiskeycola" description = "Whiskey, mixed with cola. Surprisingly refreshing." @@ -324,7 +323,7 @@ drink_name = "Whiskey Cola" drink_desc = "An innocent-looking mixture of cola and Whiskey. Delicious." -/datum/reagent/ethanol/martini +/datum/reagent/consumable/ethanol/martini name = "Classic Martini" id = "martini" description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious." @@ -335,7 +334,7 @@ drink_name = "Classic Martini" drink_desc = "Damn, the bartender even stirred it, not shook it." -/datum/reagent/ethanol/vodkamartini +/datum/reagent/consumable/ethanol/vodkamartini name = "Vodka Martini" id = "vodkamartini" description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious." @@ -346,7 +345,7 @@ drink_name = "Vodka martini" drink_desc ="A bastardisation of the classic martini. Still great." -/datum/reagent/ethanol/white_russian +/datum/reagent/consumable/ethanol/white_russian name = "White Russian" id = "whiterussian" description = "That's just, like, your opinion, man..." @@ -357,7 +356,7 @@ drink_name = "White Russian" drink_desc = "A very nice looking drink. But that's just, like, your opinion, man." -/datum/reagent/ethanol/screwdrivercocktail +/datum/reagent/consumable/ethanol/screwdrivercocktail name = "Screwdriver" id = "screwdrivercocktail" description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious." @@ -368,7 +367,7 @@ drink_name = "Screwdriver" drink_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer." -/datum/reagent/ethanol/booger +/datum/reagent/consumable/ethanol/booger name = "Booger" id = "booger" description = "Ewww..." @@ -379,7 +378,7 @@ drink_name = "Booger" drink_desc = "Ewww..." -/datum/reagent/ethanol/bloody_mary +/datum/reagent/consumable/ethanol/bloody_mary name = "Bloody Mary" id = "bloodymary" description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." @@ -390,7 +389,7 @@ drink_name = "Bloody Mary" drink_desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder." -/datum/reagent/ethanol/gargle_blaster +/datum/reagent/consumable/ethanol/gargle_blaster name = "Pan-Galactic Gargle Blaster" id = "gargleblaster" description = "Whoah, this stuff looks volatile!" @@ -401,7 +400,7 @@ drink_name = "Pan-Galactic Gargle Blaster" drink_desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy." -/datum/reagent/ethanol/brave_bull +/datum/reagent/consumable/ethanol/brave_bull name = "Brave Bull" id = "bravebull" description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." @@ -412,7 +411,7 @@ drink_name = "Brave Bull" drink_desc = "Tequila and Coffee liquor, brought together in a mouthwatering mixture. Drink up." -/datum/reagent/ethanol/tequila_sunrise +/datum/reagent/consumable/ethanol/tequila_sunrise name = "Tequila Sunrise" id = "tequilasunrise" description = "Tequila and orange juice. Much like a Screwdriver, only Mexican~" @@ -423,7 +422,7 @@ drink_name = "Tequila Sunrise" drink_desc = "Oh great, now you feel nostalgic about sunrises back on Terra..." -/datum/reagent/ethanol/toxins_special +/datum/reagent/consumable/ethanol/toxins_special name = "Toxins Special" id = "toxinsspecial" description = "This thing is FLAMING!. CALL THE DAMN SHUTTLE!" @@ -434,12 +433,12 @@ drink_name = "Toxins Special" drink_desc = "Whoah, this thing is on FIRE" -/datum/reagent/ethanol/toxins_special/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/toxins_special/on_mob_life(mob/living/M) if(M.bodytemperature < 330) M.bodytemperature = min(330, M.bodytemperature + (15 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055 ..() -/datum/reagent/ethanol/beepsky_smash +/datum/reagent/consumable/ethanol/beepsky_smash name = "Beepsky Smash" id = "beepskysmash" description = "Deny drinking this and prepare for THE LAW." @@ -450,11 +449,11 @@ drink_name = "Beepsky Smash" drink_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." -/datum/reagent/ethanol/beepsky_smash/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_life(mob/living/M) M.Stun(1) ..() -/datum/reagent/ethanol/irish_cream +/datum/reagent/consumable/ethanol/irish_cream name = "Irish Cream" id = "irishcream" description = "Whiskey-imbued cream, what else would you expect from the Irish." @@ -465,7 +464,7 @@ drink_name = "Irish Cream" drink_desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?" -/datum/reagent/ethanol/manly_dorf +/datum/reagent/consumable/ethanol/manly_dorf name = "The Manly Dorf" id = "manlydorf" description = "Beer and Ale, brought together in a delicious mix. Intended for true men only." @@ -476,7 +475,7 @@ drink_name = "The Manly Dorf" drink_desc = "A manly concotion made from Ale and Beer. Intended for true men only." -/datum/reagent/ethanol/longislandicedtea +/datum/reagent/consumable/ethanol/longislandicedtea name = "Long Island Iced Tea" id = "longislandicedtea" description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." @@ -487,7 +486,7 @@ drink_name = "Long Island Iced Tea" drink_desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." -/datum/reagent/ethanol/moonshine +/datum/reagent/consumable/ethanol/moonshine name = "Moonshine" id = "moonshine" description = "You've really hit rock bottom now... your liver packed its bags and left last night." @@ -498,7 +497,7 @@ drink_name = "Moonshine" drink_desc = "You've really hit rock bottom now... your liver packed its bags and left last night." -/datum/reagent/ethanol/b52 +/datum/reagent/consumable/ethanol/b52 name = "B-52" id = "b52" description = "Coffee, Irish Cream, and congac. You will get bombed." @@ -509,7 +508,7 @@ drink_name = "B-52" drink_desc = "Kahlua, Irish Cream, and congac. You will get bombed." -/datum/reagent/ethanol/irishcoffee +/datum/reagent/consumable/ethanol/irishcoffee name = "Irish Coffee" id = "irishcoffee" description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning." @@ -520,7 +519,7 @@ drink_name = "Irish Coffee" drink_desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning." -/datum/reagent/ethanol/margarita +/datum/reagent/consumable/ethanol/margarita name = "Margarita" id = "margarita" description = "On the rocks with salt on the rim. Arriba~!" @@ -531,7 +530,7 @@ drink_name = "Margarita" drink_desc = "On the rocks with salt on the rim. Arriba~!" -/datum/reagent/ethanol/black_russian +/datum/reagent/consumable/ethanol/black_russian name = "Black Russian" id = "blackrussian" description = "For the lactose-intolerant. Still as classy as a White Russian." @@ -542,7 +541,7 @@ drink_name = "Black Russian" drink_desc = "For the lactose-intolerant. Still as classy as a White Russian." -/datum/reagent/ethanol/manhattan +/datum/reagent/consumable/ethanol/manhattan name = "Manhattan" id = "manhattan" description = "The Detective's undercover drink of choice. He never could stomach gin..." @@ -553,7 +552,7 @@ drink_name = "Manhattan" drink_desc = "The Detective's undercover drink of choice. He never could stomach gin..." -/datum/reagent/ethanol/manhattan_proj +/datum/reagent/consumable/ethanol/manhattan_proj name = "Manhattan Project" id = "manhattan_proj" description = "A scienitst's drink of choice, for pondering ways to blow up the station." @@ -564,7 +563,7 @@ drink_name = "Manhattan Project" drink_desc = "A scienitst drink of choice, for thinking how to blow up the station." -/datum/reagent/ethanol/whiskeysoda +/datum/reagent/consumable/ethanol/whiskeysoda name = "Whiskey Soda" id = "whiskeysoda" description = "Ultimate refreshment." @@ -575,7 +574,7 @@ drink_name = "Whiskey Soda" drink_desc = "Ultimate refreshment." -/datum/reagent/ethanol/antifreeze +/datum/reagent/consumable/ethanol/antifreeze name = "Anti-freeze" id = "antifreeze" description = "Ultimate refreshment." @@ -586,12 +585,12 @@ drink_name = "Anti-freeze" drink_desc = "The ultimate refreshment." -/datum/reagent/ethanol/antifreeze/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/M) if(M.bodytemperature < 330) M.bodytemperature = min(330, M.bodytemperature + (20 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055 ..() -/datum/reagent/ethanol/barefoot +/datum/reagent/consumable/ethanol/barefoot name = "Barefoot" id = "barefoot" description = "Barefoot and pregnant" @@ -602,7 +601,7 @@ drink_name = "Barefoot" drink_desc = "Barefoot and pregnant" -/datum/reagent/ethanol/snowwhite +/datum/reagent/consumable/ethanol/snowwhite name = "Snow White" id = "snowwhite" description = "A cold refreshment" @@ -613,7 +612,7 @@ drink_name = "Snow White" drink_desc = "A cold refreshment." -/datum/reagent/ethanol/demonsblood +/datum/reagent/consumable/ethanol/demonsblood name = "Demons Blood" id = "demonsblood" description = "AHHHH!!!!" @@ -625,7 +624,7 @@ drink_name = "Demons Blood" drink_desc = "Just looking at this thing makes the hair at the back of your neck stand up." -/datum/reagent/ethanol/vodkatonic +/datum/reagent/consumable/ethanol/vodkatonic name = "Vodka and Tonic" id = "vodkatonic" description = "For when a gin and tonic isn't russian enough." @@ -637,7 +636,7 @@ drink_name = "Vodka and Tonic" drink_desc = "For when a gin and tonic isn't russian enough." -/datum/reagent/ethanol/ginfizz +/datum/reagent/consumable/ethanol/ginfizz name = "Gin Fizz" id = "ginfizz" description = "Refreshingly lemony, deliciously dry." @@ -649,7 +648,7 @@ drink_name = "Gin Fizz" drink_desc = "Refreshingly lemony, deliciously dry." -/datum/reagent/ethanol/bahama_mama +/datum/reagent/consumable/ethanol/bahama_mama name = "Bahama mama" id = "bahama_mama" description = "Tropic cocktail." @@ -660,7 +659,7 @@ drink_name = "Bahama Mama" drink_desc = "Tropic cocktail" -/datum/reagent/ethanol/singulo +/datum/reagent/consumable/ethanol/singulo name = "Singulo" id = "singulo" description = "A blue-space beverage!" @@ -672,7 +671,7 @@ drink_name = "Singulo" drink_desc = "A blue-space beverage." -/datum/reagent/ethanol/sbiten +/datum/reagent/consumable/ethanol/sbiten name = "Sbiten" id = "sbiten" description = "A spicy Vodka! Might be a little hot for the little guys!" @@ -683,12 +682,12 @@ drink_name = "Sbiten" drink_desc = "A spicy mix of Vodka and Spice. Very hot." -/datum/reagent/ethanol/sbiten/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/M) if(M.bodytemperature < 360) M.bodytemperature = min(360, M.bodytemperature + (50 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055 ..() -/datum/reagent/ethanol/devilskiss +/datum/reagent/consumable/ethanol/devilskiss name = "Devils Kiss" id = "devilskiss" description = "Creepy time!" @@ -699,7 +698,7 @@ drink_name = "Devils Kiss" drink_desc = "Creepy time!" -/datum/reagent/ethanol/red_mead +/datum/reagent/consumable/ethanol/red_mead name = "Red Mead" id = "red_mead" description = "The true Viking drink! Even though it has a strange red color." @@ -710,7 +709,7 @@ drink_name = "Red Mead" drink_desc = "A True Vikings Beverage, though its color is strange." -/datum/reagent/ethanol/mead +/datum/reagent/consumable/ethanol/mead name = "Mead" id = "mead" description = "A Vikings drink, though a cheap one." @@ -721,7 +720,7 @@ drink_name = "Mead" drink_desc = "A Vikings Beverage, though a cheap one." -/datum/reagent/ethanol/iced_beer +/datum/reagent/consumable/ethanol/iced_beer name = "Iced Beer" id = "iced_beer" description = "A beer which is so cold the air around it freezes." @@ -732,12 +731,12 @@ drink_name = "Iced Beer" drink_desc = "A beer so frosty, the air around it freezes." -/datum/reagent/ethanol/iced_beer/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/M) if(M.bodytemperature > 270) M.bodytemperature = max(270, M.bodytemperature - (20 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055 ..() -/datum/reagent/ethanol/grog +/datum/reagent/consumable/ethanol/grog name = "Grog" id = "grog" description = "Watered down rum, Nanotrasen approves!" @@ -748,7 +747,7 @@ drink_name = "Grog" drink_desc = "A fine and cepa drink for Space." -/datum/reagent/ethanol/aloe +/datum/reagent/consumable/ethanol/aloe name = "Aloe" id = "aloe" description = "So very, very, very good." @@ -759,7 +758,7 @@ drink_name = "Aloe" drink_desc = "Very, very, very good." -/datum/reagent/ethanol/andalusia +/datum/reagent/consumable/ethanol/andalusia name = "Andalusia" id = "andalusia" description = "A nice, strange named drink." @@ -770,7 +769,7 @@ drink_name = "Andalusia" drink_desc = "A nice, strange named drink." -/datum/reagent/ethanol/alliescocktail +/datum/reagent/consumable/ethanol/alliescocktail name = "Allies Cocktail" id = "alliescocktail" description = "A drink made from your allies." @@ -781,7 +780,7 @@ drink_name = "Allies cocktail" drink_desc = "A drink made from your allies." -/datum/reagent/ethanol/acid_spit +/datum/reagent/consumable/ethanol/acid_spit name = "Acid Spit" id = "acidspit" description = "A drink by Nanotrasen. Made from live aliens." @@ -792,7 +791,7 @@ drink_name = "Acid Spit" drink_desc = "A drink from Nanotrasen. Made from live aliens." -/datum/reagent/ethanol/amasec +/datum/reagent/consumable/ethanol/amasec name = "Amasec" id = "amasec" description = "Official drink of the Imperium." @@ -803,7 +802,7 @@ drink_name = "Amasec" drink_desc = "Always handy before COMBAT!!!" -/datum/reagent/ethanol/neurotoxin +/datum/reagent/consumable/ethanol/neurotoxin name = "Neuro-toxin" id = "neurotoxin" description = "A strong neurotoxin that puts the subject into a death-like state." @@ -816,7 +815,7 @@ drink_name = "Neurotoxin" drink_desc = "A drink that is guaranteed to knock you silly." -/datum/reagent/ethanol/neurotoxin/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/neurotoxin/on_mob_life(mob/living/M) M.weakened = max(M.weakened, 3) if(current_cycle >=55) M.Druggy(55) @@ -824,7 +823,7 @@ M.adjustToxLoss(2) ..() -/datum/reagent/ethanol/hippies_delight +/datum/reagent/consumable/ethanol/hippies_delight name = "Hippie's Delight" id = "hippiesdelight" description = "You just don't get it maaaan." @@ -835,7 +834,7 @@ drink_name = "Hippie's Delight" drink_desc = "A drink enjoyed by people during the 1960's." -/datum/reagent/ethanol/hippies_delight/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/M) M.Druggy(50) switch(current_cycle) if(1 to 5) @@ -856,7 +855,7 @@ if(prob(30)) M.emote(pick("twitch","giggle")) ..() -/datum/reagent/ethanol/changelingsting +/datum/reagent/consumable/ethanol/changelingsting name = "Changeling Sting" id = "changelingsting" description = "A stingy drink." @@ -868,7 +867,7 @@ drink_name = "Changeling Sting" drink_desc = "A stingy drink." -/datum/reagent/ethanol/irishcarbomb +/datum/reagent/consumable/ethanol/irishcarbomb name = "Irish Car Bomb" id = "irishcarbomb" description = "Mmm, tastes like chocolate cake..." @@ -880,7 +879,7 @@ drink_name = "Irish Car Bomb" drink_desc = "An irish car bomb." -/datum/reagent/ethanol/syndicatebomb +/datum/reagent/consumable/ethanol/syndicatebomb name = "Syndicate Bomb" id = "syndicatebomb" description = "A Syndicate bomb" @@ -891,7 +890,7 @@ drink_name = "Syndicate Bomb" drink_desc = "A syndicate bomb." -/datum/reagent/ethanol/erikasurprise +/datum/reagent/consumable/ethanol/erikasurprise name = "Erika Surprise" id = "erikasurprise" description = "The surprise is, it's green!" @@ -902,11 +901,11 @@ name = "Erika Surprise" drink_desc = "The surprise is, it's green!" -/datum/reagent/ethanol/driestmartini +/datum/reagent/consumable/ethanol/driestmartini name = "Driest Martini" id = "driestmartini" description = "Only for the experienced. You think you see sand floating in the glass." - nutriment_factor = 1 * FOOD_METABOLISM + nutriment_factor = 1 * REAGENTS_METABOLISM color = "#2E6671" // rgb: 46, 102, 113 alcohol_perc = 0.5 dizzy_adj = 10 @@ -914,12 +913,12 @@ drink_name = "Driest Martini" drink_desc = "Only for the experienced. You think you see sand floating in the glass." -/datum/reagent/ethanol/driestmartini/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/driestmartini/on_mob_life(mob/living/M) if(current_cycle >= 55 && current_cycle < 115) M.stuttering += 10 ..() -/datum/reagent/ethanol/kahlua +/datum/reagent/consumable/ethanol/kahlua name = "Kahlua" id = "kahlua" description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!" @@ -929,7 +928,7 @@ drink_name = "Glass of RR coffee Liquor" drink_desc = "DAMN, THIS THING LOOKS ROBUST" -/datum/reagent/ethanol/kahlua/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/M) M.AdjustDizzy(-5) M.AdjustDrowsy(-3) M.AdjustSleeping(-2) @@ -961,7 +960,7 @@ to_chat(M, "[sonic_message ]") ..() -/datum/reagent/ethanol/applejack +/datum/reagent/consumable/ethanol/applejack name = "Applejack" id = "applejack" description = "A highly concentrated alcoholic beverage made by repeatedly freezing cider and removing the ice." @@ -971,7 +970,7 @@ drink_name = "Glass of applejack" drink_desc = "When cider isn't strong enough, you gotta jack it." -/datum/reagent/ethanol/jackrose +/datum/reagent/consumable/ethanol/jackrose name = "Jack Rose" id = "jackrose" description = "A classic cocktail that had fallen out of fashion, but never out of taste," @@ -981,7 +980,7 @@ drink_name = "Jack Rose" drink_desc = "Drinking this makes you feel like you belong in a luxury hotel bar during the 1920s." -/datum/reagent/ethanol/dragons_breath //inaccessible to players, but here for admin shennanigans +/datum/reagent/consumable/ethanol/dragons_breath //inaccessible to players, but here for admin shennanigans name = "Dragon's Breath" id = "dragonsbreath" description = "Possessing this stuff probably breaks the Geneva convention." @@ -989,12 +988,12 @@ color = "#DC0000" alcohol_perc = 1 -/datum/reagent/ethanol/dragons_breath/reaction_mob(mob/living/M, method=TOUCH, volume) +/datum/reagent/consumable/ethanol/dragons_breath/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == INGEST && prob(20)) if(M.on_fire) M.adjust_fire_stacks(3) -/datum/reagent/ethanol/dragons_breath/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/dragons_breath/on_mob_life(mob/living/M) if(M.reagents.has_reagent("milk")) to_chat(M, "The milk stops the burning. Ahhh.") M.reagents.del_reagent("milk") @@ -1024,7 +1023,7 @@ // ROBOT ALCOHOL PAST THIS POINT // WOOO! -/datum/reagent/ethanol/synthanol +/datum/reagent/consumable/ethanol/synthanol name = "Synthanol" id = "synthanol" description = "A runny liquid with conductive capacities. Its effects on synthetics are similar to those of alcohol on organics." @@ -1037,7 +1036,7 @@ drink_name = "Glass of Synthanol" drink_desc = "The equivalent of alcohol for synthetic crewmembers. They'd find it awful if they had tastebuds too." -/datum/reagent/ethanol/synthanol/on_mob_life(mob/living/M) +/datum/reagent/consumable/ethanol/synthanol/on_mob_life(mob/living/M) if(!M.isSynthetic()) holder.remove_reagent(id, 3.6) //gets removed from organics very fast if(prob(25)) @@ -1045,13 +1044,13 @@ M.fakevomit() ..() -/datum/reagent/ethanol/synthanol/reaction_mob(mob/living/M, method=TOUCH, volume) +/datum/reagent/consumable/ethanol/synthanol/reaction_mob(mob/living/M, method=TOUCH, volume) if(M.isSynthetic()) return if(method == INGEST) to_chat(M, pick("That was awful!", "Yuck!")) -/datum/reagent/ethanol/synthanol/robottears +/datum/reagent/consumable/ethanol/synthanol/robottears name = "Robot Tears" id = "robottears" description = "An oily substance that an IPC could technically consider a 'drink'." @@ -1062,7 +1061,7 @@ drink_name = "Glass of Robot Tears" drink_desc = "No robots were hurt in the making of this drink." -/datum/reagent/ethanol/synthanol/trinary +/datum/reagent/consumable/ethanol/synthanol/trinary name = "Trinary" id = "trinary" description = "A fruit drink meant only for synthetics, however that works." @@ -1073,7 +1072,7 @@ drink_name = "Glass of Trinary" drink_desc = "Colorful drink made for synthetic crewmembers. It doesn't seem like it would taste well." -/datum/reagent/ethanol/synthanol/servo +/datum/reagent/consumable/ethanol/synthanol/servo name = "Servo" id = "servo" description = "A drink containing some organic ingredients, but meant only for synthetics." @@ -1084,7 +1083,7 @@ drink_name = "Glass of Servo" drink_desc = "Chocolate - based drink made for IPCs. Not sure if anyone's actually tried out the recipe." -/datum/reagent/ethanol/synthanol/uplink +/datum/reagent/consumable/ethanol/synthanol/uplink name = "Uplink" id = "uplink" description = "A potent mix of alcohol and synthanol. Will only work on synthetics." @@ -1095,7 +1094,7 @@ drink_name = "Glass of Uplink" drink_desc = "An exquisite mix of the finest liquoirs and synthanol. Meant only for synthetics." -/datum/reagent/ethanol/synthanol/synthnsoda +/datum/reagent/consumable/ethanol/synthanol/synthnsoda name = "Synth 'n Soda" id = "synthnsoda" description = "The classic drink adjusted for a robot's tastes." @@ -1106,7 +1105,7 @@ drink_name = "Glass of Synth 'n Soda" drink_desc = "Classic drink altered to fit the tastes of a robot. Bad idea to drink if you're made of carbon." -/datum/reagent/ethanol/synthanol/synthignon +/datum/reagent/consumable/ethanol/synthanol/synthignon name = "Synthignon" id = "synthignon" description = "Someone mixed wine and alcohol for robots. Hope you're proud of yourself." diff --git a/code/modules/reagents/chemistry/reagents/disease.dm b/code/modules/reagents/chemistry/reagents/disease.dm index 56493362f7c..cfebcfd4b7c 100644 --- a/code/modules/reagents/chemistry/reagents/disease.dm +++ b/code/modules/reagents/chemistry/reagents/disease.dm @@ -139,7 +139,7 @@ //virus foods -/datum/reagent/virus_food +/datum/reagent/consumable/virus_food name = "Virus Food" id = "virusfood" description = "A mixture of water, milk, and oxygen. Virus cells can use this mixture to reproduce." @@ -147,10 +147,6 @@ nutriment_factor = 2 * REAGENTS_METABOLISM color = "#899613" // rgb: 137, 150, 19 -/datum/reagent/virus_food/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor * REAGENTS_EFFECT_MULTIPLIER - ..() - /datum/reagent/mutagen/mutagenvirusfood name = "mutagenic agar" id = "mutagenvirusfood" diff --git a/code/modules/reagents/chemistry/reagents/drink_base.dm b/code/modules/reagents/chemistry/reagents/drink_base.dm index 884451c2dd0..25484983a4f 100644 --- a/code/modules/reagents/chemistry/reagents/drink_base.dm +++ b/code/modules/reagents/chemistry/reagents/drink_base.dm @@ -1,9 +1,8 @@ -/datum/reagent/drink +/datum/reagent/consumable/drink name = "Drink" id = "drink" description = "Uh, some kind of drink." reagent_state = LIQUID - nutriment_factor = 1 * REAGENTS_METABOLISM color = "#E78108" // rgb: 231, 129, 8 var/adj_dizzy = 0 var/adj_drowsy = 0 @@ -11,8 +10,7 @@ var/adj_temp_hot = 0 var/adj_temp_cool = 0 -/datum/reagent/drink/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor +/datum/reagent/consumable/drink/on_mob_life(mob/living/M) if(adj_dizzy) M.AdjustDizzy(adj_dizzy) if(adj_drowsy) diff --git a/code/modules/reagents/chemistry/reagents/drink_cold.dm b/code/modules/reagents/chemistry/reagents/drink_cold.dm index 56e399373e4..ffd43a81840 100644 --- a/code/modules/reagents/chemistry/reagents/drink_cold.dm +++ b/code/modules/reagents/chemistry/reagents/drink_cold.dm @@ -1,8 +1,8 @@ -/datum/reagent/drink/cold +/datum/reagent/consumable/drink/cold name = "Cold drink" adj_temp_cool = 5 -/datum/reagent/drink/cold/tonic +/datum/reagent/consumable/drink/cold/tonic name = "Tonic Water" id = "tonic" description = "It tastes strange but at least the quinine keeps the Space Malaria at bay." @@ -14,7 +14,7 @@ drink_name = "Glass of Tonic Water" drink_desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." -/datum/reagent/drink/cold/sodawater +/datum/reagent/consumable/drink/cold/sodawater name = "Soda Water" id = "sodawater" description = "A can of club soda. Why not make a scotch and soda?" @@ -25,7 +25,7 @@ drink_name = "Glass of Soda Water" drink_desc = "Soda water. Why not make a scotch and soda?" -/datum/reagent/drink/cold/ice +/datum/reagent/consumable/drink/cold/ice name = "Ice" id = "ice" description = "Frozen water, your dentist wouldn't like you chewing this." @@ -36,11 +36,11 @@ drink_name = "Glass of ice" drink_desc = "Generally, you're supposed to put something else in there too..." -/datum/reagent/drink/cold/ice/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/cold/ice/on_mob_life(mob/living/M) M.bodytemperature = max(M.bodytemperature - 5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0) ..() -/datum/reagent/drink/cold/space_cola +/datum/reagent/consumable/drink/cold/space_cola name = "Cola" id = "cola" description = "A refreshing beverage." @@ -51,7 +51,7 @@ drink_name = "Glass of Space Cola" drink_desc = "A glass of refreshing Space Cola" -/datum/reagent/drink/cold/nuka_cola +/datum/reagent/consumable/drink/cold/nuka_cola name = "Nuka Cola" id = "nuka_cola" description = "Cola, cola never changes." @@ -61,7 +61,7 @@ drink_name = "Nuka Cola" drink_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland" -/datum/reagent/drink/cold/nuka_cola/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/cold/nuka_cola/on_mob_life(mob/living/M) M.Jitter(20) M.Druggy(30) M.AdjustDizzy(5) @@ -69,11 +69,11 @@ M.status_flags |= GOTTAGOFAST ..() -/datum/reagent/drink/cold/nuka_cola/on_mob_delete(mob/living/M) +/datum/reagent/consumable/drink/cold/nuka_cola/on_mob_delete(mob/living/M) M.status_flags &= ~GOTTAGOFAST ..() -/datum/reagent/drink/cold/spacemountainwind +/datum/reagent/consumable/drink/cold/spacemountainwind name = "Space Mountain Wind" id = "spacemountainwind" description = "Blows right through you like a space wind." @@ -84,7 +84,7 @@ drink_name = "Glass of Space Mountain Wind" drink_desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind." -/datum/reagent/drink/cold/dr_gibb +/datum/reagent/consumable/drink/cold/dr_gibb name = "Dr. Gibb" id = "dr_gibb" description = "A delicious blend of 42 different flavours" @@ -94,7 +94,7 @@ drink_name = "Glass of Dr. Gibb" drink_desc = "Dr. Gibb. Not as dangerous as the name might imply." -/datum/reagent/drink/cold/space_up +/datum/reagent/consumable/drink/cold/space_up name = "Space-Up" id = "space_up" description = "Tastes like a hull breach in your mouth." @@ -104,14 +104,14 @@ drink_name = "Glass of Space-up" drink_desc = "Space-up. It helps keep your cool." -/datum/reagent/drink/cold/lemon_lime +/datum/reagent/consumable/drink/cold/lemon_lime name = "Lemon Lime" description = "A tangy substance made of 0.5% natural citrus!" id = "lemon_lime" color = "#878F00" // rgb: 135, 40, 0 adj_temp_cool = 8 -/datum/reagent/drink/cold/lemonade +/datum/reagent/consumable/drink/cold/lemonade name = "Lemonade" description = "Oh the nostalgia..." id = "lemonade" @@ -120,7 +120,7 @@ drink_name = "Lemonade" drink_desc = "Oh the nostalgia..." -/datum/reagent/drink/cold/kiraspecial +/datum/reagent/consumable/drink/cold/kiraspecial name = "Kira Special" description = "Long live the guy who everyone had mistaken for a girl. Baka!" id = "kiraspecial" @@ -129,7 +129,7 @@ drink_name = "Kira Special" drink_desc = "Long live the guy who everyone had mistaken for a girl. Baka!" -/datum/reagent/drink/cold/brownstar +/datum/reagent/consumable/drink/cold/brownstar name = "Brown Star" description = "It's not what it sounds like..." id = "brownstar" @@ -139,7 +139,7 @@ drink_name = "Brown Star" drink_desc = "Its not what it sounds like..." -/datum/reagent/drink/cold/milkshake +/datum/reagent/consumable/drink/cold/milkshake name = "Milkshake" description = "Glorious brainfreezing mixture." id = "milkshake" @@ -149,7 +149,7 @@ drink_name = "Milkshake" drink_desc = "Glorious brainfreezing mixture." -/datum/reagent/drink/cold/rewriter +/datum/reagent/consumable/drink/cold/rewriter name = "Rewriter" description = "The secert of the sanctuary of the Libarian..." id = "rewriter" @@ -158,6 +158,6 @@ drink_name = "Rewriter" drink_desc = "The secert of the sanctuary of the Libarian..." -/datum/reagent/drink/cold/rewriter/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/cold/rewriter/on_mob_life(mob/living/M) M.Jitter(5) ..() \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/drinks.dm b/code/modules/reagents/chemistry/reagents/drinks.dm index 58574701a40..eb1c4f5ee68 100644 --- a/code/modules/reagents/chemistry/reagents/drinks.dm +++ b/code/modules/reagents/chemistry/reagents/drinks.dm @@ -1,4 +1,4 @@ -/datum/reagent/drink/orangejuice +/datum/reagent/consumable/drink/orangejuice name = "Orange juice" id = "orangejuice" description = "Both delicious AND rich in Vitamin C, what more do you need?" @@ -7,12 +7,12 @@ drink_name = "Glass of Orange juice" drink_desc = "Vitamins! Yay!" -/datum/reagent/drink/orangejuicde/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/orangejuicde/on_mob_life(mob/living/M) if(M.getOxyLoss() && prob(30)) M.adjustOxyLoss(-1*REM) ..() -/datum/reagent/drink/tomatojuice +/datum/reagent/consumable/drink/tomatojuice name = "Tomato Juice" id = "tomatojuice" description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?" @@ -21,12 +21,12 @@ drink_name = "Glass of Tomato juice" drink_desc = "Are you sure this is tomato juice?" -/datum/reagent/drink/tomatojuice/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/tomatojuice/on_mob_life(mob/living/M) if(M.getFireLoss() && prob(20)) M.adjustFireLoss(-1) ..() -/datum/reagent/drink/limejuice +/datum/reagent/consumable/drink/limejuice name = "Lime Juice" id = "limejuice" description = "The sweet-sour juice of limes." @@ -35,12 +35,12 @@ drink_name = "Glass of Lime juice" drink_desc = "A glass of sweet-sour lime juice." -/datum/reagent/drink/limejuice/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/limejuice/on_mob_life(mob/living/M) if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1) ..() -/datum/reagent/drink/carrotjuice +/datum/reagent/consumable/drink/carrotjuice name = "Carrot juice" id = "carrotjuice" description = "It is just like a carrot but without crunching." @@ -49,7 +49,7 @@ drink_name = "Glass of carrot juice" drink_desc = "It is just like a carrot but without crunching." -/datum/reagent/drink/carrotjuicde/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/carrotjuicde/on_mob_life(mob/living/M) M.AdjustEyeBlurry(-1) M.AdjustEyeBlind(-1) switch(current_cycle) @@ -60,7 +60,7 @@ M.disabilities &= ~NEARSIGHTED ..() -/datum/reagent/drink/doctor_delight +/datum/reagent/consumable/drink/doctor_delight name = "The Doctor's Delight" id = "doctorsdelight" description = "A gulp a day keeps the MediBot away. That's probably for the best." @@ -70,12 +70,26 @@ drink_name = "Doctor's Delight" drink_desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place." -/datum/reagent/drink/doctors_delight/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/doctors_delight/on_mob_life(mob/living/M) if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1) ..() -/datum/reagent/drink/berryjuice +/datum/reagent/consumable/drink/triple_citrus + name = "Triple Citrus" + id = "triple_citrus" + description = "A refreshing mixed drink of orange, lemon and lime juice." + reagent_state = LIQUID + color = "#23A046" + drink_icon = "triplecitrus" + drink_name = "Glass of Triplecitrus Juice" + drink_desc = "As colorful and healthy as it is delicious." + +/datum/reagent/consumable/drink/triple_citrus/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == INGEST) + M.adjustToxLoss(-rand(1,2)) + +/datum/reagent/consumable/drink/berryjuice name = "Berry Juice" id = "berryjuice" description = "A delicious blend of several different kinds of berries." @@ -84,7 +98,7 @@ drink_name = "Glass of berry juice" drink_desc = "Berry juice. Or maybe its jam. Who cares?" -/datum/reagent/drink/poisonberryjuice +/datum/reagent/consumable/drink/poisonberryjuice name = "Poison Berry Juice" id = "poisonberryjuice" description = "A tasty juice blended from various kinds of very deadly and toxic berries." @@ -93,17 +107,17 @@ drink_name = "Glass of poison berry juice" drink_desc = "A glass of deadly juice." -/datum/reagent/drink/poisonberryjuice/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/poisonberryjuice/on_mob_life(mob/living/M) M.adjustToxLoss(1) ..() -/datum/reagent/drink/watermelonjuice +/datum/reagent/consumable/drink/watermelonjuice name = "Watermelon Juice" id = "watermelonjuice" description = "Delicious juice made from watermelon." color = "#863333" // rgb: 134, 51, 51 -/datum/reagent/drink/lemonjuice +/datum/reagent/consumable/drink/lemonjuice name = "Lemon Juice" id = "lemonjuice" description = "This juice is VERY sour." @@ -112,13 +126,13 @@ drink_name = "Glass of lemonjuice" drink_desc = "Sour..." -/datum/reagent/drink/grapejuice +/datum/reagent/consumable/drink/grapejuice name = "Grape Juice" id = "grapejuice" description = "This juice is known to stain shirts." color = "#993399" // rgb: 153, 51, 153 -/datum/reagent/drink/banana +/datum/reagent/consumable/drink/banana name = "Banana Juice" id = "banana" description = "The raw essence of a banana." @@ -127,13 +141,13 @@ drink_name = "Glass of banana juice" drink_desc = "The raw essence of a banana. HONK" -/datum/reagent/drink/banana/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/banana/on_mob_life(mob/living/M) if((ishuman(M) && M.job in list("Clown") ) || issmall(M)) M.adjustBruteLoss(-1) M.adjustFireLoss(-1) ..() -/datum/reagent/drink/nothing +/datum/reagent/consumable/drink/nothing name = "Nothing" id = "nothing" description = "Absolutely nothing." @@ -141,23 +155,23 @@ drink_name = "Nothing" drink_desc = "Absolutely nothing." -/datum/reagent/drink/nothing/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/nothing/on_mob_life(mob/living/M) if(ishuman(M) && M.job in list("Mime")) M.adjustBruteLoss(-1) M.adjustFireLoss(-1) ..() -/datum/reagent/drink/potato_juice +/datum/reagent/consumable/drink/potato_juice name = "Potato Juice" id = "potato" description = "Juice of the potato. Bleh." - nutriment_factor = 2 * FOOD_METABOLISM + nutriment_factor = 2 * REAGENTS_METABOLISM color = "#302000" // rgb: 48, 32, 0 drink_icon = "glass_brown" drink_name = "Glass of potato juice" drink_desc = "Who in the hell requests this? Gross!" -/datum/reagent/drink/milk +/datum/reagent/consumable/drink/milk name = "Milk" id = "milk" description = "An opaque white liquid produced by the mammary glands of mammals." @@ -166,14 +180,14 @@ drink_name = "Glass of milk" drink_desc = "White and nutritious goodness!" -/datum/reagent/drink/milk/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/milk/on_mob_life(mob/living/M) if(M.getBruteLoss() && prob(20)) M.adjustBruteLoss(-1) if(holder.has_reagent("capsaicin")) holder.remove_reagent("capsaicin", 2) ..() -/datum/reagent/drink/milk/soymilk +/datum/reagent/consumable/drink/milk/soymilk name = "Soy Milk" id = "soymilk" description = "An opaque white liquid made from soybeans." @@ -181,7 +195,7 @@ drink_name = "Glass of soy milk" drink_desc = "White and nutritious soy goodness!" -/datum/reagent/drink/milk/cream +/datum/reagent/consumable/drink/milk/cream name = "Cream" id = "cream" description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?" @@ -189,24 +203,24 @@ drink_name = "Glass of cream" drink_desc = "Ewwww..." -/datum/reagent/drink/milk/chocolate_milk +/datum/reagent/consumable/drink/milk/chocolate_milk name = "Chocolate milk" id ="chocolate_milk" description = "Chocolate-flavored milk, tastes like being a kid again." color = "#85432C" -/datum/reagent/drink/hot_coco +/datum/reagent/consumable/drink/hot_coco name = "Hot Chocolate" id = "hot_coco" description = "Made with love! And coco beans." - nutriment_factor = 2 * FOOD_METABOLISM + nutriment_factor = 2 * REAGENTS_METABOLISM color = "#403010" // rgb: 64, 48, 16 adj_temp_hot = 5 drink_icon = "hot_coco" drink_name = "Glass of hot coco" drink_desc = "Delicious and cozy" -/datum/reagent/drink/coffee +/datum/reagent/consumable/drink/coffee name = "Coffee" id = "coffee" description = "Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant." @@ -222,7 +236,7 @@ drink_name = "Glass of coffee" drink_desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere." -/datum/reagent/drink/coffee/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/coffee/on_mob_life(mob/living/M) if(holder.has_reagent("frostoil")) holder.remove_reagent("frostoil", 5) if(prob(50)) @@ -231,11 +245,11 @@ M.AdjustWeakened(-1) ..() -/datum/reagent/drink/coffee/overdose_process(mob/living/M, severity) +/datum/reagent/consumable/drink/coffee/overdose_process(mob/living/M, severity) if(volume > 45) M.Jitter(5) -/datum/reagent/drink/coffee/icecoffee +/datum/reagent/consumable/drink/coffee/icecoffee name = "Iced Coffee" id = "icecoffee" description = "Coffee and ice, refreshing and cool." @@ -246,7 +260,7 @@ drink_name = "Iced Coffee" drink_desc = "A drink to perk you up and refresh you!" -/datum/reagent/drink/coffee/soy_latte +/datum/reagent/consumable/drink/coffee/soy_latte name = "Soy Latte" id = "soy_latte" description = "A nice and tasty beverage while you are reading your hippie books." @@ -257,13 +271,13 @@ drink_name = "Soy Latte" drink_desc = "A nice and refrshing beverage while you are reading." -/datum/reagent/drink/coffee/soy_latte/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/coffee/soy_latte/on_mob_life(mob/living/M) ..() M.SetSleeping(0) if(M.getBruteLoss() && prob(20)) M.adjustBruteLoss(-1) -/datum/reagent/drink/coffee/cafe_latte +/datum/reagent/consumable/drink/coffee/cafe_latte name = "Cafe Latte" id = "cafe_latte" description = "A nice, strong and tasty beverage while you are reading." @@ -274,13 +288,13 @@ drink_name = "Cafe Latte" drink_desc = "A nice, strong and refreshing beverage while you are reading." -/datum/reagent/drink/coffee/cafe_latte/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/coffee/cafe_latte/on_mob_life(mob/living/M) ..() M.SetSleeping(0) if(M.getBruteLoss() && prob(20)) M.adjustBruteLoss(-1) -/datum/reagent/drink/coffee/cafe_latte/cafe_mocha +/datum/reagent/consumable/drink/coffee/cafe_latte/cafe_mocha name = "Cafe Mocha" id = "cafe_mocha" description = "The perfect blend of coffe, milk, and chocolate." @@ -288,7 +302,7 @@ drink_name = "Cafe Mocha" drink_desc = "The perfect blend of coffe, milk, and chocolate." -/datum/reagent/drink/tea +/datum/reagent/consumable/drink/tea name = "Tea" id = "tea" description = "Tasty black tea: It has antioxidants. It's good for you!" @@ -301,12 +315,12 @@ drink_name = "Glass of Tea" drink_desc = "A glass of hot tea. Perhaps a cup with a handle would have been smarter?" -/datum/reagent/drink/tea/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/tea/on_mob_life(mob/living/M) if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1) ..() -/datum/reagent/drink/tea/icetea +/datum/reagent/consumable/drink/tea/icetea name = "Iced Tea" id = "icetea" description = "No relation to a certain rap artist/ actor." @@ -317,33 +331,31 @@ drink_name = "Iced Tea" drink_desc = "No relation to a certain rap artist/ actor." -/datum/reagent/drink/bananahonk +/datum/reagent/consumable/drink/bananahonk name = "Banana Mama" id = "bananahonk" description = "A drink from Clown Heaven." - nutriment_factor = 1 * FOOD_METABOLISM color = "#664300" // rgb: 102, 67, 0 drink_icon = "bananahonkglass" drink_name = "Banana Honk" drink_desc = "A drink from Banana Heaven." -/datum/reagent/drink/bananahonk/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/bananahonk/on_mob_life(mob/living/M) if((ishuman(M) && M.job in list("Clown") ) || issmall(M)) M.adjustBruteLoss(-1) M.adjustFireLoss(-1) ..() -/datum/reagent/drink/silencer +/datum/reagent/consumable/drink/silencer name = "Silencer" id = "silencer" description = "A drink from Mime Heaven." - nutriment_factor = 1 * FOOD_METABOLISM color = "#664300" // rgb: 102, 67, 0 drink_icon = "silencerglass" drink_name = "Silencer" drink_desc = "A drink from mime Heaven." -/datum/reagent/drink/silencer/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/silencer/on_mob_life(mob/living/M) if(ishuman(M) && M.job in list("Mime")) M.adjustBruteLoss(-1) M.adjustFireLoss(-1) diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm index 69864d487a6..f502f697505 100644 --- a/code/modules/reagents/chemistry/reagents/food.dm +++ b/code/modules/reagents/chemistry/reagents/food.dm @@ -1,21 +1,34 @@ /////////////////////////Food Reagents//////////////////////////// // Part of the food code. Nutriment is used instead of the old "heal_amt" code. Also is where all the food // condiments, additives, and such go. -/datum/reagent/nutriment // Pure nutriment, universally digestable and thus slightly less effective + +/datum/reagent/consumable + name = "Consumable" + id = "consumable" + var/nutriment_factor = 1 * REAGENTS_METABOLISM + var/diet_flags = DIET_OMNI | DIET_HERB | DIET_CARN + +/datum/reagent/consumable/on_mob_life(mob/living/M) + if(!(M.mind in ticker.mode.vampires)) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients + H.nutrition += nutriment_factor // For hunger and fatness + ..() + +/datum/reagent/consumable/nutriment // Pure nutriment, universally digestable and thus slightly less effective name = "Nutriment" id = "nutriment" description = "A questionable mixture of various pure nutrients commonly found in processed foods." reagent_state = SOLID nutriment_factor = 12 * REAGENTS_METABOLISM color = "#664330" // rgb: 102, 67, 48 - var/diet_flags = DIET_OMNI | DIET_HERB | DIET_CARN -/datum/reagent/nutriment/on_mob_life(mob/living/M) +/datum/reagent/consumable/nutriment/on_mob_life(mob/living/M) if(!(M.mind in ticker.mode.vampires)) if(ishuman(M)) var/mob/living/carbon/human/H = M if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients - H.nutrition += nutriment_factor // For hunger and fatness if(prob(50)) M.adjustBruteLoss(-1) if(H.species.exotic_blood) @@ -25,31 +38,28 @@ H.vessel.add_reagent("blood", 0.4) ..() -/datum/reagent/nutriment/protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores +/datum/reagent/consumable/nutriment/protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores name = "Protein" id = "protein" description = "Various essential proteins and fats commonly found in animal flesh and blood." nutriment_factor = 15 * REAGENTS_METABOLISM diet_flags = DIET_CARN | DIET_OMNI -/datum/reagent/nutriment/plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores +/datum/reagent/consumable/nutriment/plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores name = "Plant-matter" id = "plantmatter" description = "Vitamin-rich fibers and natural sugars commonly found in fresh produce." nutriment_factor = 15 * REAGENTS_METABOLISM diet_flags = DIET_HERB | DIET_OMNI - -/datum/reagent/vitamin +/datum/reagent/consumable/vitamin name = "Vitamin" id = "vitamin" description = "All the best vitamins, minerals, and carbohydrates the body needs in pure form." reagent_state = SOLID - nutriment_factor = 1 * REAGENTS_METABOLISM color = "#664330" // rgb: 102, 67, 48 -/datum/reagent/vitamin/on_mob_life(mob/living/M) //everyone needs vitamins, so this works on everyone, regardless of diet or if they're a vampire. - M.nutrition += nutriment_factor +/datum/reagent/consumable/vitamin/on_mob_life(mob/living/M) if(prob(50)) M.adjustBruteLoss(-1) M.adjustFireLoss(-1) @@ -62,7 +72,7 @@ H.vessel.add_reagent("blood", 0.5) ..() -/datum/reagent/soysauce +/datum/reagent/consumable/soysauce name = "Soysauce" id = "soysauce" description = "A salty sauce made from the soy plant." @@ -70,7 +80,7 @@ nutriment_factor = 2 * REAGENTS_METABOLISM color = "#792300" // rgb: 121, 35, 0 -/datum/reagent/ketchup +/datum/reagent/consumable/ketchup name = "Ketchup" id = "ketchup" description = "Ketchup, catsup, whatever. It's tomato paste." @@ -78,15 +88,14 @@ nutriment_factor = 5 * REAGENTS_METABOLISM color = "#731008" // rgb: 115, 16, 8 - -/datum/reagent/capsaicin +/datum/reagent/consumable/capsaicin name = "Capsaicin Oil" id = "capsaicin" description = "This is what makes chilis hot." reagent_state = LIQUID color = "#B31008" // rgb: 179, 16, 8 -/datum/reagent/capsaicin/on_mob_life(mob/living/M) +/datum/reagent/consumable/capsaicin/on_mob_life(mob/living/M) switch(current_cycle) if(1 to 15) M.bodytemperature += 5 * TEMPERATURE_DAMAGE_COEFFICIENT @@ -108,7 +117,74 @@ M.bodytemperature += rand(20,25) ..() -/datum/reagent/frostoil +/datum/reagent/consumable/condensedcapsaicin + name = "Condensed Capsaicin" + id = "condensedcapsaicin" + description = "This shit goes in pepperspray." + reagent_state = LIQUID + color = "#B31008" // rgb: 179, 16, 8 + +/datum/reagent/consumable/condensedcapsaicin/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == TOUCH) + if(ishuman(M)) + var/mob/living/carbon/human/victim = M + var/mouth_covered = 0 + var/eyes_covered = 0 + var/obj/item/safe_thing = null + if( victim.wear_mask ) + if( victim.wear_mask.flags & MASKCOVERSEYES ) + eyes_covered = 1 + safe_thing = victim.wear_mask + if( victim.wear_mask.flags & MASKCOVERSMOUTH ) + mouth_covered = 1 + safe_thing = victim.wear_mask + if( victim.head ) + if( victim.head.flags & MASKCOVERSEYES ) + eyes_covered = 1 + safe_thing = victim.head + if( victim.head.flags & MASKCOVERSMOUTH ) + mouth_covered = 1 + safe_thing = victim.head + if(victim.glasses) + eyes_covered = 1 + if( !safe_thing ) + safe_thing = victim.glasses + if( eyes_covered && mouth_covered ) + to_chat(victim, "Your [safe_thing] protects you from the pepperspray!") + return + else if( mouth_covered ) // Reduced effects if partially protected + to_chat(victim, "Your [safe_thing] protect you from most of the pepperspray!") + if(prob(5)) + victim.emote("scream") + victim.EyeBlurry(3) + victim.EyeBlind(1) + victim.Confused(3) + victim.damageoverlaytemp = 60 + victim.Weaken(3) + victim.drop_item() + return + else if( eyes_covered ) // Eye cover is better than mouth cover + to_chat(victim, "Your [safe_thing] protects your eyes from the pepperspray!") + victim.EyeBlurry(3) + victim.damageoverlaytemp = 30 + return + else // Oh dear :D + if(prob(5)) + victim.emote("scream") + to_chat(victim, "You're sprayed directly in the eyes with pepperspray!") + victim.EyeBlurry(5) + victim.EyeBlind(2) + victim.Confused(6) + victim.damageoverlaytemp = 75 + victim.Weaken(5) + victim.drop_item() + +/datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/M) + if(prob(5)) + M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]") + ..() + +/datum/reagent/consumable/frostoil name = "Frost Oil" id = "frostoil" description = "A special oil that noticably chills the body. Extraced from Icepeppers." @@ -116,7 +192,7 @@ color = "#8BA6E9" // rgb: 139, 166, 233 process_flags = ORGANIC | SYNTHETIC -/datum/reagent/frostoil/on_mob_life(mob/living/M) +/datum/reagent/consumable/frostoil/on_mob_life(mob/living/M) switch(current_cycle) if(1 to 15) M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT @@ -142,13 +218,12 @@ M.bodytemperature -= rand(20,25) ..() -/datum/reagent/frostoil/reaction_turf(turf/T, volume) +/datum/reagent/consumable/frostoil/reaction_turf(turf/T, volume) if(volume >= 5) for(var/mob/living/carbon/slime/M in T) M.adjustToxLoss(rand(15,30)) - -/datum/reagent/sodiumchloride +/datum/reagent/consumable/sodiumchloride name = "Salt" id = "sodiumchloride" description = "Sodium chloride, common table salt." @@ -156,18 +231,18 @@ color = "#B1B0B0" overdose_threshold = 100 -/datum/reagent/sodiumchloride/overdose_process(mob/living/M, severity) +/datum/reagent/consumable/sodiumchloride/overdose_process(mob/living/M, severity) if(prob(70)) M.adjustBrainLoss(1) ..() -/datum/reagent/blackpepper +/datum/reagent/consumable/blackpepper name = "Black Pepper" id = "blackpepper" description = "A powder ground from peppercorns. *AAAACHOOO*" reagent_state = SOLID -/datum/reagent/cocoa +/datum/reagent/consumable/cocoa name = "Cocoa Powder" id = "cocoa" description = "A fatty, bitter paste made from cocoa beans." @@ -175,11 +250,7 @@ nutriment_factor = 5 * REAGENTS_METABOLISM color = "#302000" // rgb: 48, 32, 0 -/datum/reagent/cocoa/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor - ..() - -/datum/reagent/hot_coco +/datum/reagent/consumable/hot_coco name = "Hot Chocolate" id = "hot_coco" description = "Made with love! And cocoa beans." @@ -187,28 +258,24 @@ nutriment_factor = 2 * REAGENTS_METABOLISM color = "#403010" // rgb: 64, 48, 16 -/datum/reagent/hot_coco/on_mob_life(mob/living/M) +/datum/reagent/consumable/hot_coco/on_mob_life(mob/living/M) if(M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) - M.nutrition += nutriment_factor ..() -/datum/reagent/sprinkles +/datum/reagent/consumable/sprinkles name = "Sprinkles" id = "sprinkles" description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops." - nutriment_factor = 1 * REAGENTS_METABOLISM color = "#FF00FF" // rgb: 255, 0, 255 -/datum/reagent/sprinkles/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor +/datum/reagent/consumable/sprinkles/on_mob_life(mob/living/M) if(ishuman(M) && M.job in list("Security Officer", "Security Pod Pilot", "Detective", "Warden", "Head of Security", "Brig Physician", "Internal Affairs Agent", "Magistrate")) M.adjustBruteLoss(-1) M.adjustFireLoss(-1) ..() - -/datum/reagent/cornoil +/datum/reagent/consumable/cornoil name = "Corn Oil" id = "cornoil" description = "An oil derived from various types of corn." @@ -216,11 +283,7 @@ nutriment_factor = 20 * REAGENTS_METABOLISM color = "#302000" // rgb: 48, 32, 0 -/datum/reagent/cornoil/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor - ..() - -/datum/reagent/cornoil/reaction_turf(turf/simulated/T, volume) +/datum/reagent/consumable/cornoil/reaction_turf(turf/simulated/T, volume) if(!istype(T)) return if(volume >= 3) @@ -233,29 +296,21 @@ T.assume_air(lowertemp) qdel(hotspot) - -/datum/reagent/enzyme +/datum/reagent/consumable/enzyme name = "Denatured Enzyme" id = "enzyme" description = "Heated beyond usefulness, this enzyme is now worthless." reagent_state = LIQUID color = "#282314" // rgb: 54, 94, 48 - -/datum/reagent/dry_ramen +/datum/reagent/consumable/dry_ramen name = "Dry Ramen" id = "dry_ramen" description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water." reagent_state = SOLID - nutriment_factor = 1 * REAGENTS_METABOLISM color = "#302000" // rgb: 48, 32, 0 -/datum/reagent/dry_ramen/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor - ..() - - -/datum/reagent/hot_ramen +/datum/reagent/consumable/hot_ramen name = "Hot Ramen" id = "hot_ramen" description = "The noodles are boiled, the flavors are artificial, just like being back in school." @@ -263,14 +318,12 @@ nutriment_factor = 5 * REAGENTS_METABOLISM color = "#302000" // rgb: 48, 32, 0 -/datum/reagent/hot_ramen/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor +/datum/reagent/consumable/hot_ramen/on_mob_life(mob/living/M) if(M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT)) ..() - -/datum/reagent/hell_ramen +/datum/reagent/consumable/hell_ramen name = "Hell Ramen" id = "hell_ramen" description = "The noodles are boiled, the flavors are artificial, just like being back in school." @@ -278,88 +331,345 @@ nutriment_factor = 5 * REAGENTS_METABOLISM color = "#302000" // rgb: 48, 32, 0 -/datum/reagent/hell_ramen/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor +/datum/reagent/consumable/hell_ramen/on_mob_life(mob/living/M) M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT ..() - -/datum/reagent/flour +/datum/reagent/consumable/flour name = "flour" id = "flour" description = "This is what you rub all over yourself to pretend to be a ghost." reagent_state = SOLID - nutriment_factor = 1 * REAGENTS_METABOLISM color = "#FFFFFF" // rgb: 0, 0, 0 -/datum/reagent/flour/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor - ..() - -/datum/reagent/flour/reaction_turf(turf/T, volume) +/datum/reagent/consumable/flour/reaction_turf(turf/T, volume) if(!istype(T, /turf/space)) new /obj/effect/decal/cleanable/flour(T) - -/datum/reagent/rice +/datum/reagent/consumable/rice name = "Rice" id = "rice" description = "Enjoy the great taste of nothing." reagent_state = SOLID - nutriment_factor = 1 * REAGENTS_METABOLISM color = "#FFFFFF" // rgb: 0, 0, 0 -/datum/reagent/rice/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor - ..() - - -/datum/reagent/cherryjelly +/datum/reagent/consumable/cherryjelly name = "Cherry Jelly" id = "cherryjelly" description = "Totally the best. Only to be spread on foods with excellent lateral symmetry." reagent_state = LIQUID - nutriment_factor = 1 * REAGENTS_METABOLISM color = "#801E28" // rgb: 128, 30, 40 -/datum/reagent/cherryjelly/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor +/datum/reagent/consumable/egg + name = "Egg" + id = "egg" + description = "A runny and viscous mixture of clear and yellow fluids." + reagent_state = LIQUID + color = "#F0C814" + +/datum/reagent/consumable/egg/on_mob_life(mob/living/M) + if(prob(8)) + M.emote("fart") + if(prob(3)) + M.reagents.add_reagent("cholesterol", rand(1,2)) ..() -/datum/reagent/toxin/coffeepowder - name = "Coffee Grounds" - id = "coffeepowder" - description = "Finely ground Coffee beans, used to make coffee." - reagent_state = SOLID - color = "#5B2E0D" // rgb: 91, 46, 13 - -/datum/reagent/toxin/teapowder - name = "Ground Tea Leaves" - id = "teapowder" - description = "Finely shredded Tea leaves, used for making tea." - reagent_state = SOLID - color = "#7F8400" // rgb: 127, 132, 0 - -//Reagents used for plant fertilizers. -/datum/reagent/toxin/fertilizer - name = "fertilizer" - id = "fertilizer" - description = "A chemical mix good for growing plants with." +/datum/reagent/consumable/corn_starch + name = "Corn Starch" + id = "corn_starch" + description = "The powdered starch of maize, derived from the kernel's endosperm. Used as a thickener for gravies and puddings." reagent_state = LIQUID - color = "#664330" // rgb: 102, 67, 48 + color = "#C8A5DC" -/datum/reagent/toxin/fertilizer/eznutrient - name = "EZ Nutrient" - id = "eznutrient" +/datum/reagent/consumable/corn_syrup + name = "Corn Syrup" + id = "corn_syrup" + description = "A sweet syrup derived from corn starch that has had its starches converted into maltose and other sugars." + reagent_state = LIQUID + color = "#C8A5DC" -/datum/reagent/toxin/fertilizer/left4zed - name = "Left-4-Zed" - id = "left4zed" +/datum/reagent/consumable/corn_syrup/on_mob_life(mob/living/M) + M.reagents.add_reagent("sugar", 1.2) + ..() -/datum/reagent/toxin/fertilizer/robustharvest - name = "Robust Harvest" - id = "robustharvest" +/datum/reagent/consumable/vhfcs + name = "Very-high-fructose corn syrup" + id = "vhfcs" + description = "An incredibly sweet syrup, created from corn syrup treated with enzymes to convert its sugars into fructose." + reagent_state = LIQUID + color = "#C8A5DC" +/datum/reagent/consumable/vhfcs/on_mob_life(mob/living/M) + M.reagents.add_reagent("sugar", 2.4) + ..() + +/datum/reagent/consumable/honey + name = "Honey" + id = "honey" + description = "A sweet substance produced by bees through partial digestion. Bee barf." + reagent_state = LIQUID + color = "#d3a308" + +/datum/reagent/consumable/honey/on_mob_life(mob/living/M) + M.reagents.add_reagent("sugar", 0.4) + if(prob(20)) + M.adjustBruteLoss(-3) + M.adjustFireLoss(-1) + ..() + +/datum/reagent/consumable/chocolate + name = "Chocolate" + id = "chocolate" + description = "Chocolate is a delightful product derived from the seeds of the theobroma cacao tree." + reagent_state = LIQUID + nutriment_factor = 5 * REAGENTS_METABOLISM //same as pure cocoa powder, because it makes no sense that chocolate won't fill you up and make you fat + color = "#2E2418" + drink_icon = "chocolateglass" + drink_name = "Glass of chocolate" + drink_desc = "Tasty" + +/datum/reagent/consumable/chocolate/on_mob_life(mob/living/M) + M.reagents.add_reagent("sugar", 0.8) + ..() + +/datum/reagent/consumable/chocolate/reaction_turf(turf/T, volume) + if(volume >= 5 && !istype(T, /turf/space)) + new /obj/item/weapon/reagent_containers/food/snacks/choc_pile(T) + +/datum/reagent/consumable/mugwort + name = "Mugwort" + id = "mugwort" + description = "A rather bitter herb once thought to hold magical protective properties." + reagent_state = LIQUID + color = "#21170E" + +/datum/reagent/consumable/mugwort/on_mob_life(mob/living/M) + if(ishuman(M) && M.mind) + if(M.mind.special_role == SPECIAL_ROLE_WIZARD) + M.adjustToxLoss(-1*REM) + M.adjustOxyLoss(-1*REM) + M.adjustBruteLoss(-1*REM) + M.adjustFireLoss(-1*REM) + ..() + +/datum/reagent/consumable/porktonium + name = "Porktonium" + id = "porktonium" + description = "A highly-radioactive pork byproduct first discovered in hotdogs." + reagent_state = LIQUID + color = "#AB5D5D" + metabolization_rate = 0.2 + overdose_threshold = 133 + +/datum/reagent/consumable/porktonium/overdose_process(mob/living/M, severity) + if(prob(15)) + M.reagents.add_reagent("cholesterol", rand(1,3)) + if(prob(8)) + M.reagents.add_reagent("radium", 15) + M.reagents.add_reagent("cyanide", 10) + +/datum/reagent/consumable/chicken_soup + name = "Chicken soup" + id = "chicken_soup" + description = "An old household remedy for mild illnesses." + reagent_state = LIQUID + color = "#B4B400" + metabolization_rate = 0.2 + nutriment_factor = 2 + +/datum/reagent/consumable/cheese + name = "Cheese" + id = "cheese" + description = "Some cheese. Pour it out to make it solid." + reagent_state = SOLID + color = "#FFFF00" + metabolization_rate = 0 //heheheh + nutriment_factor = 0 + +/datum/reagent/consumable/cheese/on_mob_life(mob/living/M) + if(prob(3)) + M.reagents.add_reagent("cholesterol", rand(1,2)) + ..() + +/datum/reagent/consumable/cheese/reaction_turf(turf/T, volume) + if(volume >= 5 && !istype(T, /turf/space)) + new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge(T) + +/datum/reagent/consumable/fake_cheese + name = "Cheese substitute" + id = "fake_cheese" + description = "A cheese-like substance derived loosely from actual cheese." + reagent_state = LIQUID + color = "#B2B139" + overdose_threshold = 50 + +/datum/reagent/consumable/fake_cheese/overdose_process(mob/living/M, severity) + if(prob(8)) + to_chat(M, "You feel something squirming in your stomach. Your thoughts turn to cheese and you begin to sweat.") + M.adjustToxLoss(rand(1,2)) + +/datum/reagent/consumable/weird_cheese + name = "Weird cheese" + id = "weird_cheese" + description = "Hell, I don't even know if this IS cheese. Whatever it is, it ain't normal. If you want to, pour it out to make it solid." + reagent_state = SOLID + color = "#50FF00" + metabolization_rate = 0 //heheheh + addiction_chance = 5 + nutriment_factor = 0 + +/datum/reagent/consumable/weird_cheese/on_mob_life(mob/living/M) + if(prob(5)) + M.reagents.add_reagent("cholesterol", rand(1,3)) + ..() + +/datum/reagent/consumable/weird_cheese/reaction_turf(turf/T, volume) + if(volume >= 5 && !istype(T, /turf/space)) + new /obj/item/weapon/reagent_containers/food/snacks/weirdcheesewedge(T) + +/datum/reagent/consumable/beans + name = "Refried beans" + id = "beans" + description = "A dish made of mashed beans cooked with lard." + reagent_state = LIQUID + color = "#684435" + +/datum/reagent/consumable/beans/on_mob_life(mob/living/M) + if(prob(10)) + M.emote("fart") + ..() + +/datum/reagent/consumable/bread + name = "Bread" + id = "bread" + description = "Bread! Yep, bread." + reagent_state = SOLID + color = "#9C5013" + +/datum/reagent/consumable/soybeanoil + name = "Space-soybean oil" + id = "soybeanoil" + description = "An oil derived from extra-terrestrial soybeans." + reagent_state = LIQUID + color = "#B1B0B0" + +/datum/reagent/consumable/soybeanoil/on_mob_life(mob/living/M) + if(prob(10)) + M.reagents.add_reagent("cholesterol", rand(1,3)) + if(prob(8)) + M.reagents.add_reagent("porktonium", 5) + ..() + +/datum/reagent/consumable/hydrogenated_soybeanoil + name = "Partially hydrogenated space-soybean oil" + id = "hydrogenated_soybeanoil" + description = "An oil derived from extra-terrestrial soybeans, with additional hydrogen atoms added to convert it into a saturated form." + reagent_state = LIQUID + color = "#B1B0B0" + metabolization_rate = 0.2 + overdose_threshold = 75 + +/datum/reagent/consumable/hydrogenated_soybeanoil/on_mob_life(mob/living/M) + if(prob(15)) + M.reagents.add_reagent("cholesterol", rand(1,3)) + if(prob(8)) + M.reagents.add_reagent("porktonium", 5) + if(volume >= 75) + metabolization_rate = 0.4 + else + metabolization_rate = 0.2 + ..() + +/datum/reagent/consumable/hydrogenated_soybeanoil/overdose_process(mob/living/M, severity) + if(prob(33)) + to_chat(M, "You feel horribly weak.") + if(prob(10)) + to_chat(M, "You cannot breathe!") + M.adjustOxyLoss(5) + if(prob(5)) + to_chat(M, "You feel a sharp pain in your chest!") + M.adjustOxyLoss(25) + M.Stun(5) + M.Paralyse(10) + +/datum/reagent/consumable/meatslurry + name = "Meat Slurry" + id = "meatslurry" + description = "A paste comprised of highly-processed organic material. Uncomfortably similar to deviled ham spread." + reagent_state = LIQUID + color = "#EBD7D7" + +/datum/reagent/consumable/meatslurry/on_mob_life(mob/living/M) + if(prob(4)) + M.reagents.add_reagent("cholesterol", rand(1,3)) + ..() + +/datum/reagent/consumable/meatslurry/reaction_turf(turf/T, volume) + if(volume >= 5 && prob(10) && !istype(T, /turf/space)) + new /obj/effect/decal/cleanable/blood/gibs/cleangibs(T) + playsound(T, 'sound/effects/splat.ogg', 50, 1, -3) + +/datum/reagent/consumable/mashedpotatoes + name = "Mashed potatoes" + id = "mashedpotatoes" + description = "A starchy food paste made from boiled potatoes." + reagent_state = SOLID + color = "#D6D9C1" + +/datum/reagent/consumable/gravy + name = "Gravy" + id = "gravy" + description = "A savory sauce made from a simple meat-dripping roux and milk." + reagent_state = LIQUID + color = "#B4641B" + +/datum/reagent/consumable/beff + name = "Beff" + id = "beff" + description = "An advanced blend of mechanically-recovered meat and textured synthesized protein product notable for its unusual crystalline grain when sliced." + reagent_state = SOLID + color = "#AC7E67" + +/datum/reagent/consumable/beff/on_mob_life(mob/living/M) + if(prob(5)) + M.reagents.add_reagent("cholesterol", rand(1,3)) + if(prob(8)) + M.reagents.add_reagent(pick("blood", "corn_syrup", "synthflesh", "hydrogenated_soybeanoil", "porktonium", "toxic_slurry"), 0.8) + else if(prob(6)) + to_chat(M, "[pick("You feel ill.","Your stomach churns.","You feel queasy.","You feel sick.")]") + M.emote(pick("groan","moan")) + ..() + +/datum/reagent/consumable/pepperoni + name = "Pepperoni" + id = "pepperoni" + description = "An Italian-American variety of salami usually made from beef and pork" + reagent_state = SOLID + color = "#AC7E67" + +/datum/reagent/consumable/pepperoni/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == TOUCH) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + + if(H.wear_mask) + to_chat(H, "The pepperoni bounces off your mask!") + return + + if(H.head) + to_chat(H, "Your mask protects you from the errant pepperoni!") + return + + if(prob(50)) + M.adjustBruteLoss(1) + playsound(M, 'sound/effects/woodhit.ogg', 50, 1) + to_chat(M, "A slice of pepperoni slaps you!") + else + M.emote("burp") + to_chat(M, "My goodness, that was tasty!") + + +///Food Related, but non-nutritious /datum/reagent/sugar name = "Sugar" @@ -407,127 +717,51 @@ to_chat(M, "Ugh! Eating that was a terrible idea!") M.ForceContractDisease(new /datum/disease/food_poisoning(0)) -/datum/reagent/egg - name = "Egg" - id = "egg" - description = "A runny and viscous mixture of clear and yellow fluids." +/datum/reagent/msg + name = "Monosodium glutamate" + id = "msg" + description = "Monosodium Glutamate is a sodium salt known chiefly for its use as a controversial flavor enhancer." reagent_state = LIQUID - color = "#F0C814" - -/datum/reagent/egg/on_mob_life(mob/living/M) - if(prob(8)) - M.emote("fart") - if(prob(3)) - M.reagents.add_reagent("cholesterol", rand(1,2)) - ..() - -/datum/reagent/triple_citrus - name = "Triple Citrus" - id = "triple_citrus" - description = "A refreshing mixed drink of orange, lemon and lime juice." - reagent_state = LIQUID - color = "#23A046" - drink_icon = "triplecitrus" - drink_name = "Glass of Triplecitrus Juice" - drink_desc = "As colorful and healthy as it is delicious." - -/datum/reagent/triple_citrus/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == INGEST) - M.adjustToxLoss(-rand(1,2)) - -/datum/reagent/corn_starch - name = "Corn Starch" - id = "corn_starch" - description = "The powdered starch of maize, derived from the kernel's endosperm. Used as a thickener for gravies and puddings." - reagent_state = LIQUID - color = "#C8A5DC" - -/datum/reagent/corn_syrup - name = "Corn Syrup" - id = "corn_syrup" - description = "A sweet syrup derived from corn starch that has had its starches converted into maltose and other sugars." - reagent_state = LIQUID - color = "#C8A5DC" - -/datum/reagent/corn_syrup/on_mob_life(mob/living/M) - M.reagents.add_reagent("sugar", 1.2) - ..() - -/datum/reagent/vhfcs - name = "Very-high-fructose corn syrup" - id = "vhfcs" - description = "An incredibly sweet syrup, created from corn syrup treated with enzymes to convert its sugars into fructose." - reagent_state = LIQUID - color = "#C8A5DC" - -/datum/reagent/vhfcs/on_mob_life(mob/living/M) - M.reagents.add_reagent("sugar", 2.4) - ..() - -/datum/reagent/honey - name = "Honey" - id = "honey" - description = "A sweet substance produced by bees through partial digestion. Bee barf." - reagent_state = LIQUID - color = "#d3a308" - -/datum/reagent/honey/on_mob_life(mob/living/M) - M.reagents.add_reagent("sugar", 0.4) - if(prob(20)) - M.heal_organ_damage(3,1) - ..() - -/datum/reagent/chocolate - name = "Chocolate" - id = "chocolate" - description = "Chocolate is a delightful product derived from the seeds of the theobroma cacao tree." - reagent_state = LIQUID - nutriment_factor = 5 * REAGENTS_METABOLISM //same as pure cocoa powder, because it makes no sense that chocolate won't fill you up and make you fat - color = "#2E2418" - drink_icon = "chocolateglass" - drink_name = "Glass of chocolate" - drink_desc = "Tasty" - -/datum/reagent/chocolate/on_mob_life(mob/living/M) - M.nutrition += nutriment_factor - M.reagents.add_reagent("sugar", 0.8) - ..() - -/datum/reagent/chocolate/reaction_turf(turf/T, volume) - if(volume >= 5 && !istype(T, /turf/space)) - new /obj/item/weapon/reagent_containers/food/snacks/choc_pile(T) - -/datum/reagent/mugwort - name = "Mugwort" - id = "mugwort" - description = "A rather bitter herb once thought to hold magical protective properties." - reagent_state = LIQUID - color = "#21170E" - -/datum/reagent/mugwort/on_mob_life(mob/living/M) - if(ishuman(M) && M.mind) - if(M.mind.special_role == SPECIAL_ROLE_WIZARD) - M.adjustToxLoss(-1*REM) - M.adjustOxyLoss(-1*REM) - M.adjustBruteLoss(-1*REM) - M.adjustFireLoss(-1*REM) - ..() - -/datum/reagent/porktonium - name = "Porktonium" - id = "porktonium" - description = "A highly-radioactive pork byproduct first discovered in hotdogs." - reagent_state = LIQUID - color = "#AB5D5D" + color = "#F5F5F5" metabolization_rate = 0.2 - overdose_threshold = 133 -/datum/reagent/porktonium/overdose_process(mob/living/M, severity) - if(prob(15)) - M.reagents.add_reagent("cholesterol", rand(1,3)) - if(prob(8)) - M.reagents.add_reagent("radium", 15) - M.reagents.add_reagent("cyanide", 10) +/datum/reagent/msg/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == INGEST) + to_chat(M, "That tasted amazing!") + +/datum/reagent/msg/on_mob_life(mob/living/M) + if(prob(5)) + if(prob(10)) + M.adjustToxLoss(rand(2.4)) + if(prob(7)) + to_chat(M, "A horrible migraine overpowers you.") + M.Stun(rand(2,5)) + ..() + +/datum/reagent/cholesterol + name = "cholesterol" + id = "cholesterol" + description = "Pure cholesterol. Probably not very good for you." + reagent_state = LIQUID + color = "#FFFAC8" + +/datum/reagent/cholesterol/on_mob_life(mob/living/M) + if(volume >= 25 && prob(volume*0.15)) + to_chat(M, "Your chest feels [pick("weird","uncomfortable","nasty","gross","odd","unusual","warm")]!") + M.adjustToxLoss(rand(1,2)) + else if(volume >= 45 && prob(volume*0.08)) + to_chat(M, "Your chest [pick("hurts","stings","aches","burns")]!") + M.adjustToxLoss(rand(2,4)) + M.Stun(1) + else if(volume >= 150 && prob(volume*0.01)) + to_chat(M, "Your chest is burning with pain!") + M.Stun(1) + M.Weaken(1) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(!H.heart_attack) + H.heart_attack = 1 + ..() /datum/reagent/fungus name = "Space fungus" @@ -548,109 +782,32 @@ else to_chat(M, "Yuck!") -/datum/reagent/chicken_soup - name = "Chicken soup" - id = "chicken_soup" - description = "An old household remedy for mild illnesses." +/datum/reagent/ectoplasm + name = "Ectoplasm" + id = "ectoplasm" + description = "A bizarre gelatinous substance supposedly derived from ghosts." reagent_state = LIQUID - color = "#B4B400" - metabolization_rate = 0.2 + color = "#8EAE7B" + process_flags = ORGANIC | SYNTHETIC //Because apparently ghosts in the shell -/datum/reagent/chicken_soup/on_mob_life(mob/living/M) - M.nutrition += 2 - ..() - -/datum/reagent/msg - name = "Monosodium glutamate" - id = "msg" - description = "Monosodium Glutamate is a sodium salt known chiefly for its use as a controversial flavor enhancer." - reagent_state = LIQUID - color = "#F5F5F5" - metabolization_rate = 0.2 - -/datum/reagent/msg/reaction_mob(mob/living/M, method=TOUCH, volume) +/datum/reagent/ectoplasm/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == INGEST) - to_chat(M, "That tasted amazing!") + var/spooky_eat = pick("Ugh, why did you eat that? Your mouth feels haunted. Haunted with bad flavors.", "Ugh, why did you eat that? It has the texture of ham aspic. From the 1950s. Left out in the sun.", "Ugh, why did you eat that? It tastes like a ghost fart.", "Ugh, why did you eat that? It tastes like flavor died.") + to_chat(M, "[spooky_eat]") - -/datum/reagent/msg/on_mob_life(mob/living/M) - if(prob(5)) - if(prob(10)) - M.adjustToxLoss(rand(2.4)) - if(prob(7)) - to_chat(M, "A horrible migraine overpowers you.") - M.Stun(rand(2,5)) - ..() - -/datum/reagent/cheese - name = "Cheese" - id = "cheese" - description = "Some cheese. Pour it out to make it solid." - reagent_state = SOLID - color = "#FFFF00" - metabolization_rate = 0 //heheheh - - -/datum/reagent/cheese/on_mob_life(mob/living/M) - if(prob(3)) - M.reagents.add_reagent("cholesterol", rand(1,2)) - ..() - -/datum/reagent/cheese/reaction_turf(turf/T, volume) - if(volume >= 5 && !istype(T, /turf/space)) - new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge(T) - -/datum/reagent/fake_cheese - name = "Cheese substitute" - id = "fake_cheese" - description = "A cheese-like substance derived loosely from actual cheese." - reagent_state = LIQUID - color = "#B2B139" - overdose_threshold = 50 - -/datum/reagent/fake_cheese/overdose_process(mob/living/M, severity) +/datum/reagent/ectoplasm/on_mob_life(mob/living/M) + var/spooky_message = pick("You notice something moving out of the corner of your eye, but nothing is there...", "Your eyes twitch, you feel like something you can't see is here...", "You've got the heebie-jeebies.", "You feel uneasy.", "You shudder as if cold...", "You feel something gliding across your back...") if(prob(8)) - to_chat(M, "You feel something squirming in your stomach. Your thoughts turn to cheese and you begin to sweat.") - M.adjustToxLoss(rand(1,2)) - -/datum/reagent/weird_cheese - name = "Weird cheese" - id = "weird_cheese" - description = "Hell, I don't even know if this IS cheese. Whatever it is, it ain't normal. If you want to, pour it out to make it solid." - reagent_state = SOLID - color = "#50FF00" - metabolization_rate = 0 //heheheh - addiction_chance = 5 - -/datum/reagent/weird_cheese/on_mob_life(mob/living/M) - if(prob(5)) - M.reagents.add_reagent("cholesterol", rand(1,3)) + to_chat(M, "[spooky_message]") ..() -/datum/reagent/weird_cheese/reaction_turf(turf/T, volume) - if(volume >= 5 && !istype(T, /turf/space)) - new /obj/item/weapon/reagent_containers/food/snacks/weirdcheesewedge(T) +/datum/reagent/ectoplasm/reaction_turf(turf/T, volume) + if(volume >= 10 && !istype(T, /turf/space)) + new /obj/item/weapon/reagent_containers/food/snacks/ectoplasm(T) -/datum/reagent/beans - name = "Refried beans" - id = "beans" - description = "A dish made of mashed beans cooked with lard." - reagent_state = LIQUID - color = "#684435" +///Vomit/// -/datum/reagent/beans/on_mob_life(mob/living/M) - if(prob(10)) - M.emote("fart") - ..() - -/datum/reagent/bread - name = "Bread" - id = "bread" - description = "Bread! Yep, bread." - reagent_state = SOLID - color = "#9C5013" - -/datum/reagent/bread/reaction_turf(turf/T, volume) +/datum/reagent/consumable/bread/reaction_turf(turf/T, volume) if(volume >= 5 && !istype(T, /turf/space)) new /obj/item/weapon/reagent_containers/food/snacks/breadslice(T) @@ -676,175 +833,4 @@ /datum/reagent/greenvomit/reaction_turf(turf/T, volume) if(volume >= 5 && !istype(T, /turf/space)) new /obj/effect/decal/cleanable/vomit/green(T) - playsound(T, 'sound/effects/splat.ogg', 50, 1, -3) - - -/datum/reagent/ectoplasm - name = "Ectoplasm" - id = "ectoplasm" - description = "A bizarre gelatinous substance supposedly derived from ghosts." - reagent_state = LIQUID - color = "#8EAE7B" - process_flags = ORGANIC | SYNTHETIC //Because apparently ghosts in the shell - -/datum/reagent/ectoplasm/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == INGEST) - var/spooky_eat = pick("Ugh, why did you eat that? Your mouth feels haunted. Haunted with bad flavors.", "Ugh, why did you eat that? It has the texture of ham aspic. From the 1950s. Left out in the sun.", "Ugh, why did you eat that? It tastes like a ghost fart.", "Ugh, why did you eat that? It tastes like flavor died.") - to_chat(M, "[spooky_eat]") - -/datum/reagent/ectoplasm/on_mob_life(mob/living/M) - var/spooky_message = pick("You notice something moving out of the corner of your eye, but nothing is there...", "Your eyes twitch, you feel like something you can't see is here...", "You've got the heebie-jeebies.", "You feel uneasy.", "You shudder as if cold...", "You feel something gliding across your back...") - if(prob(8)) - to_chat(M, "[spooky_message]") - ..() - -/datum/reagent/ectoplasm/reaction_turf(turf/T, volume) - if(volume >= 10 && !istype(T, /turf/space)) - new /obj/item/weapon/reagent_containers/food/snacks/ectoplasm(T) - -/datum/reagent/soybeanoil - name = "Space-soybean oil" - id = "soybeanoil" - description = "An oil derived from extra-terrestrial soybeans." - reagent_state = LIQUID - color = "#B1B0B0" - -/datum/reagent/soybeanoil/on_mob_life(mob/living/M) - if(prob(10)) - M.reagents.add_reagent("cholesterol", rand(1,3)) - if(prob(8)) - M.reagents.add_reagent("porktonium", 5) - ..() - -/datum/reagent/hydrogenated_soybeanoil - name = "Partially hydrogenated space-soybean oil" - id = "hydrogenated_soybeanoil" - description = "An oil derived from extra-terrestrial soybeans, with additional hydrogen atoms added to convert it into a saturated form." - reagent_state = LIQUID - color = "#B1B0B0" - metabolization_rate = 0.2 - overdose_threshold = 75 - -/datum/reagent/hydrogenated_soybeanoil/on_mob_life(mob/living/M) - if(prob(15)) - M.reagents.add_reagent("cholesterol", rand(1,3)) - if(prob(8)) - M.reagents.add_reagent("porktonium", 5) - if(volume >= 75) - metabolization_rate = 0.4 - else - metabolization_rate = 0.2 - ..() - -/datum/reagent/hydrogenated_soybeanoil/overdose_process(mob/living/M, severity) - if(prob(33)) - to_chat(M, "You feel horribly weak.") - if(prob(10)) - to_chat(M, "You cannot breathe!") - M.adjustOxyLoss(5) - if(prob(5)) - to_chat(M, "You feel a sharp pain in your chest!") - M.adjustOxyLoss(25) - M.Stun(5) - M.Paralyse(10) - -/datum/reagent/meatslurry - name = "Meat Slurry" - id = "meatslurry" - description = "A paste comprised of highly-processed organic material. Uncomfortably similar to deviled ham spread." - reagent_state = LIQUID - color = "#EBD7D7" - -/datum/reagent/meatslurry/on_mob_life(mob/living/M) - if(prob(4)) - M.reagents.add_reagent("cholesterol", rand(1,3)) - ..() - -/datum/reagent/meatslurry/reaction_turf(turf/T, volume) - if(volume >= 5 && prob(10) && !istype(T, /turf/space)) - new /obj/effect/decal/cleanable/blood/gibs/cleangibs(T) - playsound(T, 'sound/effects/splat.ogg', 50, 1, -3) - -/datum/reagent/mashedpotatoes - name = "Mashed potatoes" - id = "mashedpotatoes" - description = "A starchy food paste made from boiled potatoes." - reagent_state = SOLID - color = "#D6D9C1" - -/datum/reagent/gravy - name = "Gravy" - id = "gravy" - description = "A savory sauce made from a simple meat-dripping roux and milk." - reagent_state = LIQUID - color = "#B4641B" - -/datum/reagent/beff - name = "Beff" - id = "beff" - description = "An advanced blend of mechanically-recovered meat and textured synthesized protein product notable for its unusual crystalline grain when sliced." - reagent_state = SOLID - color = "#AC7E67" - -/datum/reagent/beff/on_mob_life(mob/living/M) - if(prob(5)) - M.reagents.add_reagent("cholesterol", rand(1,3)) - if(prob(8)) - M.reagents.add_reagent(pick("blood", "corn_syrup", "synthflesh", "hydrogenated_soybeanoil", "porktonium", "toxic_slurry"), 0.8) - else if(prob(6)) - to_chat(M, "[pick("You feel ill.","Your stomach churns.","You feel queasy.","You feel sick.")]") - M.emote(pick("groan","moan")) - ..() - -/datum/reagent/pepperoni - name = "Pepperoni" - id = "pepperoni" - description = "An Italian-American variety of salami usually made from beef and pork" - reagent_state = SOLID - color = "#AC7E67" - -/datum/reagent/pepperoni/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - if(H.wear_mask) - to_chat(H, "The pepperoni bounces off your mask!") - return - - if(H.head) - to_chat(H, "Your mask protects you from the errant pepperoni!") - return - - if(prob(50)) - M.adjustBruteLoss(1) - playsound(M, 'sound/effects/woodhit.ogg', 50, 1) - to_chat(M, "A slice of pepperoni slaps you!") - else - M.emote("burp") - to_chat(M, "My goodness, that was tasty!") - -/datum/reagent/cholesterol - name = "cholesterol" - id = "cholesterol" - description = "Pure cholesterol. Probably not very good for you." - reagent_state = LIQUID - color = "#FFFAC8" - -/datum/reagent/cholesterol/on_mob_life(mob/living/M) - if(volume >= 25 && prob(volume*0.15)) - to_chat(M, "Your chest feels [pick("weird","uncomfortable","nasty","gross","odd","unusual","warm")]!") - M.adjustToxLoss(rand(1,2)) - else if(volume >= 45 && prob(volume*0.08)) - to_chat(M, "Your chest [pick("hurts","stings","aches","burns")]!") - M.adjustToxLoss(rand(2,4)) - M.Stun(1) - else if(volume >= 150 && prob(volume*0.01)) - to_chat(M, "Your chest is burning with pain!") - M.Stun(1) - M.Weaken(1) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(!H.heart_attack) - H.heart_attack = 1 - ..() \ No newline at end of file + playsound(T, 'sound/effects/splat.ogg', 50, 1, -3) \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index 96ddcb5be3b..2f4df5ee4aa 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -691,7 +691,7 @@ /datum/reagent/medicine/antihol/on_mob_life(mob/living/M) M.SetSlur(0) M.AdjustDrunk(-4) - M.reagents.remove_all_type(/datum/reagent/ethanol, 8, 0, 1) + M.reagents.remove_all_type(/datum/reagent/consumable/ethanol, 8, 0, 1) if(M.toxloss <= 25) M.adjustToxLoss(-2.0) ..() diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm index 9837e2e27dc..aa8e7b93f6d 100644 --- a/code/modules/reagents/chemistry/reagents/misc.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -416,6 +416,40 @@ M.say(pick("Bzzz...","BZZ BZZ","Bzzzzzzzzzzz...")) ..() +/datum/reagent/toxin/coffeepowder + name = "Coffee Grounds" + id = "coffeepowder" + description = "Finely ground Coffee beans, used to make coffee." + reagent_state = SOLID + color = "#5B2E0D" // rgb: 91, 46, 13 + +/datum/reagent/toxin/teapowder + name = "Ground Tea Leaves" + id = "teapowder" + description = "Finely shredded Tea leaves, used for making tea." + reagent_state = SOLID + color = "#7F8400" // rgb: 127, 132, 0 + +//Reagents used for plant fertilizers. +/datum/reagent/toxin/fertilizer + name = "fertilizer" + id = "fertilizer" + description = "A chemical mix good for growing plants with." + reagent_state = LIQUID + color = "#664330" // rgb: 102, 67, 48 + +/datum/reagent/toxin/fertilizer/eznutrient + name = "EZ Nutrient" + id = "eznutrient" + +/datum/reagent/toxin/fertilizer/left4zed + name = "Left-4-Zed" + id = "left4zed" + +/datum/reagent/toxin/fertilizer/robustharvest + name = "Robust Harvest" + id = "robustharvest" + ///Alchemical Reagents /datum/reagent/eyenewt diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index abffbcde16e..5870e4fad00 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -332,73 +332,6 @@ ..() /////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/datum/reagent/condensedcapsaicin - name = "Condensed Capsaicin" - id = "condensedcapsaicin" - description = "This shit goes in pepperspray." - reagent_state = LIQUID - color = "#B31008" // rgb: 179, 16, 8 - -/datum/reagent/condensedcapsaicin/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) - if(ishuman(M)) - var/mob/living/carbon/human/victim = M - var/mouth_covered = 0 - var/eyes_covered = 0 - var/obj/item/safe_thing = null - if( victim.wear_mask ) - if( victim.wear_mask.flags & MASKCOVERSEYES ) - eyes_covered = 1 - safe_thing = victim.wear_mask - if( victim.wear_mask.flags & MASKCOVERSMOUTH ) - mouth_covered = 1 - safe_thing = victim.wear_mask - if( victim.head ) - if( victim.head.flags & MASKCOVERSEYES ) - eyes_covered = 1 - safe_thing = victim.head - if( victim.head.flags & MASKCOVERSMOUTH ) - mouth_covered = 1 - safe_thing = victim.head - if(victim.glasses) - eyes_covered = 1 - if( !safe_thing ) - safe_thing = victim.glasses - if( eyes_covered && mouth_covered ) - to_chat(victim, "Your [safe_thing] protects you from the pepperspray!") - return - else if( mouth_covered ) // Reduced effects if partially protected - to_chat(victim, "Your [safe_thing] protect you from most of the pepperspray!") - if(prob(5)) - victim.emote("scream") - victim.EyeBlurry(3) - victim.EyeBlind(1) - victim.Confused(3) - victim.damageoverlaytemp = 60 - victim.Weaken(3) - victim.drop_item() - return - else if( eyes_covered ) // Eye cover is better than mouth cover - to_chat(victim, "Your [safe_thing] protects your eyes from the pepperspray!") - victim.EyeBlurry(3) - victim.damageoverlaytemp = 30 - return - else // Oh dear :D - if(prob(5)) - victim.emote("scream") - to_chat(victim, "You're sprayed directly in the eyes with pepperspray!") - victim.EyeBlurry(5) - victim.EyeBlind(2) - victim.Confused(6) - victim.damageoverlaytemp = 75 - victim.Weaken(5) - victim.drop_item() - -/datum/reagent/condensedcapsaicin/on_mob_life(mob/living/M) - if(prob(5)) - M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]") - ..() - /datum/reagent/polonium name = "Polonium" id = "polonium" diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 18f0e51b2e2..5dd4d570ee2 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -327,7 +327,7 @@ // Coffee is really bad for you with busted kidneys. // This should probably be expanded in some way, but fucked if I know // what else kidneys can process in our reagent list. - var/datum/reagent/coffee = locate(/datum/reagent/drink/coffee) in owner.reagents.reagent_list + var/datum/reagent/coffee = locate(/datum/reagent/consumable/drink/coffee) in owner.reagents.reagent_list if(coffee) if(is_bruised()) owner.adjustToxLoss(0.1 * PROCESS_ACCURACY) @@ -416,7 +416,7 @@ if(src.damage >= src.min_bruised_damage) for(var/datum/reagent/R in owner.reagents.reagent_list) // Ethanol and all drinks are bad - if(istype(R, /datum/reagent/ethanol)) + if(istype(R, /datum/reagent/consumable/ethanol)) owner.adjustToxLoss(0.1 * PROCESS_ACCURACY) // Can't cope with toxins at all From 42dd03b2cf97ea18e65064d35ca23f8f34d37da6 Mon Sep 17 00:00:00 2001 From: Markolie Date: Tue, 8 Nov 2016 16:31:48 +0100 Subject: [PATCH 036/193] Fix up buildmode log --- code/modules/admin/buildmode.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm index 8ad4bfcbb0e..72461ed6ae1 100644 --- a/code/modules/admin/buildmode.dm +++ b/code/modules/admin/buildmode.dm @@ -405,7 +405,7 @@ log_admin("[key_name(usr)] has left build mode.") else new/datum/click_intercept/buildmode(M.client) - message_admins("[key_name(usr)] has entered build mode.") + message_admins("[key_name_admin(usr)] has entered build mode.") log_admin("[key_name(usr)] has entered build mode.") /datum/click_intercept/buildmode/InterceptClickOn(user,params,atom/object) //Click Intercept From 75176722e7ef5dfb836e64a64e232c2ad30fb76c Mon Sep 17 00:00:00 2001 From: Markolie Date: Tue, 8 Nov 2016 17:01:44 +0100 Subject: [PATCH 037/193] Add OOC throttling --- code/__DEFINES/misc.dm | 3 +++ code/game/verbs/ooc.dm | 4 ++-- code/modules/admin/verbs/adminhelp.dm | 2 +- code/modules/admin/verbs/adminpm.dm | 2 +- code/modules/admin/verbs/pray.dm | 2 +- code/modules/client/client defines.dm | 5 +++-- code/modules/client/client procs.dm | 24 +++++++++++++++--------- 7 files changed, 26 insertions(+), 16 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index dad6165400f..e271654146c 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -287,3 +287,6 @@ #define SHELTER_DEPLOY_BAD_TURFS "bad turfs" #define SHELTER_DEPLOY_BAD_AREA "bad area" #define SHELTER_DEPLOY_ANCHORED_OBJECTS "anchored objects" + +// The cooldown on OOC messages such as OOC, LOOC, praying and adminhelps +#define OOC_COOLDOWN 20 diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 2c896f3dbdf..f209e652b38 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -32,7 +32,7 @@ var/global/admin_ooc_colour = "#b82e00" if(prefs.muted & MUTE_OOC) to_chat(src, "You cannot use OOC (muted).") return - if(handle_spam_prevention(msg, MUTE_OOC)) + if(handle_spam_prevention(msg, MUTE_OOC, OOC_COOLDOWN)) return if(findtext(msg, "byond://")) to_chat(src, "Advertising other servers is not allowed.") @@ -168,7 +168,7 @@ var/global/admin_ooc_colour = "#b82e00" if(prefs.muted & MUTE_OOC) to_chat(src, "You cannot use LOOC (muted).") return - if(handle_spam_prevention(msg,MUTE_OOC)) + if(handle_spam_prevention(msg, MUTE_OOC, OOC_COOLDOWN)) return if(findtext(msg, "byond://")) to_chat(src, "Advertising other servers is not allowed.") diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index d78ef5dcde3..c17671995ff 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -24,7 +24,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(!msg) return - if(src.handle_spam_prevention(msg,MUTE_ADMINHELP)) + if(handle_spam_prevention(msg, MUTE_ADMINHELP, OOC_COOLDOWN)) return msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN)) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index d711a3f5910..63241ce43c5 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -99,7 +99,7 @@ adminhelp(msg) //admin we are replying to has vanished, adminhelp instead return - if(src.handle_spam_prevention(msg,MUTE_ADMINHELP)) + if(handle_spam_prevention(msg, MUTE_ADMINHELP, OOC_COOLDOWN)) return //clean the message if it's not sent by a high-rank admin diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 03365b38385..486b95f5a1b 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -9,7 +9,7 @@ if(usr.client.prefs.muted & MUTE_PRAY) to_chat(usr, "\red You cannot pray (muted).") return - if(src.client.handle_spam_prevention(msg,MUTE_PRAY)) + if(client.handle_spam_prevention(msg, MUTE_PRAY, OOC_COOLDOWN)) return var/image/cross = image('icons/obj/storage.dmi',"bible") diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index c1cbd07daee..8f2adef5a1b 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -4,8 +4,9 @@ //////////////// var/datum/admins/holder = null - var/last_message = "" //Contains the last message sent by this client - used to protect against copy-paste spamming. - var/last_message_count = 0 //contins a number of how many times a message identical to last_message was sent. + var/last_message = "" //contains the last message sent by this client - used to protect against copy-paste spamming. + var/last_message_count = 0 //contains a number of how many times a message identical to last_message was sent. + var/last_message_time = 0 //holds the last time (based on world.time) a message was sent ///////// //OTHER// diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 7a668e375fc..b13fd42c38e 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -233,19 +233,25 @@ return 0 return 1 -/client/proc/handle_spam_prevention(var/message, var/mute_type) - if(config.automute_on && !holder && src.last_message == message) - src.last_message_count++ - if(src.last_message_count >= SPAM_TRIGGER_AUTOMUTE) - to_chat(src, "\red You have exceeded the spam filter limit for identical messages. An auto-mute was applied.") - cmd_admin_mute(src.mob, mute_type, 1) +/client/proc/handle_spam_prevention(var/message, var/mute_type, var/throttle = 0) + if(config.automute_on && !holder && last_message == message) + last_message_count++ + if(last_message_count >= SPAM_TRIGGER_AUTOMUTE) + to_chat(src, "You have exceeded the spam filter limit for identical messages. An auto-mute was applied.") + cmd_admin_mute(mob, mute_type, 1) return 1 - if(src.last_message_count >= SPAM_TRIGGER_WARNING) - to_chat(src, "\red You are nearing the spam filter limit for identical messages.") + if(last_message_count >= SPAM_TRIGGER_WARNING) + to_chat(src, "You are nearing the spam filter limit for identical messages.") return 0 + else if(throttle) + if((last_message_time + throttle > world.time) && !check_rights(R_ADMIN, 0)) + var/wait_time = round(((last_message_time + throttle) - world.time) / 10, 1) + to_chat(src, "You are sending messages to quickly. Please wait [wait_time] [wait_time == 1 ? "second" : "seconds"] before sending another message.") + return 1 + last_message_time = world.time else last_message = message - src.last_message_count = 0 + last_message_count = 0 return 0 //This stops files larger than UPLOAD_LIMIT being sent from client to server via input(), client.Import() etc. From 34c3e7fb8a9ab41ee08132908153e1551887b93d Mon Sep 17 00:00:00 2001 From: Markolie Date: Tue, 8 Nov 2016 17:08:52 +0100 Subject: [PATCH 038/193] Prioritize throttle, better admin right check --- code/modules/client/client procs.dm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index b13fd42c38e..17c454bb7e2 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -234,7 +234,13 @@ return 1 /client/proc/handle_spam_prevention(var/message, var/mute_type, var/throttle = 0) - if(config.automute_on && !holder && last_message == message) + if(throttle) + if((last_message_time + throttle > world.time) && !check_rights(R_ADMIN, 0)) + var/wait_time = round(((last_message_time + throttle) - world.time) / 10, 1) + to_chat(src, "You are sending messages to quickly. Please wait [wait_time] [wait_time == 1 ? "second" : "seconds"] before sending another message.") + return 1 + last_message_time = world.time + if(config.automute_on && !check_rights(R_ADMIN, 0) && last_message == message) last_message_count++ if(last_message_count >= SPAM_TRIGGER_AUTOMUTE) to_chat(src, "You have exceeded the spam filter limit for identical messages. An auto-mute was applied.") @@ -243,12 +249,6 @@ if(last_message_count >= SPAM_TRIGGER_WARNING) to_chat(src, "You are nearing the spam filter limit for identical messages.") return 0 - else if(throttle) - if((last_message_time + throttle > world.time) && !check_rights(R_ADMIN, 0)) - var/wait_time = round(((last_message_time + throttle) - world.time) / 10, 1) - to_chat(src, "You are sending messages to quickly. Please wait [wait_time] [wait_time == 1 ? "second" : "seconds"] before sending another message.") - return 1 - last_message_time = world.time else last_message = message last_message_count = 0 From 30f5874ca861fcccee4751e6a3f39ea077ef77c8 Mon Sep 17 00:00:00 2001 From: Markolie Date: Tue, 8 Nov 2016 18:08:52 +0100 Subject: [PATCH 039/193] Reduce the cooldown to 1 second --- code/__DEFINES/misc.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index e271654146c..6b9f2b4a9a1 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -289,4 +289,4 @@ #define SHELTER_DEPLOY_ANCHORED_OBJECTS "anchored objects" // The cooldown on OOC messages such as OOC, LOOC, praying and adminhelps -#define OOC_COOLDOWN 20 +#define OOC_COOLDOWN 10 From c0f28fd0aa3afc6466074faba89967847e5a3834 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 9 Nov 2016 00:51:54 -0500 Subject: [PATCH 040/193] fix a ref id error --- code/modules/recycling/conveyor2.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 2a36ba585df..1e56d9d6d57 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -300,7 +300,7 @@ /obj/machinery/conveyor_switch/multitool_menu(var/mob/user, var/obj/item/device/multitool/P) return {" "} From 4ae1855a647121e340770c8409ffd3c6c5240298 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Wed, 9 Nov 2016 07:46:38 +0100 Subject: [PATCH 041/193] Reduce cooldown to 0.5 seconds --- code/__DEFINES/misc.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 6b9f2b4a9a1..dcb4501ce6e 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -289,4 +289,4 @@ #define SHELTER_DEPLOY_ANCHORED_OBJECTS "anchored objects" // The cooldown on OOC messages such as OOC, LOOC, praying and adminhelps -#define OOC_COOLDOWN 10 +#define OOC_COOLDOWN 5 From 0f1ae264f8c56e2f6b7465be4900fda7e4329e35 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Wed, 9 Nov 2016 04:28:51 -0500 Subject: [PATCH 042/193] Resolves a runtime with alt icons. The runtime occurred when get_icon_state() attempted to handle_alt_icon on a head, even if if was a stump. Adds sanity to check if it's a stump or if the organ's destroyed (as how it's handled in update_icons for mobs) and resolves the runtime and #5863. --- code/modules/surgery/organs/organ_icon.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm index 272adcad52c..03690ef3279 100644 --- a/code/modules/surgery/organs/organ_icon.dm +++ b/code/modules/surgery/organs/organ_icon.dm @@ -159,7 +159,7 @@ var/global/list/limb_icon_cache = list() gender = "f" else gender = "m" - if(limb_name == "head") + if(limb_name == "head" && !is_stump() && !(status & ORGAN_DESTROYED)) var/obj/item/organ/external/head/head_organ = src head_organ.handle_alt_icon() From a880f740d27c68f9f488fd462111dd262bf89620 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 9 Nov 2016 20:38:16 -0500 Subject: [PATCH 043/193] Fixes Paper's In-hand Icon --- code/modules/paperwork/paper.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index f0af50d8d9e..9de96b73129 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -8,6 +8,7 @@ gender = PLURAL icon = 'icons/obj/bureaucracy.dmi' icon_state = "paper" + item_state = "paper" throwforce = 0 w_class = 1 throw_range = 1 From fcc20ac6bcae3dd44a57f335d75ad156cecbb72a Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 9 Nov 2016 22:36:03 -0500 Subject: [PATCH 044/193] BSA Tweaks --- code/game/objects/effects/misc.dm | 7 ----- code/modules/admin/admin.dm | 1 - code/modules/admin/topic.dm | 27 ++++++++----------- code/modules/clothing/spacesuits/rig/rig.dm | 5 ---- .../mob/living/simple_animal/constructs.dm | 5 ---- code/modules/mob/mob_movement.dm | 5 ---- .../reagents/drink/reagents_alcohol.dm | 2 +- .../surgery/organs/augments_internal.dm | 4 +-- 8 files changed, 14 insertions(+), 42 deletions(-) diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index a635d2fdad9..328555fc39b 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -55,13 +55,6 @@ anchored = 1.0 unacidable = 1 -/obj/effect/stop - var/victim = null - icon_state = "empty" - name = "Geas" - desc = "You can't resist." - // name = "" - /obj/effect/projection name = "Projection" desc = "This looks like a projection of something." diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index dcbb5c74c4d..687fc00797d 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1,6 +1,5 @@ var/global/BSACooldown = 0 -var/global/floorIsLava = 0 var/global/nologevent = 0 //////////////////////////////// diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index ec5709afcb7..022a957d929 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1597,11 +1597,11 @@ to_chat(usr, "This can only be used on instances of type /mob/living") return - if(alert(src.owner, "Are you sure you wish to hit [key_name(M)] with Bluespace Artillery?", "Confirm Firing?" , "Yes" , "No") != "Yes") + if(alert(owner, "Are you sure you wish to hit [key_name(M)] with Bluespace Artillery?", "Confirm Firing?" , "Yes" , "No") != "Yes") return if(BSACooldown) - to_chat(src.owner, "Standby. Reload cycle in progress. Gunnery crews ready in five seconds!") + to_chat(owner, "Standby. Reload cycle in progress. Gunnery crews ready in five seconds!") return BSACooldown = 1 @@ -1609,28 +1609,23 @@ BSACooldown = 0 to_chat(M, "You've been hit by bluespace artillery!") - log_admin("[key_name(M)] has been hit by Bluespace Artillery fired by [key_name(src.owner)]") - message_admins("[key_name_admin(M)] has been hit by Bluespace Artillery fired by [key_name_admin(src.owner)]") - - var/obj/effect/stop/S - S = new /obj/effect/stop - S.victim = M - S.loc = M.loc - spawn(20) - qdel(S) + log_admin("[key_name(M)] has been hit by Bluespace Artillery fired by [key_name(owner)]") + message_admins("[key_name_admin(M)] has been hit by Bluespace Artillery fired by [key_name_admin(owner)]") var/turf/simulated/floor/T = get_turf(M) if(istype(T)) - if(prob(80)) T.break_tile_to_plating() - else T.break_tile() + if(prob(80)) + T.break_tile_to_plating() + else + T.break_tile() - if(M.health == 1) + if(M.health <= 1) M.gib() else - M.adjustBruteLoss( min( 99 , (M.health - 1) ) ) + M.adjustBruteLoss(min(99,(M.health - 1))) M.Stun(20) M.Weaken(20) - M.stuttering = 20 + M.Stuttering(20) else if(href_list["CentcommReply"]) if(!check_rights(R_ADMIN)) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index fccf464607b..085e57eb25b 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -936,11 +936,6 @@ if(wearer.notransform || !wearer.canmove) return - if(locate(/obj/effect/stop/, wearer.loc)) - for(var/obj/effect/stop/S in wearer.loc) - if(S.victim == wearer) - return - if(!wearer.lastarea) wearer.lastarea = get_area(wearer.loc) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index fdad2a9e37b..d713c6dcf23 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -95,11 +95,6 @@ construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall) force_threshold = 11 - -/mob/living/simple_animal/construct/armoured/Life() - weakened = 0 - return ..() - /mob/living/simple_animal/construct/armoured/bullet_act(var/obj/item/projectile/P) if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) var/reflectchance = 80 - round(P.damage/3) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 4c210f6f8f8..d434ab633f7 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -162,11 +162,6 @@ if(!mob) return - if(locate(/obj/effect/stop/, mob.loc)) - for(var/obj/effect/stop/S in mob.loc) - if(S.victim == mob) - return - if(mob.stat==DEAD) return // handle possible spirit movement diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm index e337aa10e1f..4919345f336 100644 --- a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm @@ -620,7 +620,7 @@ heart_rate_decrease = 1 /datum/reagent/ethanol/neurotoxin/on_mob_life(mob/living/M) - M.weakened = max(M.weakened, 3) + M.Weaken(3) if(current_cycle >=55) M.Druggy(55) if(current_cycle >=200) diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index b860e3f062c..88f8078a2ba 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -133,9 +133,9 @@ if(crit_fail) return if(owner.stunned > STUN_SET_AMOUNT) - owner.stunned = STUN_SET_AMOUNT + owner.SetStunned(STUN_SET_AMOUNT) if(owner.weakened > STUN_SET_AMOUNT) - owner.weakened = STUN_SET_AMOUNT + owner.SetWeakened(STUN_SET_AMOUNT) /obj/item/organ/internal/cyberimp/brain/anti_stun/emp_act(severity) if(crit_fail) From 1d869d31c17515d9b30ebab0b12bd724b6dfe040 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 9 Nov 2016 22:42:43 -0500 Subject: [PATCH 045/193] avoiding conflicts --- .../modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm index 4919345f336..e337aa10e1f 100644 --- a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm @@ -620,7 +620,7 @@ heart_rate_decrease = 1 /datum/reagent/ethanol/neurotoxin/on_mob_life(mob/living/M) - M.Weaken(3) + M.weakened = max(M.weakened, 3) if(current_cycle >=55) M.Druggy(55) if(current_cycle >=200) From d809645f188d9af8ce4188836e005700e7e44a1d Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 9 Nov 2016 22:44:15 -0500 Subject: [PATCH 046/193] proc fix --- code/modules/reagents/chemistry/reagents/alcohol.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index adebb394fc0..3c1b4c7384e 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -816,7 +816,7 @@ drink_desc = "A drink that is guaranteed to knock you silly." /datum/reagent/consumable/ethanol/neurotoxin/on_mob_life(mob/living/M) - M.weakened = max(M.weakened, 3) + M.Weaken(3) if(current_cycle >=55) M.Druggy(55) if(current_cycle >=200) From 954e7b3c5df3412ddb84c7a42b075bd0cb1b4e09 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Thu, 10 Nov 2016 06:28:28 -0500 Subject: [PATCH 047/193] more cleanup --- code/modules/reagents/chemistry/reagents.dm | 1 - .../reagents/chemistry/reagents/alcohol.dm | 2 - .../reagents/chemistry/reagents/disease.dm | 1 - .../reagents/chemistry/reagents/drinks.dm | 2 +- .../reagents/chemistry/reagents/drugs.dm | 17 +- .../reagents/chemistry/reagents/food.dm | 37 ++- .../reagents/chemistry/reagents/medicine.dm | 291 +++++++++--------- .../reagents/chemistry/reagents/misc.dm | 7 +- .../chemistry/reagents/paradise_pop.dm | 42 +-- .../chemistry/reagents/pyrotechnic.dm | 10 +- .../reagents/chemistry/reagents/toxins.dm | 44 ++- 11 files changed, 217 insertions(+), 237 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 1b6e2e08854..62fa9af672a 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -1,7 +1,6 @@ #define SOLID 1 #define LIQUID 2 #define GAS 3 -#define REM REAGENTS_EFFECT_MULTIPLIER /datum/reagent var/name = "Reagent" diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index 3c1b4c7384e..2fcf9aacc98 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -15,7 +15,6 @@ M.AdjustDizzy(dizzy_adj) ..() - /datum/reagent/consumable/ethanol/reaction_obj(obj/O, volume) if(istype(O,/obj/item/weapon/paper)) var/obj/item/weapon/paper/paperaffected = O @@ -1030,7 +1029,6 @@ reagent_state = LIQUID color = "#1BB1FF" process_flags = ORGANIC | SYNTHETIC - metabolization_rate = 0.4 alcohol_perc = 0.5 drink_icon = "synthanolglass" drink_name = "Glass of Synthanol" diff --git a/code/modules/reagents/chemistry/reagents/disease.dm b/code/modules/reagents/chemistry/reagents/disease.dm index cfebcfd4b7c..f95b729e986 100644 --- a/code/modules/reagents/chemistry/reagents/disease.dm +++ b/code/modules/reagents/chemistry/reagents/disease.dm @@ -128,7 +128,6 @@ description = "A guaranteed heart-stopper!" reagent_state = LIQUID color = "#AB1CCF" - metabolization_rate = 0.4 /datum/reagent/concentrated_initro/on_mob_life(mob/living/M) if(volume >=5) diff --git a/code/modules/reagents/chemistry/reagents/drinks.dm b/code/modules/reagents/chemistry/reagents/drinks.dm index eb1c4f5ee68..489eac3eb81 100644 --- a/code/modules/reagents/chemistry/reagents/drinks.dm +++ b/code/modules/reagents/chemistry/reagents/drinks.dm @@ -9,7 +9,7 @@ /datum/reagent/consumable/drink/orangejuicde/on_mob_life(mob/living/M) if(M.getOxyLoss() && prob(30)) - M.adjustOxyLoss(-1*REM) + M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER) ..() /datum/reagent/consumable/drink/tomatojuice diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index 037f1ebd8ab..3719c6f49b8 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -102,7 +102,7 @@ M.AdjustParalysis(-1) M.AdjustStunned(-1) M.AdjustWeakened(-1) - M.adjustStaminaLoss(-1*REM) + M.adjustStaminaLoss(-1*REAGENTS_EFFECT_MULTIPLIER) ..() /datum/reagent/nicotine/overdose_process(mob/living/M, severity) @@ -477,7 +477,6 @@ reagent_state = LIQUID color = "#0FBE0F" - /datum/reagent/thc/on_mob_life(mob/living/M) M.stuttering += rand(0,2) if(prob(5)) @@ -502,11 +501,6 @@ process_flags = ORGANIC | SYNTHETIC //Flipping for everyone! addiction_chance = 10 -/datum/reagent/fliptonium/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == INGEST || method == TOUCH) - M.SpinAnimation(speed = 12, loops = -1) - ..() - /datum/reagent/fliptonium/on_mob_life(mob/living/M) if(current_cycle == 5) M.SpinAnimation(speed = 11, loops = -1) @@ -533,6 +527,11 @@ M.SetSleeping(0) ..() +/datum/reagent/fliptonium/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == INGEST || method == TOUCH) + M.SpinAnimation(speed = 12, loops = -1) + ..() + /datum/reagent/fliptonium/on_mob_delete(mob/living/M) M.SpinAnimation(speed = 12, loops = -1) @@ -651,5 +650,5 @@ B.pixel_x = rand(-20, 0) B.pixel_y = rand(-20, 0) B.icon = I - M.adjustFireLoss(rand(1,5)*REM) - M.adjustBruteLoss(rand(1,5)*REM) \ No newline at end of file + M.adjustFireLoss(rand(1,5)*REAGENTS_EFFECT_MULTIPLIER) + M.adjustBruteLoss(rand(1,5)*REAGENTS_EFFECT_MULTIPLIER) \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm index f502f697505..e2aef002060 100644 --- a/code/modules/reagents/chemistry/reagents/food.dm +++ b/code/modules/reagents/chemistry/reagents/food.dm @@ -124,6 +124,11 @@ reagent_state = LIQUID color = "#B31008" // rgb: 179, 16, 8 +/datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/M) + if(prob(5)) + M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]") + ..() + /datum/reagent/consumable/condensedcapsaicin/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == TOUCH) if(ishuman(M)) @@ -179,11 +184,6 @@ victim.Weaken(5) victim.drop_item() -/datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/M) - if(prob(5)) - M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]") - ..() - /datum/reagent/consumable/frostoil name = "Frost Oil" id = "frostoil" @@ -446,10 +446,10 @@ /datum/reagent/consumable/mugwort/on_mob_life(mob/living/M) if(ishuman(M) && M.mind) if(M.mind.special_role == SPECIAL_ROLE_WIZARD) - M.adjustToxLoss(-1*REM) - M.adjustOxyLoss(-1*REM) - M.adjustBruteLoss(-1*REM) - M.adjustFireLoss(-1*REM) + M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER) + M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER) + M.adjustBruteLoss(-1*REAGENTS_EFFECT_MULTIPLIER) + M.adjustFireLoss(-1*REAGENTS_EFFECT_MULTIPLIER) ..() /datum/reagent/consumable/porktonium @@ -708,7 +708,6 @@ description = "A gross and unidentifiable substance." reagent_state = LIQUID color = "#63DE63" - metabolization_rate = 0.4 /datum/reagent/questionmark/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == INGEST) @@ -725,10 +724,6 @@ color = "#F5F5F5" metabolization_rate = 0.2 -/datum/reagent/msg/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == INGEST) - to_chat(M, "That tasted amazing!") - /datum/reagent/msg/on_mob_life(mob/living/M) if(prob(5)) if(prob(10)) @@ -738,6 +733,10 @@ M.Stun(rand(2,5)) ..() +/datum/reagent/msg/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == INGEST) + to_chat(M, "That tasted amazing!") + /datum/reagent/cholesterol name = "cholesterol" id = "cholesterol" @@ -790,17 +789,17 @@ color = "#8EAE7B" process_flags = ORGANIC | SYNTHETIC //Because apparently ghosts in the shell -/datum/reagent/ectoplasm/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == INGEST) - var/spooky_eat = pick("Ugh, why did you eat that? Your mouth feels haunted. Haunted with bad flavors.", "Ugh, why did you eat that? It has the texture of ham aspic. From the 1950s. Left out in the sun.", "Ugh, why did you eat that? It tastes like a ghost fart.", "Ugh, why did you eat that? It tastes like flavor died.") - to_chat(M, "[spooky_eat]") - /datum/reagent/ectoplasm/on_mob_life(mob/living/M) var/spooky_message = pick("You notice something moving out of the corner of your eye, but nothing is there...", "Your eyes twitch, you feel like something you can't see is here...", "You've got the heebie-jeebies.", "You feel uneasy.", "You shudder as if cold...", "You feel something gliding across your back...") if(prob(8)) to_chat(M, "[spooky_message]") ..() +/datum/reagent/ectoplasm/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == INGEST) + var/spooky_eat = pick("Ugh, why did you eat that? Your mouth feels haunted. Haunted with bad flavors.", "Ugh, why did you eat that? It has the texture of ham aspic. From the 1950s. Left out in the sun.", "Ugh, why did you eat that? It tastes like a ghost fart.", "Ugh, why did you eat that? It tastes like flavor died.") + to_chat(M, "[spooky_eat]") + /datum/reagent/ectoplasm/reaction_turf(turf/T, volume) if(volume >= 10 && !istype(T, /turf/space)) new /obj/item/weapon/reagent_containers/food/snacks/ectoplasm(T) diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index 2f4df5ee4aa..f0f11c796fc 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -145,7 +145,6 @@ color = "#0AB478" metabolization_rate = 0.2 - /datum/reagent/medicine/silver_sulfadiazine name = "Silver Sulfadiazine" id = "silver_sulfadiazine" @@ -154,6 +153,10 @@ color = "#F0C814" metabolization_rate = 3 +/datum/reagent/medicine/silver_sulfadiazine/on_mob_life(mob/living/M) + M.adjustFireLoss(-2*REAGENTS_EFFECT_MULTIPLIER) + ..() + /datum/reagent/medicine/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1) if(iscarbon(M)) if(method == TOUCH) @@ -166,10 +169,6 @@ to_chat(M, "You feel sick...") ..() -/datum/reagent/medicine/silver_sulfadiazine/on_mob_life(mob/living/M) - M.adjustFireLoss(-2*REM) - ..() - /datum/reagent/medicine/styptic_powder name = "Styptic Powder" id = "styptic_powder" @@ -178,6 +177,10 @@ color = "#C8A5DC" metabolization_rate = 3 +/datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/M) + M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER) + ..() + /datum/reagent/medicine/styptic_powder/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1) if(iscarbon(M)) if(method == TOUCH) @@ -191,10 +194,6 @@ to_chat(M, "You feel gross!") ..() -/datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/M) - M.adjustBruteLoss(-2*REM) - ..() - /datum/reagent/medicine/salglu_solution name = "Saline-Glucose Solution" id = "salglu_solution" @@ -206,8 +205,8 @@ /datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/M) if(prob(33)) - M.adjustBruteLoss(-2*REM) - M.adjustFireLoss(-2*REM) + M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER) + M.adjustFireLoss(-2*REAGENTS_EFFECT_MULTIPLIER) if(ishuman(M)) var/mob/living/carbon/human/H = M if(!H.species.exotic_blood && !(H.species.flags & NO_BLOOD) && prob(33)) @@ -243,7 +242,7 @@ color = "#000000" /datum/reagent/medicine/charcoal/on_mob_life(mob/living/M) - M.adjustToxLoss(-1.5*REM) + M.adjustToxLoss(-1.5*REAGENTS_EFFECT_MULTIPLIER) if(prob(50)) for(var/datum/reagent/R in M.reagents.reagent_list) if(R != src) @@ -261,10 +260,10 @@ addiction_chance = 5 /datum/reagent/medicine/omnizine/on_mob_life(mob/living/M) - M.adjustToxLoss(-1*REM) - M.adjustOxyLoss(-1*REM) - M.adjustBruteLoss(-2*REM) - M.adjustFireLoss(-2*REM) + M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER) + M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER) + M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER) + M.adjustFireLoss(-2*REAGENTS_EFFECT_MULTIPLIER) if(prob(50)) M.AdjustLoseBreath(-1) ..() @@ -316,7 +315,7 @@ if(R != src) M.reagents.remove_reagent(R.id,5) if(M.health > 20) - M.adjustToxLoss(5*REM) + M.adjustToxLoss(5*REAGENTS_EFFECT_MULTIPLIER) if(prob(6)) M.fakevomit() ..() @@ -346,10 +345,10 @@ M.reagents.remove_reagent(R.id,4) M.radiation = max(0, M.radiation-7) if(prob(75)) - M.adjustToxLoss(-4*REM) + M.adjustToxLoss(-4*REAGENTS_EFFECT_MULTIPLIER) if(prob(33)) - M.adjustBruteLoss(1*REM) - M.adjustFireLoss(1*REM) + M.adjustBruteLoss(1*REAGENTS_EFFECT_MULTIPLIER) + M.adjustFireLoss(1*REAGENTS_EFFECT_MULTIPLIER) ..() /datum/reagent/medicine/sal_acid @@ -364,7 +363,7 @@ /datum/reagent/medicine/sal_acid/on_mob_life(mob/living/M) if(prob(55)) - M.adjustBruteLoss(-2*REM) + M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER) if(ishuman(M)) var/mob/living/carbon/human/H = M if(H.traumatic_shock < 100) @@ -380,7 +379,7 @@ metabolization_rate = 0.2 /datum/reagent/medicine/salbutamol/on_mob_life(mob/living/M) - M.adjustOxyLoss(-6*REM) + M.adjustOxyLoss(-6*REAGENTS_EFFECT_MULTIPLIER) M.AdjustLoseBreath(-4) ..() @@ -394,13 +393,13 @@ addiction_chance = 20 /datum/reagent/medicine/perfluorodecalin/on_mob_life(mob/living/carbon/human/M) - M.adjustOxyLoss(-25*REM) + M.adjustOxyLoss(-25*REAGENTS_EFFECT_MULTIPLIER) if(volume >= 4) M.LoseBreath(6) M.Silence(6) if(prob(33)) - M.adjustBruteLoss(-1*REM) - M.adjustFireLoss(-1*REM) + M.adjustBruteLoss(-1*REAGENTS_EFFECT_MULTIPLIER) + M.adjustFireLoss(-1*REAGENTS_EFFECT_MULTIPLIER) ..() /datum/reagent/medicine/ephedrine @@ -418,7 +417,7 @@ M.AdjustParalysis(-1) M.AdjustStunned(-1) M.AdjustWeakened(-1) - M.adjustStaminaLoss(-1*REM) + M.adjustStaminaLoss(-1*REAGENTS_EFFECT_MULTIPLIER) M.AdjustLoseBreath(-1, bound_lower = 5) if(M.oxyloss > 75) M.adjustOxyLoss(-1) @@ -496,6 +495,13 @@ H.shock_stage = 0 ..() +/datum/reagent/medicine/oculine + name = "Oculine" + id = "oculine" + description = "Oculine is a saline eye medication with mydriatic and antibiotic effects." + reagent_state = LIQUID + color = "#C8A5DC" + /datum/reagent/medicine/oculine/on_mob_life(mob/living/M) if(prob(80)) if(ishuman(M)) @@ -515,15 +521,6 @@ M.SetEarDeaf(0) ..() -/datum/reagent/medicine/oculine - name = "Oculine" - id = "oculine" - description = "Oculine is a saline eye medication with mydriatic and antibiotic effects." - reagent_state = LIQUID - color = "#C8A5DC" - metabolization_rate = 0.4 - var/cycle_amount = 0 - /datum/reagent/medicine/atropine name = "Atropine" id = "atropine" @@ -540,11 +537,11 @@ M.emote("collapse") M.AdjustLoseBreath(-5, bound_lower = 5) if(M.oxyloss > 65) - M.adjustOxyLoss(-10*REM) + M.adjustOxyLoss(-10*REAGENTS_EFFECT_MULTIPLIER) if(M.health < -25) M.adjustToxLoss(-1) - M.adjustBruteLoss(-3*REM) - M.adjustFireLoss(-3*REM) + M.adjustBruteLoss(-3*REAGENTS_EFFECT_MULTIPLIER) + M.adjustFireLoss(-3*REAGENTS_EFFECT_MULTIPLIER) else if(M.health > -60) M.adjustToxLoss(1) M.reagents.remove_reagent("sarin", 20) @@ -574,11 +571,11 @@ holder.remove_reagent("histamine", 15) M.AdjustLoseBreath(-1, bound_lower = 3) if(M.oxyloss > 35) - M.adjustOxyLoss(-10*REM) + M.adjustOxyLoss(-10*REAGENTS_EFFECT_MULTIPLIER) if(M.health < -10 && M.health > -65) - M.adjustToxLoss(-1*REM) - M.adjustBruteLoss(-1*REM) - M.adjustFireLoss(-1*REM) + M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER) + M.adjustBruteLoss(-1*REAGENTS_EFFECT_MULTIPLIER) + M.adjustFireLoss(-1*REAGENTS_EFFECT_MULTIPLIER) ..() /datum/reagent/medicine/epinephrine/overdose_process(mob/living/M, severity) @@ -610,6 +607,12 @@ color = "#A0E85E" metabolization_rate = 0.2 +/datum/reagent/medicine/strange_reagent/on_mob_life(mob/living/M) + if(prob(10)) + M.adjustBruteLoss(2*REAGENTS_EFFECT_MULTIPLIER) + M.adjustToxLoss(2*REAGENTS_EFFECT_MULTIPLIER) + ..() + /datum/reagent/medicine/strange_reagent/reaction_mob(mob/living/M, method=TOUCH, volume) if(isanimal(M)) if(method == TOUCH) @@ -642,22 +645,22 @@ add_logs(M, M, "revived", object="strange reagent") //Yes, the logs say you revived yourself. ..() -/datum/reagent/medicine/strange_reagent/on_mob_life(mob/living/M) - if(prob(10)) - M.adjustBruteLoss(2*REM) - M.adjustToxLoss(2*REM) - ..() - -/datum/reagent/medicine/mannitol/on_mob_life(mob/living/M) - M.adjustBrainLoss(-3) - ..() - /datum/reagent/medicine/mannitol name = "Mannitol" id = "mannitol" description = "Mannitol is a sugar alcohol that can help alleviate cranial swelling." color = "#D1D1F1" +/datum/reagent/medicine/mannitol/on_mob_life(mob/living/M) + M.adjustBrainLoss(-3) + ..() + +/datum/reagent/medicine/mutadone + name = "Mutadone" + id = "mutadone" + description = "Mutadone is an experimental bromide that can cure genetic abnomalities." + color = "#5096C8" + /datum/reagent/medicine/mutadone/on_mob_life(mob/living/carbon/human/M) M.SetJitter(0) var/needs_update = M.mutations.len > 0 || M.disabilities > 0 @@ -676,12 +679,6 @@ H.update_mutations() ..() -/datum/reagent/medicine/mutadone - name = "Mutadone" - id = "mutadone" - description = "Mutadone is an experimental bromide that can cure genetic abnomalities." - color = "#5096C8" - /datum/reagent/medicine/antihol name = "Antihol" id = "antihol" @@ -701,14 +698,13 @@ id = "stimulants" description = "Increases run speed and eliminates stuns, can heal minor damage. If overdosed it will deal toxin damage and stun." color = "#C8A5DC" - metabolization_rate = 0.4 /datum/reagent/medicine/stimulants/on_mob_life(mob/living/M) if(volume > 5) - M.adjustOxyLoss(-5*REM) - M.adjustToxLoss(-5*REM) - M.adjustBruteLoss(-10*REM) - M.adjustFireLoss(-10*REM) + M.adjustOxyLoss(-5*REAGENTS_EFFECT_MULTIPLIER) + M.adjustToxLoss(-5*REAGENTS_EFFECT_MULTIPLIER) + M.adjustBruteLoss(-10*REAGENTS_EFFECT_MULTIPLIER) + M.adjustFireLoss(-10*REAGENTS_EFFECT_MULTIPLIER) M.setStaminaLoss(0) M.SetSlowed(0) M.AdjustDizzy(-10) @@ -740,14 +736,14 @@ /datum/reagent/medicine/stimulative_agent/on_mob_life(mob/living/M) M.status_flags |= GOTTAGOFAST if(M.health < 50 && M.health > 0) - M.adjustOxyLoss(-1*REM) - M.adjustToxLoss(-1*REM) - M.adjustBruteLoss(-1*REM) - M.adjustFireLoss(-1*REM) + M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER) + M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER) + M.adjustBruteLoss(-1*REAGENTS_EFFECT_MULTIPLIER) + M.adjustFireLoss(-1*REAGENTS_EFFECT_MULTIPLIER) M.AdjustParalysis(-3) M.AdjustStunned(-3) M.AdjustWeakened(-3) - M.adjustStaminaLoss(-5*REM) + M.adjustStaminaLoss(-5*REAGENTS_EFFECT_MULTIPLIER) ..() /datum/reagent/medicine/stimulative_agent/on_mob_delete(mob/living/M) @@ -756,8 +752,8 @@ /datum/reagent/medicine/stimulative_agent/overdose_process(mob/living/M, severity) if(prob(33)) - M.adjustStaminaLoss(2.5*REM) - M.adjustToxLoss(1*REM) + M.adjustStaminaLoss(2.5*REAGENTS_EFFECT_MULTIPLIER) + M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER) M.AdjustLoseBreath(1) /datum/reagent/medicine/insulin @@ -771,7 +767,6 @@ M.reagents.remove_reagent("sugar", 5) ..() - /datum/reagent/medicine/simethicone name = "Simethicone" id = "simethicone" @@ -843,72 +838,6 @@ M.Drowsy(20) ..() -//virus-specific symptom reagents - -/datum/reagent/medicine/synaphydramine - name = "Diphen-Synaptizine" - id = "synaphydramine" - description = "Reduces drowsiness and hallucinations while also purging histamine from the body." - color = "#EC536D" // rgb: 236, 83, 109 - -/datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/M) - M.AdjustDrowsy(-5) - if(holder.has_reagent("lsd")) - holder.remove_reagent("lsd", 5) - if(holder.has_reagent("histamine")) - holder.remove_reagent("histamine", 5) - M.AdjustHallucinate(-10) - if(prob(30)) - M.adjustToxLoss(1) - ..() - - -////////////////////////////// -// Synth-Meds // -////////////////////////////// - -//Degreaser: Mild Purgative / Lube Remover -/datum/reagent/medicine/degreaser - name = "Degreaser" - id = "degreaser" - description = "An industrial degreaser which can be used to clean residual build-up from machinery and surfaces." - reagent_state = LIQUID - color = "#CC7A00" - process_flags = SYNTHETIC - -/datum/reagent/medicine/degreaser/reaction_turf(turf/simulated/T, volume) - if(volume >= 1 && istype(T)) - if(T.wet) - T.MakeDry(TURF_WET_LUBE) - -/datum/reagent/medicine/degreaser/on_mob_life(mob/living/M) - if(prob(50)) //Same effects as coffee, to help purge ill effects like paralysis - M.AdjustParalysis(-1) - M.AdjustStunned(-1) - M.AdjustWeakened(-1) - M.AdjustConfused(-5) - for(var/datum/reagent/R in M.reagents.reagent_list) - if(R != src) - if(R.id == "ultralube" || R.id == "lube") - //Flushes lube and ultra-lube even faster than other chems - M.reagents.remove_reagent(R.id, 5) - else - M.reagents.remove_reagent(R.id,1) - ..() - -//Liquid Solder: Mannitol -/datum/reagent/medicine/liquid_solder - name = "Liquid Solder" - id = "liquid_solder" - description = "A solution formulated to clean and repair damaged connections in posibrains while in use." - reagent_state = LIQUID - color = "#D7B395" - process_flags = SYNTHETIC - -/datum/reagent/medicine/liquid_solder/on_mob_life(mob/living/M) - M.adjustBrainLoss(-3) - ..() - /datum/reagent/medicine/syndicate_nanites //Used exclusively by Syndicate medical cyborgs name = "Restorative Nanites" id = "syndicate_nanites" @@ -917,15 +846,14 @@ color = "#555555" /datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/M) - M.adjustBruteLoss(-5*REM) //A ton of healing - this is a 50 telecrystal investment. - M.adjustFireLoss(-5*REM) - M.adjustOxyLoss(-15*REM) - M.adjustToxLoss(-5*REM) - M.adjustBrainLoss(-15*REM) - M.adjustCloneLoss(-3*REM) + M.adjustBruteLoss(-5*REAGENTS_EFFECT_MULTIPLIER) //A ton of healing - this is a 50 telecrystal investment. + M.adjustFireLoss(-5*REAGENTS_EFFECT_MULTIPLIER) + M.adjustOxyLoss(-15*REAGENTS_EFFECT_MULTIPLIER) + M.adjustToxLoss(-5*REAGENTS_EFFECT_MULTIPLIER) + M.adjustBrainLoss(-15*REAGENTS_EFFECT_MULTIPLIER) + M.adjustCloneLoss(-3*REAGENTS_EFFECT_MULTIPLIER) ..() - /datum/reagent/medicine/omnizine_diluted name = "Diluted Omnizine" id = "weak_omnizine" @@ -936,10 +864,10 @@ metabolization_rate = 0.1 /datum/reagent/medicine/omnizine_diluted/on_mob_life(mob/living/M) - M.adjustToxLoss(-0.5*REM) - M.adjustOxyLoss(-0.5*REM) - M.adjustBruteLoss(-0.5*REM) - M.adjustFireLoss(-0.5*REM) + M.adjustToxLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER) + M.adjustOxyLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER) + M.adjustBruteLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER) + M.adjustFireLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER) ..() /datum/reagent/medicine/omnizine_diluted/overdose_process(mob/living/M, severity) @@ -974,4 +902,69 @@ else if(effect <= 8) M.visible_message("[M] stumbles and staggers.") M.Dizzy(5) - M.Weaken(3) \ No newline at end of file + M.Weaken(3) + +//virus-specific symptom reagents + +/datum/reagent/medicine/synaphydramine + name = "Diphen-Synaptizine" + id = "synaphydramine" + description = "Reduces drowsiness and hallucinations while also purging histamine from the body." + color = "#EC536D" // rgb: 236, 83, 109 + +/datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/M) + M.AdjustDrowsy(-5) + if(holder.has_reagent("lsd")) + holder.remove_reagent("lsd", 5) + if(holder.has_reagent("histamine")) + holder.remove_reagent("histamine", 5) + M.AdjustHallucinate(-10) + if(prob(30)) + M.adjustToxLoss(1) + ..() + +////////////////////////////// +// Synth-Meds // +////////////////////////////// + +//Degreaser: Mild Purgative / Lube Remover +/datum/reagent/medicine/degreaser + name = "Degreaser" + id = "degreaser" + description = "An industrial degreaser which can be used to clean residual build-up from machinery and surfaces." + reagent_state = LIQUID + color = "#CC7A00" + process_flags = SYNTHETIC + +/datum/reagent/medicine/degreaser/on_mob_life(mob/living/M) + if(prob(50)) //Same effects as coffee, to help purge ill effects like paralysis + M.AdjustParalysis(-1) + M.AdjustStunned(-1) + M.AdjustWeakened(-1) + M.AdjustConfused(-5) + for(var/datum/reagent/R in M.reagents.reagent_list) + if(R != src) + if(R.id == "ultralube" || R.id == "lube") + //Flushes lube and ultra-lube even faster than other chems + M.reagents.remove_reagent(R.id, 5) + else + M.reagents.remove_reagent(R.id,1) + ..() + +/datum/reagent/medicine/degreaser/reaction_turf(turf/simulated/T, volume) + if(volume >= 1 && istype(T)) + if(T.wet) + T.MakeDry(TURF_WET_LUBE) + +//Liquid Solder: Mannitol +/datum/reagent/medicine/liquid_solder + name = "Liquid Solder" + id = "liquid_solder" + description = "A solution formulated to clean and repair damaged connections in posibrains while in use." + reagent_state = LIQUID + color = "#D7B395" + process_flags = SYNTHETIC + +/datum/reagent/medicine/liquid_solder/on_mob_life(mob/living/M) + M.adjustBrainLoss(-3) + ..() \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm index aa8e7b93f6d..bb386d0215c 100644 --- a/code/modules/reagents/chemistry/reagents/misc.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -152,7 +152,6 @@ H.vessel.add_reagent("blood", 0.8) ..() - //foam /datum/reagent/fluorosurfactant name = "Fluorosurfactant" @@ -383,9 +382,6 @@ reagent_state = LIQUID color = "#FF83A5" -/datum/reagent/love/reaction_mob(mob/living/M, method=TOUCH, volume) - to_chat(M, "You feel loved!") - /datum/reagent/love/on_mob_life(mob/living/M) if(M.a_intent == I_HARM) M.a_intent = I_HELP @@ -405,6 +401,9 @@ break ..() +/datum/reagent/love/reaction_mob(mob/living/M, method=TOUCH, volume) + to_chat(M, "You feel loved!") + /datum/reagent/royal_bee_jelly name = "royal bee jelly" id = "royal_bee_jelly" diff --git a/code/modules/reagents/chemistry/reagents/paradise_pop.dm b/code/modules/reagents/chemistry/reagents/paradise_pop.dm index 7a7085a5e5f..17fdc2cb444 100644 --- a/code/modules/reagents/chemistry/reagents/paradise_pop.dm +++ b/code/modules/reagents/chemistry/reagents/paradise_pop.dm @@ -9,7 +9,7 @@ //Paradise Punch: No effect, aside from maybe messages about how tasty it is or something -/datum/reagent/paradise_punch +/datum/reagent/consumable/drink/paradise_punch name = "Paradise Punch" id = "paradise_punch" description = "Tastes just how you'd think Paradise would if you could bottle it." @@ -17,14 +17,14 @@ color = "#cc0044" //Apple-pocalypse: Low chance to cause a goonchem vortex that pulls things within a very small radius (2 tiles?) towards the drinker -/datum/reagent/apple_pocalypse +/datum/reagent/consumable/drink/apple_pocalypse name = "Apple-pocalypse" id = "apple-pocalypse" description = "If doomsday came in fruit form, it'd probably be apples." reagent_state = LIQUID color = "#44FF44" -/datum/reagent/apple_pocalypse/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/apple_pocalypse/on_mob_life(mob/living/M) if(prob(1)) var/turf/simulated/T = get_turf(M) goonchem_vortex(T, 0, 2, 1) @@ -32,61 +32,61 @@ ..() //Berry Banned: This one is tasty and safe to drink, might have a low chance of healing a random damage type? -/datum/reagent/berry_banned +/datum/reagent/consumable/drink/berry_banned name = "Berry Banned" id = "berry_banned" description = "Reason for ban: Excessive Flavor." reagent_state = LIQUID color = "#FF44FF" -/datum/reagent/berry_banned/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/berry_banned/on_mob_life(mob/living/M) if(prob(10)) var/heal_type = rand(0, 5) //still prefer the string version switch(heal_type) if(0) - M.adjustBruteLoss(-0.5*REM) + M.adjustBruteLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER) if(1) - M.adjustFireLoss(-0.5*REM) + M.adjustFireLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER) if(2) - M.adjustToxLoss(-0.5*REM) + M.adjustToxLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER) if(3) - M.adjustOxyLoss(-0.5*REM) + M.adjustOxyLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER) if(4) - M.adjustCloneLoss(-0.5*REM) + M.adjustCloneLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER) if(5) - M.adjustBrainLoss(-1*REM) + M.adjustBrainLoss(-1*REAGENTS_EFFECT_MULTIPLIER) to_chat(M, "You feel slightly rejuvinated!") ..() //Berry Banned 2: This one is tasty and toxic. Deals toxin damage and MAYBE plays the "BWOINK!" sound if it kills someone? -/datum/reagent/berry_banned2 +/datum/reagent/consumable/drink/berry_banned2 name = "Berry Banned" id = "berry_banned2" description = "Reason for ban: Excessive Flavor." reagent_state = LIQUID color = "#FF44FF" -/datum/reagent/berry_banned2/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/berry_banned2/on_mob_life(mob/living/M) if(prob(50)) - M.adjustToxLoss(2*REM) //double strength of poison berry juice alone, because it's concentrated (this is equal to the damage of normal toxin, less often) + M.adjustToxLoss(2*REAGENTS_EFFECT_MULTIPLIER) //double strength of poison berry juice alone, because it's concentrated (this is equal to the damage of normal toxin, less often) if(prob(10)) to_chat(M, "You feel slightly rejuvinated!") //meta this! ..() -/datum/reagent/berry_banned2/on_mob_death(mob/living/M) +/datum/reagent/consumable/drink/berry_banned2/on_mob_death(mob/living/M) M << sound('sound/effects/adminhelp.ogg',0,1,0,25) to_chat(M, "PM from-Administrator: BWOINK!") ..() //Blackeye Brew: Chance to make the drinker say greytider-themed things like "I thought clown was valid!" -/datum/reagent/blackeye_brew +/datum/reagent/consumable/drink/blackeye_brew name = "Blackeye Brew" id = "blackeye_brew" description = "Creamy, smooth flavor, just like the bald heads of the masses. Supposedly aged for 30 years." reagent_state = LIQUID color = "#4d2600" -/datum/reagent/blackeye_brew/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/blackeye_brew/on_mob_life(mob/living/M) if(prob(25)) var/list/tider_talk = list("CLOWN IS VALID, RIGHT?", "SHITMINS! SHITMINS! SHITMINS!", @@ -102,14 +102,14 @@ ..() //Grape Granade: causes the drinker to sometimes burp, has a low chance to cause a goonchem vortex that pushes things within a very small radius (1-2 tiles) away from the drinker -/datum/reagent/grape_granade +/datum/reagent/consumable/drink/grape_granade name = "Grape Granade" id = "grape_granade" description = "Exploding with grape flavor and a favorite among ERT members system-wide." reagent_state = LIQUID color = "#9933ff" -/datum/reagent/grape_granade/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/grape_granade/on_mob_life(mob/living/M) if(prob(1)) var/turf/simulated/T = get_turf(M) goonchem_vortex(T, 1, 1, 2) @@ -120,14 +120,14 @@ ..() //Meteor Malt: Sometimes causes screen shakes for the drinker like a meteor impact, low chance to add 1-5 units of a random mineral reagent to the drinker's blood (iron, copper, silver, gold, uranium, carbon, etc) -/datum/reagent/meteor_malt +/datum/reagent/consumable/drink/meteor_malt name = "Meteor Malt" id = "meteor_malt" description = "Soft drinks have been detected on collision course with your tastebuds." reagent_state = LIQUID color = "#cc9900" -/datum/reagent/meteor_malt/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/meteor_malt/on_mob_life(mob/living/M) if(prob(25)) M << sound('sound/effects/meteorimpact.ogg',0,1,0,25) shake_camera(M, 3, 1) diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm index ef376910699..a92982a8aaf 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm @@ -22,7 +22,7 @@ color = "#7A2B94" /datum/reagent/plasma/on_mob_life(mob/living/M) - M.adjustToxLoss(1*REM) + M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER) if(holder.has_reagent("epinephrine")) holder.remove_reagent("epinephrine", 2) if(iscarbon(M)) @@ -171,16 +171,16 @@ color = "#FF9999" process_flags = ORGANIC | SYNTHETIC -/datum/reagent/phlogiston/reaction_mob(mob/living/M, method=TOUCH, volume) - M.IgniteMob() - ..() - /datum/reagent/phlogiston/on_mob_life(mob/living/M) M.adjust_fire_stacks(1) var/burndmg = max(0.3*M.fire_stacks, 0.3) M.adjustFireLoss(burndmg) ..() +/datum/reagent/phlogiston/reaction_mob(mob/living/M, method=TOUCH, volume) + M.IgniteMob() + ..() + /datum/reagent/napalm name = "Napalm" id = "napalm" diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 5870e4fad00..272d5df3130 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -54,9 +54,9 @@ /datum/reagent/slimejelly/on_mob_life(mob/living/M) if(prob(10)) to_chat(M, "Your insides are burning!") - M.adjustToxLoss(rand(20,60)*REM) + M.adjustToxLoss(rand(20,60)*REAGENTS_EFFECT_MULTIPLIER) else if(prob(40)) - M.adjustBruteLoss(-5*REM) + M.adjustBruteLoss(-5*REAGENTS_EFFECT_MULTIPLIER) ..() /datum/reagent/slimetoxin @@ -127,7 +127,7 @@ /datum/reagent/fluorine/on_mob_life(mob/living/M) M.adjustFireLoss(1) - M.adjustToxLoss(1*REM) + M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER) ..() /datum/reagent/radium @@ -136,7 +136,6 @@ description = "Radium is an alkaline earth metal. It is extremely radioactive." reagent_state = SOLID color = "#C7C7C7" // rgb: 199,199,199 - metabolization_rate = 0.4 penetrates_skin = 1 /datum/reagent/radium/on_mob_life(mob/living/M) @@ -169,7 +168,7 @@ /datum/reagent/mutagen/on_mob_life(mob/living/M) if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this. - M.apply_effect(2*REM, IRRADIATE, negate_armor = 1) + M.apply_effect(2*REAGENTS_EFFECT_MULTIPLIER, IRRADIATE, negate_armor = 1) if(prob(4)) randmutb(M) ..() @@ -283,7 +282,7 @@ color = "#003333" // rgb: 0, 51, 51 /datum/reagent/carpotoxin/on_mob_life(mob/living/M) - M.adjustToxLoss(2*REM) + M.adjustToxLoss(2*REAGENTS_EFFECT_MULTIPLIER) ..() /datum/reagent/staminatoxin @@ -295,7 +294,7 @@ data = 13 /datum/reagent/staminatoxin/on_mob_life(mob/living/M) - M.adjustStaminaLoss(REM * data) + M.adjustStaminaLoss(REAGENTS_EFFECT_MULTIPLIER * data) data = max(data - 1, 3) ..() @@ -328,10 +327,9 @@ M.AdjustSleeping(1) if(51 to INFINITY) M.AdjustSleeping(1) - M.adjustToxLoss((current_cycle - 50)*REM) + M.adjustToxLoss((current_cycle - 50)*REAGENTS_EFFECT_MULTIPLIER) ..() -/////////////////////////////////////////////////////////////////////////////////////////////////////////////// /datum/reagent/polonium name = "Polonium" id = "polonium" @@ -345,7 +343,6 @@ M.apply_effect(8, IRRADIATE, negate_armor = 1) ..() - /datum/reagent/histamine name = "Histamine" id = "histamine" @@ -428,7 +425,7 @@ penetrates_skin = 1 /datum/reagent/formaldehyde/on_mob_life(mob/living/M) - M.adjustToxLoss(1*REM) + M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER) if(prob(10)) M.reagents.add_reagent("histamine",rand(5,15)) ..() @@ -511,7 +508,7 @@ penetrates_skin = 1 /datum/reagent/cyanide/on_mob_life(mob/living/M) - M.adjustToxLoss(1.5*REM) + M.adjustToxLoss(1.5*REAGENTS_EFFECT_MULTIPLIER) if(prob(5)) M.emote("drool") if(prob(10)) @@ -558,11 +555,6 @@ M.emote("scream") ..() -/datum/reagent/facid/on_mob_life(mob/living/M) - M.adjustToxLoss(1*REM) - M.adjustFireLoss(1) - ..() - /datum/reagent/facid name = "Fluorosulfuric Acid" id = "facid" @@ -571,6 +563,11 @@ color = "#4141D2" process_flags = ORGANIC | SYNTHETIC +/datum/reagent/facid/on_mob_life(mob/living/M) + M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER) + M.adjustFireLoss(1) + ..() + /datum/reagent/facid/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == TOUCH || method == INGEST) if(ishuman(M)) @@ -627,7 +624,6 @@ description = "A highly potent cardiac poison - can kill within minutes." reagent_state = LIQUID color = "#7F10C0" - metabolization_rate = 0.4 /datum/reagent/initropidril/on_mob_life(mob/living/M) if(prob(33)) @@ -907,8 +903,7 @@ M.adjustToxLoss(2) ..() - // Clear off wallrot fungi -/datum/reagent/atrazine/reaction_turf(turf/simulated/wall/W, volume) +/datum/reagent/atrazine/reaction_turf(turf/simulated/wall/W, volume) // Clear off wallrot fungi if(istype(W) && W.rotting) W.rotting = 0 for(var/obj/effect/overlay/O in W) @@ -1033,6 +1028,10 @@ color = "#993333" process_flags = ORGANIC | SYNTHETIC +/datum/reagent/ants/on_mob_life(mob/living/M) + M.adjustBruteLoss(2) + ..() + /datum/reagent/ants/reaction_mob(mob/living/M, method=TOUCH, volume) //NOT THE ANTS if(iscarbon(M)) if(method == TOUCH || method==INGEST) @@ -1040,11 +1039,6 @@ M.emote("scream") M.adjustBruteLoss(4) - -/datum/reagent/ants/on_mob_life(mob/living/M) - M.adjustBruteLoss(2) - ..() - /datum/reagent/teslium //Teslium. Causes periodic shocks, and makes shocks against the target much more effective. name = "Teslium" id = "teslium" From feecce9d2e027ae8f535d57dc9ec44376f85dcbe Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Thu, 10 Nov 2016 21:59:19 -0500 Subject: [PATCH 048/193] OOP blacklist --- code/game/mecha/equipment/tools/medical_tools.dm | 2 +- code/modules/reagents/chemistry/reagents.dm | 1 + code/modules/reagents/chemistry/reagents/admin.dm | 1 + code/modules/reagents/chemistry/reagents/alcohol.dm | 1 + code/modules/reagents/chemistry/reagents/blob.dm | 1 + code/modules/reagents/chemistry/reagents/disease.dm | 11 +++++++++++ code/modules/reagents/chemistry/reagents/medicine.dm | 3 +++ code/modules/reagents/chemistry/reagents/toxins.dm | 8 ++++++++ code/modules/reagents/chemistry/reagents/water.dm | 1 + 9 files changed, 28 insertions(+), 1 deletion(-) diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 23271355206..d95570cf88f 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -481,7 +481,7 @@ return 0 occupant_message("Analyzing reagents...") for(var/datum/reagent/R in A.reagents.reagent_list) - if(R.reagent_state == 2 && add_known_reagent(R.id,R.name)) + if(R.can_synth && add_known_reagent(R.id, R.name)) occupant_message("Reagent analyzed, identified as [R.name] and added to database.") send_byjax(chassis.occupant,"msyringegun.browser","reagents_form",get_reagents_form()) occupant_message("Analyzis complete.") diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 62fa9af672a..367c747c4e0 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -23,6 +23,7 @@ //By default, all reagents will ONLY affect organics, not synthetics. Re-define in the reagent's definition if the reagent is meant to affect synths var/process_flags = ORGANIC var/admin_only = 0 + var/can_synth = 1 //whether or not a mech syringe gun and synthesize this reagent var/overdose_threshold = 0 var/addiction_chance = 0 var/addiction_stage = 1 diff --git a/code/modules/reagents/chemistry/reagents/admin.dm b/code/modules/reagents/chemistry/reagents/admin.dm index 9e5b78376e2..a915ef8cd57 100644 --- a/code/modules/reagents/chemistry/reagents/admin.dm +++ b/code/modules/reagents/chemistry/reagents/admin.dm @@ -6,6 +6,7 @@ color = "#C8A5DC" // rgb: 200, 165, 220 process_flags = ORGANIC | SYNTHETIC //Adminbuse knows no bounds! admin_only = 1 + can_synth = 0 /datum/reagent/medicine/adminordrazine/on_mob_life(mob/living/carbon/M) M.setCloneLoss(0) diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index 2fcf9aacc98..536385d7614 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -986,6 +986,7 @@ reagent_state = LIQUID color = "#DC0000" alcohol_perc = 1 + can_synth = 0 /datum/reagent/consumable/ethanol/dragons_breath/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == INGEST && prob(20)) diff --git a/code/modules/reagents/chemistry/reagents/blob.dm b/code/modules/reagents/chemistry/reagents/blob.dm index a1fc820d282..895922c7542 100644 --- a/code/modules/reagents/chemistry/reagents/blob.dm +++ b/code/modules/reagents/chemistry/reagents/blob.dm @@ -4,6 +4,7 @@ description = "" var/message = "The blob strikes you" //message sent to any mob hit by the blob var/message_living = null //extension to first mob sent to only living mobs i.e. silicons have no skin to be burnt + can_synth = 0 /datum/reagent/blob/reaction_mob(mob/living/M, method=TOUCH, volume, show_message, touch_protection) return round(volume * min(1.5 - touch_protection, 1), 0.1) //full touch protection means 50% volume, any prot below 0.5 means 100% volume. diff --git a/code/modules/reagents/chemistry/reagents/disease.dm b/code/modules/reagents/chemistry/reagents/disease.dm index f95b729e986..f9fbf930e3e 100644 --- a/code/modules/reagents/chemistry/reagents/disease.dm +++ b/code/modules/reagents/chemistry/reagents/disease.dm @@ -4,6 +4,7 @@ description = "A fine dust containing spider eggs. Oh gosh." reagent_state = SOLID color = "#FFFFFF" + can_synth = 0 /datum/reagent/spider_eggs/on_mob_life(mob/living/M) if(volume > 2.5) @@ -18,6 +19,7 @@ id = "nanomachines" description = "Microscopic construction robots." color = "#535E66" // rgb: 83, 94, 102 + can_synth = 0 /datum/reagent/nanomachines/on_mob_life(mob/living/carbon/M) if(volume > 1.5) @@ -30,6 +32,7 @@ id = "xenomicrobes" description = "Microbes with an entirely alien cellular structure." color = "#535E66" // rgb: 83, 94, 102 + can_synth = 0 /datum/reagent/xenomicrobes/on_mob_life(mob/living/carbon/M) if(volume > 1.5) @@ -41,6 +44,7 @@ id = "fungalspores" description = "Active fungal spores." color = "#92D17D" // rgb: 146, 209, 125 + can_synth = 0 /datum/reagent/fungalspores/on_mob_life(mob/living/carbon/M) if(volume > 2.5) @@ -53,6 +57,7 @@ description = "Rapid chemical decomposition has warped these crystals into twisted spikes." reagent_state = SOLID color = "#FA0000" // rgb: 250, 0, 0 + can_synth = 0 /datum/reagent/jagged_crystals/on_mob_life(mob/living/carbon/M) M.ForceContractDisease(new /datum/disease/berserker(0)) @@ -64,6 +69,7 @@ description = "A nasty bacteria found in spoiled food." reagent_state = LIQUID color = "#1E4600" + can_synth = 0 /datum/reagent/salmonella/on_mob_life(mob/living/carbon/M) M.ForceContractDisease(new /datum/disease/food_poisoning(0)) @@ -75,6 +81,7 @@ description = "Liquid gibbis." reagent_state = LIQUID color = "#FF0000" + can_synth = 0 /datum/reagent/gibbis/on_mob_life(mob/living/carbon/M) if(volume > 2.5) @@ -87,6 +94,7 @@ description = "A disease-causing agent that is neither bacterial nor fungal nor viral and contains no genetic material." reagent_state = LIQUID color = "#FFFFFF" + can_synth = 0 /datum/reagent/prions/on_mob_life(mob/living/carbon/M) if(volume > 4.5) @@ -99,6 +107,7 @@ description = "Moldy old dust taken from a grave site." reagent_state = LIQUID color = "#465046" + can_synth = 0 /datum/reagent/grave_dust/on_mob_life(mob/living/carbon/M) if(volume > 4.5) @@ -111,6 +120,7 @@ description = "Aww, gross! These things can't be good for your heart. They're gunna eat it!" reagent_state = SOLID color = "#925D6C" + can_synth = 0 /datum/reagent/heartworms/on_mob_life(mob/living/carbon/M) if(volume > 4.5) @@ -128,6 +138,7 @@ description = "A guaranteed heart-stopper!" reagent_state = LIQUID color = "#AB1CCF" + can_synth = 0 /datum/reagent/concentrated_initro/on_mob_life(mob/living/M) if(volume >=5) diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index f0f11c796fc..b3b94ff7e88 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -698,6 +698,7 @@ id = "stimulants" description = "Increases run speed and eliminates stuns, can heal minor damage. If overdosed it will deal toxin damage and stun." color = "#C8A5DC" + can_synth = 0 /datum/reagent/medicine/stimulants/on_mob_life(mob/living/M) if(volume > 5) @@ -732,6 +733,7 @@ color = "#C8A5DC" metabolization_rate = 0.5 * REAGENTS_METABOLISM overdose_threshold = 60 + can_synth = 0 /datum/reagent/medicine/stimulative_agent/on_mob_life(mob/living/M) M.status_flags |= GOTTAGOFAST @@ -844,6 +846,7 @@ description = "Miniature medical robots that swiftly restore bodily damage. May begin to attack their host's cells in high amounts." reagent_state = SOLID color = "#555555" + can_synth = 0 /datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/M) M.adjustBruteLoss(-5*REAGENTS_EFFECT_MULTIPLIER) //A ton of healing - this is a 50 telecrystal investment. diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 272d5df3130..8b575be41a5 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -65,6 +65,7 @@ description = "A corruptive toxin produced by slimes." reagent_state = LIQUID color = "#13BC5E" // rgb: 19, 188, 94 + can_synth = 0 /datum/reagent/slimetoxin/on_mob_life(mob/living/M) if(ishuman(M)) @@ -83,6 +84,7 @@ description = "An advanced corruptive toxin produced by slimes." reagent_state = LIQUID color = "#13BC5E" // rgb: 19, 188, 94 + can_synth = 0 /datum/reagent/aslimetoxin/reaction_mob(mob/living/M, method=TOUCH, volume) if(method != TOUCH) @@ -338,6 +340,7 @@ color = "#CF3600" metabolization_rate = 0.1 penetrates_skin = 1 + can_synth = 0 /datum/reagent/polonium/on_mob_life(mob/living/M) M.apply_effect(8, IRRADIATE, negate_armor = 1) @@ -438,6 +441,7 @@ color = "#CF3600" metabolization_rate = 0.2 overdose_threshold = 40 + can_synth = 0 /datum/reagent/venom/on_mob_life(mob/living/M) if(prob(25)) @@ -624,6 +628,7 @@ description = "A highly potent cardiac poison - can kill within minutes." reagent_state = LIQUID color = "#7F10C0" + can_synth = 0 /datum/reagent/initropidril/on_mob_life(mob/living/M) if(prob(33)) @@ -686,6 +691,7 @@ reagent_state = LIQUID color = "#5F8BE1" metabolization_rate = 0.7 + can_synth = 0 /datum/reagent/sodium_thiopental/on_mob_life(mob/living/M) switch(current_cycle) @@ -713,6 +719,7 @@ color = "#646EA0" metabolization_rate = 0.8 penetrates_skin = 1 + can_synth = 0 /datum/reagent/ketamine/on_mob_life(mob/living/M) switch(current_cycle) @@ -797,6 +804,7 @@ reagent_state = LIQUID color = "#C2D8CD" metabolization_rate = 0.05 + can_synth = 0 /datum/reagent/coniine/on_mob_life(mob/living/M) M.adjustToxLoss(2) diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index 233211d93f9..ef00ea54c61 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -371,6 +371,7 @@ description = "YOUR FLESH! IT BURNS!" process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL. metabolization_rate = 1 + can_synth = 0 /datum/reagent/hellwater/on_mob_life(mob/living/M) M.fire_stacks = min(5, M.fire_stacks + 3) From 81a509c043abb1f8df3a8d7a4763859f9c91e397 Mon Sep 17 00:00:00 2001 From: Markolie Date: Fri, 11 Nov 2016 11:40:27 +0100 Subject: [PATCH 049/193] Fix cryo expel gas removal, undo syringe gun synth change --- code/game/machinery/cryo.dm | 11 ----------- code/game/mecha/equipment/tools/medical_tools.dm | 2 +- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 889f78f283f..33b1d79cb19 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -134,7 +134,6 @@ if(air_contents) temperature_archived = air_contents.temperature heat_gas_contents() - expel_gas() if(occupant) process_occupant() @@ -401,16 +400,6 @@ var/combined_energy = T20C*current_heat_capacity + air_heat_capacity*air_contents.temperature air_contents.temperature = combined_energy/combined_heat_capacity -/obj/machinery/atmospherics/unary/cryo_cell/proc/expel_gas() - if(air_contents.total_moles() < 1) - return - var/datum/gas_mixture/expel_gas = new - var/remove_amount = air_contents.total_moles()/100 - expel_gas = air_contents.remove(remove_amount) - expel_gas.temperature = T20C // Lets expel hot gas and see if that helps people not die as they are removed - loc.assume_air(expel_gas) - air_update_turf() - /obj/machinery/atmospherics/unary/cryo_cell/proc/go_out() if(!occupant) return diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 29158e083e5..23271355206 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -488,7 +488,7 @@ return 1 /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/add_known_reagent(r_id,r_name) - if(!(r_id in known_reagents) && (r_id in standard_medicines)) + if(!(r_id in known_reagents)) known_reagents += r_id known_reagents[r_id] = r_name return 1 From b24b02a4568157c0f38278f60c620eeac4be25fe Mon Sep 17 00:00:00 2001 From: FreeStylaLT Date: Fri, 11 Nov 2016 14:20:06 +0200 Subject: [PATCH 050/193] my arch nemesis - doors, second only to tables --- _maps/map_files/cyberiad/cyberiad.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 32febbdc55c..3eae1797f35 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -7887,7 +7887,7 @@ "cVI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) "cVJ" = (/turf/simulated/wall,/area/turret_protected/aisat_interior) "cVK" = (/obj/effect/decal/warning_stripes/east,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/camera{c_tag = "Mini Satellite Teleporter"; dir = 1; network = list("SS13","MiniSat")},/turf/simulated/floor/plasteel{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior) -"cVL" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Antechamber"; req_access_txt = "75"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior) +"cVL" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Antechamber"; req_access_txt = "75"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior) "cVM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/wall,/area/turret_protected/aisat_interior) "cVN" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) "cVO" = (/turf/simulated/wall/r_wall,/area/aisat/entrance{name = "\improper AI Satellite Atmospherics"}) From 55ffd16db8d05d4b6f00e12ee3b20bf4260c61b5 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 11 Nov 2016 10:39:50 -0500 Subject: [PATCH 051/193] Fixes Telekinetic Simple Mobs --- code/game/machinery/computer/camera_advanced.dm | 2 +- code/game/objects/items/devices/camera_bug.dm | 2 +- code/modules/mob/hear_say.dm | 4 ++-- code/modules/mob/living/simple_animal/hostile/statue.dm | 4 ++-- code/modules/mob/living/update_status.dm | 4 ++-- code/modules/mob/mob.dm | 4 ++-- code/modules/mob/update_status.dm | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index f1d7149f9fa..ea3ba02ea1f 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -20,7 +20,7 @@ jump_action.Grant(user) /obj/machinery/computer/camera_advanced/check_eye(mob/user) - if((stat & (NOPOWER|BROKEN)) || !Adjacent(user) || !user.can_see() || user.incapacitated()) + if((stat & (NOPOWER|BROKEN)) || !Adjacent(user) || !user.has_vision() || user.incapacitated()) user.unset_machine() return 0 return 1 diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index fb617133d83..b0e04a5ae77 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -55,7 +55,7 @@ interact(user) /obj/item/device/camera_bug/check_eye(var/mob/user as mob) - if(user.stat || loc != user || !user.canmove || !user.can_see() || !current) + if(user.stat || loc != user || !user.canmove || !user.has_vision() || !current) user.reset_view(null) user.unset_machine() return null diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 3a813b0a557..f158534475e 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -28,7 +28,7 @@ //non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet. if(language && (language.flags & NONVERBAL)) - if(!can_see()) //blind people can't see dumbass + if(!has_vision()) //blind people can't see dumbass message = stars(message) if(!speaker || !(speaker in view(src))) @@ -95,7 +95,7 @@ //non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet. if(language && (language.flags & NONVERBAL)) - if(!can_see()) //blind people can't see dumbass + if(!has_vision()) //blind people can't see dumbass message = stars(message) if(!speaker || !(speaker in view(src))) diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index d0e8e0e4bad..d749db16bf5 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -118,11 +118,11 @@ for(var/atom/check in check_list) for(var/mob/living/M in viewers(world.view + 1, check) - src) if(M.client && CanAttack(M) && !M.has_unlimited_silicon_privilege) - if(M.can_see()) + if(M.has_vision()) return M for(var/obj/mecha/M in view(world.view + 1, check)) //assuming if you can see them they can see you if(M.occupant && M.occupant.client) - if(M.occupant.can_see()) + if(M.occupant.has_vision()) return M.occupant return null diff --git a/code/modules/mob/living/update_status.dm b/code/modules/mob/living/update_status.dm index 5cbf7cae450..f817b03482e 100644 --- a/code/modules/mob/living/update_status.dm +++ b/code/modules/mob/living/update_status.dm @@ -1,5 +1,5 @@ /mob/living/update_blind_effects() - if(!can_see()) + if(!has_vision()) overlay_fullscreen("blind", /obj/screen/fullscreen/blind) throw_alert("blind", /obj/screen/alert/blind) return 1 @@ -43,7 +43,7 @@ return !(ear_deaf || (disabilities & DEAF)) // Whether the mob is able to see -/mob/living/can_see() +/mob/living/has_vision() return !(eye_blind || (disabilities & BLIND) || stat) // Whether the mob is capable of talking diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index e312ff9556b..6415d077cf0 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -62,7 +62,7 @@ if(!client) return if(type) - if(type & 1 && !can_see())//Vision related + if(type & 1 && !has_vision())//Vision related if(!( alt )) return else @@ -74,7 +74,7 @@ else msg = alt type = alt_type - if(type & 1 && !can_see()) + if(type & 1 && !has_vision()) return // Added voice muffling for Issue 41. if(stat == UNCONSCIOUS || (sleeping > 0 && stat != DEAD)) diff --git a/code/modules/mob/update_status.dm b/code/modules/mob/update_status.dm index 3893085edb3..b9245fc1b6e 100644 --- a/code/modules/mob/update_status.dm +++ b/code/modules/mob/update_status.dm @@ -37,7 +37,7 @@ /mob/proc/can_hear() return 1 -/mob/proc/can_see() +/mob/proc/has_vision() return 1 /mob/proc/can_speak() From e997207d1f5e95b8141c3343965c383e2ff7c61a Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Fri, 11 Nov 2016 08:29:15 -0800 Subject: [PATCH 052/193] Patreon Modifications - Adds a `donators` table for our patreon supporters. - Intended to be half-automated, half-manual, in order to correlate patreon accounts to ckeys. Uses the `active` field so that supporters don't have to have their ckey associated every time they stop and restart their donations. - Current actions: - Donators at tier 1 or greater get a palm tree next to their name in OOC (toggleable) - Donators at tier 1 or greater get +5 loadout points. - Known issue: Loadout points will not update if the table is modified during a round where the user has already logged in, due to preference datum caching. There's not really any good way to fix this, unfortunately. --- SQL/paradise_schema.sql | 19 +++++++++++++ SQL/paradise_schema_prefixed.sql | 18 +++++++++++++ code/__DEFINES/misc.dm | 6 +++++ code/__DEFINES/preferences.dm | 3 ++- code/game/verbs/ooc.dm | 8 ++++++ code/modules/client/client defines.dm | 5 +++- code/modules/client/client procs.dm | 25 ++++++++++++++++-- code/modules/client/preference/preferences.dm | 21 ++++++++++++--- icons/ooc_tag_16x.dmi | Bin 0 -> 838 bytes 9 files changed, 97 insertions(+), 8 deletions(-) create mode 100644 icons/ooc_tag_16x.dmi diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index 1069dd6b2d6..9bfc6fa90b0 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -140,6 +140,25 @@ CREATE TABLE `death` ( ) ENGINE=MyISAM AUTO_INCREMENT=166546 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `donators` +-- + +DROP TABLE IF EXISTS `donators`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `donators` ( + `patreon_name` varchar(32) NOT NULL, + `tier` int(2), + `ckey` varchar(32) COMMENT 'Manual Field', + `start_date` datetime, + `end_date` datetime, + `active` boolean, + PRIMARY KEY (`patreon_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + + -- -- Table structure for table `admin` -- diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql index 55e71aa2aab..c0cc8c86d6b 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -140,6 +140,24 @@ CREATE TABLE `SS13_death` ( ) ENGINE=MyISAM AUTO_INCREMENT=166546 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `donators` +-- + +DROP TABLE IF EXISTS `SS13_donators`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `donators` ( + `patreon_name` varchar(32) NOT NULL, + `tier` int(2), + `ckey` varchar(32) COMMENT 'Manual Field', + `start_date` datetime, + `end_date` datetime, + `active` boolean, + PRIMARY KEY (`patreon_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `SS13_admin` -- diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index dad6165400f..738549e8b1b 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -287,3 +287,9 @@ #define SHELTER_DEPLOY_BAD_TURFS "bad turfs" #define SHELTER_DEPLOY_BAD_AREA "bad area" #define SHELTER_DEPLOY_ANCHORED_OBJECTS "anchored objects" + + +// Client donator levels +#define DONATOR_LEVEL_NONE 0 +#define DONATOR_LEVEL_ONE 1 +#define DONATOR_LEVEL_TWO 2 \ No newline at end of file diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 703b3e6b205..d39cc600221 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -24,5 +24,6 @@ #define DISABLE_KARMA_REMINDER 4096 #define MEMBER_PUBLIC 8192 #define CHAT_NO_ADMINLOGS 16384 +#define DONATOR_PUBLIC 32768 -#define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS|CHAT_LOOC|MEMBER_PUBLIC) +#define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC) diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 2c896f3dbdf..ff517be2c1d 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -61,16 +61,24 @@ var/global/admin_ooc_colour = "#b82e00" for(var/client/C in clients) if(C.prefs.toggles & CHAT_OOC) var/display_name = src.key + if(prefs.unlock_content) if(prefs.toggles & MEMBER_PUBLIC) var/icon/byond = icon('icons/member_content.dmi', "blag") display_name = "[bicon(byond)][display_name]" + + if(donator_level >= DONATOR_LEVEL_ONE) + if((prefs.toggles & DONATOR_PUBLIC)) + var/icon/donator = icon('icons/ooc_tag_16x.dmi', "donator") + display_name = "[bicon(donator)][display_name]" + if(holder) if(holder.fakekey) if(C.holder) display_name = "[holder.fakekey]/([src.key])" else display_name = holder.fakekey + to_chat(C, "OOC: [display_name]: [msg]") /proc/toggle_ooc() diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index c1cbd07daee..d29197f3a1e 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -88,4 +88,7 @@ // Their chat window, sort of important. // See /goon/code/datums/browserOutput.dm - var/datum/chatOutput/chatOutput \ No newline at end of file + var/datum/chatOutput/chatOutput + + // Donator stuff. + var/donator_level = DONATOR_LEVEL_NONE \ No newline at end of file diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 7a668e375fc..aeec5f74bf7 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -299,6 +299,8 @@ admins += src holder.owner = src + donator_check() + //preferences datum - also holds some persistant data for the client (because we may as well keep these datums to a minimum) prefs = preferences_datums[ckey] if(!prefs) @@ -372,10 +374,29 @@ return ..() +/client/proc/donator_check() + if(IsGuestKey(key)) + return + + establish_db_connection() + if(!dbcon.IsConnected()) + return + + //Donator stuff. + var/DBQuery/query_donor_select = dbcon.NewQuery("SELECT ckey, tier, active FROM `[format_table_name("donators")]` WHERE ckey = '[ckey]'") + query_donor_select.Execute() + while(query_donor_select.NextRow()) + log_to_dd("Donor Query Result: [json_encode(query_donor_select.item)]") + if(!text2num(query_donor_select.item[3])) + log_to_dd("Donor inactive, removing benefits.") + // Inactive donator. + donator_level = DONATOR_LEVEL_NONE + return + donator_level = text2num(query_donor_select.item[2]) + break /client/proc/log_client_to_db() - - if( IsGuestKey(src.key) ) + if(IsGuestKey(key)) return establish_db_connection() diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 72ec8f101d2..62b02b51b34 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -61,7 +61,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts #define MAX_SAVE_SLOTS 20 // Save slots for regular players #define MAX_SAVE_SLOTS_MEMBER 20 // Save slots for BYOND members -#define MAX_GEAR_COST config.max_loadout_points #define TAB_CHAR 0 #define TAB_GAME 1 @@ -73,6 +72,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used // var/savefile_version = 0 var/max_save_slots = MAX_SAVE_SLOTS + var/max_gear_slots = 0 //non-preference stuff var/warns = 0 @@ -212,11 +212,18 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts /datum/preferences/New(client/C) b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") + if(istype(C)) if(!IsGuestKey(C.key)) unlock_content = C.IsByondMember() if(unlock_content) max_save_slots = MAX_SAVE_SLOTS_MEMBER + + max_gear_slots = config.max_loadout_points + if(C.donator_level >= DONATOR_LEVEL_ONE) + max_gear_slots += 5 + log_to_dd("Added 5 gear slots to [C.ckey], now [max_gear_slots]") + var/loaded_preferences_successfully = load_preferences(C) if(loaded_preferences_successfully) if(load_character(C)) @@ -428,6 +435,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts dat += "OOC notes: Edit
" if(unlock_content) dat += "BYOND Membership Publicity: [(toggles & MEMBER_PUBLIC) ? "Public" : "Hidden"]
" + if(user.client.donator_level >= DONATOR_LEVEL_ONE) + dat += "Donator Publicity: [(toggles & DONATOR_PUBLIC) ? "Public" : "Hidden"]
" dat += "Randomized character slot: [randomslot ? "Yes" : "No"]
" dat += "Ghost ears: [(toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]
" @@ -464,10 +473,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts total_cost += G.cost var/fcolor = "#3366CC" - if(total_cost < MAX_GEAR_COST) + if(total_cost < max_gear_slots) fcolor = "#E67300" dat += "" - dat += "" + dat += "" dat += "{{if data.isAI}}{{/if}} {{else value.sensor_type == 3}} - {{if data.isAI}}{{/if}} + {{if data.isAI}}{{/if}} {{/if}} {{/for}}
[total_cost]/[MAX_GEAR_COST] loadout points spent. \[Clear Loadout\]
[total_cost]/[max_gear_slots] loadout points spent. \[Clear Loadout\]
" var/firstcat = 1 @@ -1108,7 +1117,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts type_blacklist += G.subtype_path total_cost += G.cost - if((total_cost + TG.cost) <= MAX_GEAR_COST) + if((total_cost + TG.cost) <= max_gear_slots) gear += TG.display_name else if(href_list["gear"] && href_list["tweak"]) @@ -1875,6 +1884,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(unlock_content) toggles ^= MEMBER_PUBLIC + if("donor_public") + if(user.client.donator_level >= DONATOR_LEVEL_ONE) + toggles ^= DONATOR_PUBLIC + if("gender") if(gender == MALE) gender = FEMALE diff --git a/icons/ooc_tag_16x.dmi b/icons/ooc_tag_16x.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e8aa0ed66e6795e3b4b98842707289eaeed695b8 GIT binary patch literal 838 zcmWlXYiv^m9L4{=ZEqjz`$4;PEtGX@yQb^<$cW!csvMckB({>oNwO3z z`Gukg`_Z-nftIrthmkLgh*h&%-)dG{*%KtyISRZ+4Rs`~B{90)NO~5+UbTQfpws=+ z6ufTrig~=TDvO;+QaD+>FtsC|Z%P z-&C*M>Chq5gm^Q;zE{nrqTT>^I}YkFX~3=;?5xF@C2SIZk}#p)j$Rj{K7;~zEQsb- zoK#>+jkmPeug7lVGcL(=LWivtvJC?c^th0&kiD1@<9#Vk$#G1HL)z(evSy=T;YAa+ zSunB;n{CL|qu+t2UAV&Fk^tved?3MT`NA=|P0w%v5neXo`DNHz2d)9LJj@Y3=iy^M zF0j{Mm&io4Co91LJtmi6M=jpeVRtnSYj8mKQ$x#fA|53>JJuKv=QwWD#sa%M?kI4B z`P|T5?)EK?<;U4<)3cThij@=weShJFV79dX>kt1pzP|kFA`_jSedo5O^xgUU`{ohz?Qz=;M~ubM=uU?<5%}phxIoS+^>zKS=(j3JbmX><&Tt%Wjkjg+^+usx%EQ9 literal 0 HcmV?d00001 From 122178591a45e62b71f39b901ed463ec498f628b Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Fri, 11 Nov 2016 08:43:26 -0800 Subject: [PATCH 053/193] OOPS FORGOT THE DEBUG MESSAGES WEW --- code/modules/client/client procs.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index aeec5f74bf7..cb482546355 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -386,9 +386,7 @@ var/DBQuery/query_donor_select = dbcon.NewQuery("SELECT ckey, tier, active FROM `[format_table_name("donators")]` WHERE ckey = '[ckey]'") query_donor_select.Execute() while(query_donor_select.NextRow()) - log_to_dd("Donor Query Result: [json_encode(query_donor_select.item)]") if(!text2num(query_donor_select.item[3])) - log_to_dd("Donor inactive, removing benefits.") // Inactive donator. donator_level = DONATOR_LEVEL_NONE return From 71b64bbb5aab0b255fe2196208d6b361f900f188 Mon Sep 17 00:00:00 2001 From: TullyBurnalot Date: Sat, 12 Nov 2016 01:32:50 +0000 Subject: [PATCH 054/193] Fixes Gun Renaming - Renaming guns now only produces 1 input box --- code/modules/projectiles/gun.dm | 1 - code/modules/projectiles/guns/projectile/revolver.dm | 4 ---- 2 files changed, 5 deletions(-) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 6ede088c4ce..6cafcce56c3 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -334,7 +334,6 @@ obj/item/weapon/gun/proc/newshot() /obj/item/weapon/gun/proc/rename_gun(mob/M) var/input = stripped_input(M,"What do you want to name the gun?", ,"", MAX_NAME_LEN) - if(src && input && !M.stat && in_range(M,src) && !M.restrained() && M.canmove) name = input to_chat(M, "You name the gun [input]. Say hello to your new friend.") diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index affc16de296..884b97c8ffb 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -34,10 +34,6 @@ update_icon() chamber_round(0) - if(unique_rename) - if(istype(A, /obj/item/weapon/pen)) - rename_gun(user) - /obj/item/weapon/gun/projectile/revolver/attack_self(mob/living/user) var/num_unloaded = 0 chambered = null From 1955f8638355be7a02ccf4ebdd5bb9ab575a77a9 Mon Sep 17 00:00:00 2001 From: TullyBurnalot Date: Sat, 12 Nov 2016 01:59:21 +0000 Subject: [PATCH 055/193] Fax Guide Removal - Removes Fax Guides from HoS and HoP Lockers --- .../structures/crates_lockers/closets/secure/security.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 640539e745b..fce3cd376e2 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -47,7 +47,6 @@ New() ..() - new /obj/item/weapon/book/manual/faxes(src) new /obj/item/clothing/glasses/sunglasses(src) new /obj/item/clothing/head/hopcap(src) new /obj/item/weapon/cartridge/hop(src) @@ -103,7 +102,6 @@ new /obj/item/weapon/storage/backpack/security(src) else new /obj/item/weapon/storage/backpack/satchel_sec(src) - new /obj/item/weapon/book/manual/faxes(src) new /obj/item/weapon/cartridge/hos(src) new /obj/item/device/radio/headset/heads/hos/alt(src) new /obj/item/clothing/under/rank/head_of_security(src) From 64a2e876a705f0fe090aac2ccda1b350ce9f9b2d Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Wed, 9 Nov 2016 04:54:55 -0500 Subject: [PATCH 056/193] Adds switch-layer rendering functionality for facial hair, glasses and head accessories. Glasses will now overlay hair only in certain circumstances. Hair that is short (has glasses_over set) will have glasses rendered on top of it rather than the default behaviour of below it. --- code/__DEFINES/misc.dm | 35 +++++++------ code/game/dna/dna2_helpers.dm | 8 +-- .../mob/living/carbon/human/appearance.dm | 1 + .../mob/living/carbon/human/update_icons.dm | 45 +++++++++++------ .../mob/new_player/sprite_accessories.dm | 50 +++++++++++++++++++ 5 files changed, 101 insertions(+), 38 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index dad6165400f..2f4b5718208 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -196,7 +196,7 @@ //Human Overlays Indexes///////// #define MUTANTRACE_LAYER 1 -#define TAIL_UNDERLIMBS_LAYER 2 +#define TAIL_UNDERLIMBS_LAYER 2 //Tail split-rendering. #define LIMBS_LAYER 3 #define MARKINGS_LAYER 4 #define UNDERWEAR_LAYER 5 @@ -211,21 +211,24 @@ #define BELT_LAYER 14 //Possible make this an overlay of somethign required to wear a belt? #define SUIT_STORE_LAYER 15 #define BACK_LAYER 16 -#define HAIR_LAYER 17 //TODO: make part of head layer? -#define HEAD_ACCESSORY_LAYER 18 -#define FHAIR_LAYER 19 -#define TAIL_LAYER 20 //bs12 specific. this hack is probably gonna come back to haunt me -#define GLASSES_LAYER 21 -#define FACEMASK_LAYER 22 -#define HEAD_LAYER 23 -#define COLLAR_LAYER 24 -#define HANDCUFF_LAYER 25 -#define LEGCUFF_LAYER 26 -#define L_HAND_LAYER 27 -#define R_HAND_LAYER 28 -#define TARGETED_LAYER 29 //BS12: Layer for the target overlay from weapon targeting system -#define FIRE_LAYER 30 //If you're on fire -#define TOTAL_LAYERS 30 +#define HEAD_ACCESSORY_LAYER 17 +#define FHAIR_LAYER 18 +#define GLASSES_LAYER 19 +#define HAIR_LAYER 20 //TODO: make part of head layer? +#define HEAD_ACC_OVER_LAYER 21 //Select-layer rendering. +#define FHAIR_OVER_LAYER 22 //Select-layer rendering. +#define GLASSES_OVER_LAYER 23 //Select-layer rendering. +#define TAIL_LAYER 24 //bs12 specific. this hack is probably gonna come back to haunt me +#define FACEMASK_LAYER 25 +#define HEAD_LAYER 26 +#define COLLAR_LAYER 27 +#define HANDCUFF_LAYER 28 +#define LEGCUFF_LAYER 29 +#define L_HAND_LAYER 30 +#define R_HAND_LAYER 31 +#define TARGETED_LAYER 32 //BS12: Layer for the target overlay from weapon targeting system +#define FIRE_LAYER 33 //If you're on fire +#define TOTAL_LAYERS 33 ///Access Region Codes/// #define REGION_ALL 0 diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index 2c5fdbbb5b1..e38fdca5b8d 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -174,13 +174,7 @@ if((tail_marks > 0) && (tail_marks <= number_tail_marks)) H.m_styles["tail"] = marking_styles_list[tail_marks] - H.force_update_limbs() - H.update_eyes() - H.update_hair() - H.update_fhair() - H.update_markings() - H.update_tail_layer() - H.update_head_accessory() + H.regenerate_icons() return 1 else diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index eb58d39ea7c..ad1ab28c435 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -43,6 +43,7 @@ H.h_style = hair_style update_hair() + update_inv_glasses() return 1 /mob/living/carbon/human/proc/change_facial_hair(var/facial_hair_style) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 037e5234d27..48555229aad 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -395,6 +395,7 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/proc/update_head_accessory(var/update_icons=1) //Reset our head accessory overlays_standing[HEAD_ACCESSORY_LAYER] = null + overlays_standing[HEAD_ACC_OVER_LAYER] = null var/obj/item/organ/external/head/head_organ = get_organ("head") if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) ) @@ -408,9 +409,8 @@ var/global/list/damage_icon_parts = list() //base icons var/icon/head_accessory_standing = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s") - if(head_organ.ha_style && (head_organ.species.bodyflags & HAS_HEAD_ACCESSORY)) - var/datum/sprite_accessory/head_accessory_style = head_accessory_styles_list[head_organ.ha_style] + var/datum/sprite_accessory/head_accessory/head_accessory_style = head_accessory_styles_list[head_organ.ha_style] if(head_accessory_style && head_accessory_style.species_allowed) if(head_organ.species.name in head_accessory_style.species_allowed) var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s") @@ -418,11 +418,14 @@ var/global/list/damage_icon_parts = list() head_accessory_s.Blend(rgb(head_organ.r_headacc, head_organ.g_headacc, head_organ.b_headacc), ICON_ADD) head_accessory_standing = head_accessory_s //head_accessory_standing.Blend(head_accessory_s, ICON_OVERLAY) //Having it this way preserves animations. Useful for animated antennae. + + if(head_accessory_style.over_hair) //Select which layer to use based on the properties of the head accessory style. + overlays_standing[HEAD_ACC_OVER_LAYER] = image(head_accessory_standing) + else + overlays_standing[HEAD_ACCESSORY_LAYER] = image(head_accessory_standing) else //warning("Invalid ha_style for [species.name]: [ha_style]") - overlays_standing[HEAD_ACCESSORY_LAYER] = image(head_accessory_standing) - if(update_icons) update_icons() @@ -446,7 +449,7 @@ var/global/list/damage_icon_parts = list() //var/icon/debrained_s = new /icon("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s") if(head_organ.h_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic()))) - var/datum/sprite_accessory/hair_style = hair_styles_list[head_organ.h_style] + var/datum/sprite_accessory/hair/hair_style = hair_styles_list[head_organ.h_style] //if(!src.get_int_organ(/obj/item/organ/internal/brain) && src.get_species() != "Machine" )//make it obvious we have NO BRAIN // hair_standing.Blend(debrained_s, ICON_OVERLAY) if(hair_style && hair_style.species_allowed) @@ -477,7 +480,8 @@ var/global/list/damage_icon_parts = list() //FACIAL HAIR OVERLAY /mob/living/carbon/human/proc/update_fhair(var/update_icons=1) //Reset our facial hair - overlays_standing[FHAIR_LAYER] = null + overlays_standing[FHAIR_LAYER] = null + overlays_standing[FHAIR_OVER_LAYER] = null var/obj/item/organ/external/head/head_organ = get_organ("head") if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED)) @@ -493,7 +497,7 @@ var/global/list/damage_icon_parts = list() var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s") if(head_organ.f_style) - var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[head_organ.f_style] + var/datum/sprite_accessory/facial_hair/facial_hair_style = facial_hair_styles_list[head_organ.f_style] if(facial_hair_style && facial_hair_style.species_allowed) if((head_organ.species.name in facial_hair_style.species_allowed) || (head_organ.species.flags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics... var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") @@ -509,11 +513,14 @@ var/global/list/damage_icon_parts = list() facial_s.Blend(facial_secondary_s, ICON_OVERLAY) face_standing.Blend(facial_s, ICON_OVERLAY) + + if(facial_hair_style.over_hair) //Select which layer to use based on the properties of the facial hair style. + overlays_standing[FHAIR_OVER_LAYER] = image(face_standing) + else + overlays_standing[FHAIR_LAYER] = image(face_standing) else //warning("Invalid f_style for [species.name]: [f_style]") - overlays_standing[FHAIR_LAYER] = image(face_standing) - if(update_icons) update_icons() /mob/living/carbon/human/update_mutations(var/update_icons=1) @@ -736,6 +743,8 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/update_inv_glasses(var/update_icons=1) + overlays_standing[GLASSES_LAYER] = null + overlays_standing[GLASSES_OVER_LAYER] = null if(client && hud_used) var/obj/screen/inventory/inv = hud_used.inv_slots[slot_glasses] @@ -743,20 +752,26 @@ var/global/list/damage_icon_parts = list() inv.update_icon() if(glasses) + var/image/new_glasses + var/obj/item/organ/external/head/head_organ = get_organ("head") if(client && hud_used && hud_used.hud_shown) if(hud_used.inventory_shown) //if the inventory is open ... glasses.screen_loc = ui_glasses //...draw the item in the inventory screen client.screen += glasses //Either way, add the item to the HUD if(glasses.icon_override) - overlays_standing[GLASSES_LAYER] = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]") - else if(glasses.sprite_sheets && glasses.sprite_sheets[species.name]) - overlays_standing[GLASSES_LAYER]= image("icon" = glasses.sprite_sheets[species.name], "icon_state" = "[glasses.icon_state]") + new_glasses = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]") + else if(glasses.sprite_sheets && glasses.sprite_sheets[head_organ.species.name]) + new_glasses = image("icon" = glasses.sprite_sheets[head_organ.species.name], "icon_state" = "[glasses.icon_state]") else - overlays_standing[GLASSES_LAYER]= image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]") + new_glasses = image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]") + + var/datum/sprite_accessory/hair/hair_style = hair_styles_list[head_organ.h_style] + if(hair_style && hair_style.glasses_over) //Select which layer to use based on the properties of the hair style. Hair styles with hair that don't overhang the arms of the glasses should have glasses_over set to a positive value. + overlays_standing[GLASSES_OVER_LAYER] = new_glasses + else + overlays_standing[GLASSES_LAYER] = new_glasses - else - overlays_standing[GLASSES_LAYER] = null if(update_icons) update_icons() /mob/living/carbon/human/update_inv_ears(var/update_icons=1) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 0e8f3456335..2e40b49db36 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -65,19 +65,23 @@ /datum/sprite_accessory/hair icon = 'icons/mob/human_face.dmi' // default icon for all hairs + var/glasses_over //Hair styles with hair that don't overhang the arms of glasses should have glasses_over set to a positive value. /datum/sprite_accessory/hair/bald name = "Bald" icon_state = "bald" species_allowed = list("Human", "Unathi", "Vox", "Diona", "Kidan", "Grey", "Plasmaman", "Skeleton", "Vulpkanin", "Tajaran") + glasses_over = 1 /datum/sprite_accessory/hair/short name = "Short Hair" // try to capatilize the names please~ icon_state = "hair_a" // you do not need to define _s or _l sub-states, game automatically does this for you + glasses_over = 1 /datum/sprite_accessory/hair/cut name = "Cut Hair" icon_state = "hair_c" + glasses_over = 1 /datum/sprite_accessory/hair/long name = "Shoulder-length Hair" @@ -123,6 +127,7 @@ name = "Ponytail male" icon_state = "hair_ponytailm" gender = MALE + glasses_over = 1 /datum/sprite_accessory/hair/ponytail2 name = "Ponytail female" @@ -132,16 +137,19 @@ /datum/sprite_accessory/hair/ponytail3 name = "Ponytail alt" icon_state = "hair_ponytail3" + glasses_over = 1 /datum/sprite_accessory/hair/sideponytail name = "Side Ponytail" icon_state = "hair_stail" gender = FEMALE + glasses_over = 1 /datum/sprite_accessory/hair/highponytail name = "High Ponytail" icon_state = "hair_highponytail" gender = FEMALE + glasses_over = 1 /datum/sprite_accessory/hair/wisp name = "Wisp" @@ -157,11 +165,13 @@ icon_state = "hair_pompadour" gender = MALE species_allowed = list("Human", "Slime People", "Unathi") + glasses_over = 1 /datum/sprite_accessory/hair/quiff name = "Quiff" icon_state = "hair_quiff" gender = MALE + glasses_over = 1 /datum/sprite_accessory/hair/bedhead name = "Bedhead" @@ -197,6 +207,7 @@ name = "Bowl" icon_state = "hair_bowlcut" gender = MALE + glasses_over = 1 /datum/sprite_accessory/hair/braid2 name = "Long Braid" @@ -219,20 +230,24 @@ icon_state = "hair_buzzcut" gender = MALE species_allowed = list("Human", "Slime People", "Unathi") + glasses_over = 1 /datum/sprite_accessory/hair/crew name = "Crewcut" icon_state = "hair_crewcut" gender = MALE + glasses_over = 1 /datum/sprite_accessory/hair/combover name = "Combover" icon_state = "hair_combover" gender = MALE + glasses_over = 1 /datum/sprite_accessory/hair/devillock name = "Devil Lock" icon_state = "hair_devilock" + glasses_over = 1 /datum/sprite_accessory/hair/dreadlocks name = "Dreadlocks" @@ -249,6 +264,7 @@ /datum/sprite_accessory/hair/afro2 name = "Afro 2" icon_state = "hair_afro2" + glasses_over = 1 /datum/sprite_accessory/hair/afro_large name = "Big Afro" @@ -259,6 +275,7 @@ name = "Flat Top" icon_state = "hair_sergeant" gender = MALE + glasses_over = 1 /datum/sprite_accessory/hair/emo name = "Emo" @@ -276,31 +293,37 @@ name = "Hitop" icon_state = "hair_hitop" gender = MALE + glasses_over = 1 /datum/sprite_accessory/hair/mohawk name = "Mohawk" icon_state = "hair_d" species_allowed = list("Human", "Slime People", "Unathi") + glasses_over = 1 /datum/sprite_accessory/hair/jensen name = "Adam Jensen Hair" icon_state = "hair_jensen" gender = MALE + glasses_over = 1 /datum/sprite_accessory/hair/cia name = "CIA" icon_state = "hair_cia" gender = MALE + glasses_over = 1 /datum/sprite_accessory/hair/mulder name = "Mulder" icon_state = "hair_mulder" gender = MALE + glasses_over = 1 /datum/sprite_accessory/hair/gelled name = "Gelled Back" icon_state = "hair_gelled" gender = FEMALE + glasses_over = 1 /datum/sprite_accessory/hair/gentle name = "Gentle" @@ -311,6 +334,7 @@ name = "Spiky" icon_state = "hair_spikey" species_allowed = list("Human", "Slime People", "Unathi") + glasses_over = 1 /datum/sprite_accessory/hair/kusanagi name = "Kusanagi Hair" @@ -320,6 +344,7 @@ name = "Pigtails" icon_state = "hair_kagami" gender = FEMALE + glasses_over = 1 /datum/sprite_accessory/hair/himecut name = "Hime Cut" @@ -335,6 +360,7 @@ name = "Odango" icon_state = "hair_odango" gender = FEMALE + glasses_over = 1 /datum/sprite_accessory/hair/ombre name = "Ombre" @@ -349,11 +375,13 @@ /datum/sprite_accessory/hair/skinhead name = "Skinhead" icon_state = "hair_skinhead" + glasses_over = 1 /datum/sprite_accessory/hair/balding name = "Balding Hair" icon_state = "hair_e" gender = MALE // turnoff! + glasses_over = 1 /datum/sprite_accessory/hair/longemo name = "Long Emo" @@ -385,6 +413,7 @@ name = "Unshaven Mohawk" icon_state = "hair_unshavenmohawk" gender = MALE + glasses_over = 1 /datum/sprite_accessory/hair/drills name = "Twincurls" @@ -401,6 +430,7 @@ /datum/sprite_accessory/hair/ipc species_allowed = list("Machine") + glasses_over = 1 /datum/sprite_accessory/hair/ipc/ipc_screen_pink name = "Pink IPC Screen" @@ -547,6 +577,7 @@ /datum/sprite_accessory/hair/unathi species_allowed = list("Unathi") + glasses_over = 1 /datum/sprite_accessory/hair/unathi/una_horns name = "Unathi Horns" @@ -593,6 +624,7 @@ /datum/sprite_accessory/hair/tajara species_allowed = list("Tajaran") + glasses_over = 1 /datum/sprite_accessory/hair/tajara/taj_hair_clean name = "Tajara Clean" @@ -601,11 +633,13 @@ /datum/sprite_accessory/hair/tajara/taj_hair_bangs name = "Tajara Bangs" icon_state = "hair_bangs" + glasses_over = null /datum/sprite_accessory/hair/tajara/taj_hair_braid name = "Tajara Braid" icon_state = "hair_tbraid" secondary_theme = "beads" + glasses_over = null /datum/sprite_accessory/hair/tajara/taj_hair_shaggy name = "Tajara Shaggy" @@ -642,22 +676,27 @@ /datum/sprite_accessory/hair/tajara/taj_hair_curls name = "Tajara Curly" icon_state = "hair_curly" + glasses_over = null /datum/sprite_accessory/hair/tajara/taj_hair_retro name = "Tajaran Ladies' Retro" icon_state = "hair_ladies_retro" + glasses_over = null /datum/sprite_accessory/hair/tajara/taj_hair_victory name = "Tajara Victory Curls" icon_state = "hair_victory" + glasses_over = null /datum/sprite_accessory/hair/tajara/taj_hair_bob name = "Tajara Bob" icon_state = "hair_tbob" + glasses_over = null /datum/sprite_accessory/hair/tajara/taj_hair_fingercurl name = "Tajara Finger Curls" icon_state = "hair_fingerwave" + glasses_over = null /datum/sprite_accessory/hair/vulpkanin species_allowed = list("Vulpkanin") @@ -694,6 +733,7 @@ /datum/sprite_accessory/hair/vulpkanin/vulp_hair_bun name = "Bun" icon_state = "bun" + glasses_over = 1 /datum/sprite_accessory/hair/vulpkanin/vulp_hair_jagged name = "Jagged" @@ -706,6 +746,7 @@ /datum/sprite_accessory/hair/vulpkanin/vulp_hair_hawk name = "Hawk" icon_state = "hawk" + glasses_over = 1 /datum/sprite_accessory/hair/vulpkanin/vulp_hair_anita name = "Anita" @@ -718,6 +759,7 @@ /datum/sprite_accessory/hair/vulpkanin/vulp_hair_spike name = "Spike" icon_state = "spike" + glasses_over = 1 /datum/sprite_accessory/hair/vulpkanin/vulp_hair_braided name = "Braided" @@ -726,6 +768,7 @@ /datum/sprite_accessory/hair/vox species_allowed = list("Vox") + glasses_over = 1 /datum/sprite_accessory/hair/vox/vox_quills_short name = "Short Vox Quills" @@ -787,6 +830,7 @@ /datum/sprite_accessory/hair/wryn species_allowed = list("Wryn") + glasses_over = 1 /datum/sprite_accessory/hair/wryn/wry_antennae_default name = "Antennae" @@ -794,6 +838,7 @@ /datum/sprite_accessory/hair/nucleation species_allowed = list("Nucleation") + glasses_over = 1 /datum/sprite_accessory/hair/nucleation/nuc_crystals name = "Nucleation Crystals" @@ -835,6 +880,7 @@ /datum/sprite_accessory/facial_hair icon = 'icons/mob/human_face.dmi' gender = MALE // barf (unless you're a dorf, dorfs dig chix /w beards :P) + var/over_hair /datum/sprite_accessory/facial_hair/shaved name = "Shaved" @@ -1024,6 +1070,7 @@ /datum/sprite_accessory/facial_hair/unathi species_allowed = list("Unathi") gender = NEUTER + over_hair = 1 /datum/sprite_accessory/facial_hair/unathi/una_spines_long name = "Long Spines" @@ -1594,6 +1641,7 @@ icon = 'icons/mob/body_accessory.dmi' species_allowed = list("Unathi", "Vulpkanin", "Tajaran", "Machine") icon_state = "accessory_none" + var/over_hair /datum/sprite_accessory/head_accessory/none name = "None" @@ -1602,6 +1650,7 @@ /datum/sprite_accessory/head_accessory/unathi species_allowed = list("Unathi") + over_hair = 1 /datum/sprite_accessory/head_accessory/unathi/simple name = "Simple" @@ -1701,6 +1750,7 @@ /datum/sprite_accessory/head_accessory/ipc species_allowed = list("Machine") + over_hair = 1 /datum/sprite_accessory/head_accessory/ipc/ipc_antennae name = "Antennae" From 5bf1ad3a18e0efe15c752af7ef3e18fe5baf6096 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Sat, 12 Nov 2016 14:01:50 -0800 Subject: [PATCH 057/193] Vision no longer blinks the blur overlay if your eyes are hurt --- code/modules/mob/living/carbon/human/life.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 471cb6bbf69..828337c14aa 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -840,9 +840,9 @@ SetEyeBlurry(0) else if(!vision || vision.is_broken()) // Vision organs cut out or broken? Permablind. - EyeBlind(1) + EyeBlind(2) blinded = 1 - EyeBlurry(1) + EyeBlurry(2) else //blindness @@ -859,7 +859,7 @@ //blurry sight if(vision.is_bruised()) // Vision organs impaired? Permablurry. - EyeBlurry(1) + EyeBlurry(2) if(eye_blurry) // Blurry eyes heal slowly AdjustEyeBlurry(-1) From fae398ae421747afddfa3f659af6b002df6929fd Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Sun, 13 Nov 2016 18:16:37 -0500 Subject: [PATCH 058/193] Replaces \blue and \red with spans, removes unnecessary SRCs and :s, Fixes Negative Cable Coil Bug --- .../helper_datums/construction_datum.dm | 29 +- .../game/machinery/computer/buildandrepair.dm | 268 ++++++++++-------- code/game/machinery/constructable_frame.dm | 14 +- 3 files changed, 169 insertions(+), 142 deletions(-) diff --git a/code/datums/helper_datums/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm index 6498f16c0d3..0a17435c5c0 100644 --- a/code/datums/helper_datums/construction_datum.dm +++ b/code/datums/helper_datums/construction_datum.dm @@ -61,7 +61,7 @@ else if(istype(used_atom, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = used_atom if(C.amount<4) - to_chat(user, ("There's not enough cable to finish the task.")) + to_chat(user, ("There's not enough cable to finish the task.")) return 0 else C.use(4) @@ -69,7 +69,7 @@ else if(istype(used_atom, /obj/item/stack)) var/obj/item/stack/S = used_atom if(S.amount < 5) - to_chat(user, ("There's not enough material in this stack.")) + to_chat(user, ("There's not enough material in this stack.")) return 0 else S.use(5) @@ -106,30 +106,29 @@ return proc/try_consume(mob/user as mob, atom/used_atom, amount) - if(amount>0) - // STACKS - if(istype(used_atom,/obj/item/stack)) - var/obj/item/stack/stack=used_atom - if(stack.amount < amount) - to_chat(user, "\red You don't have enough [stack]! You need at least [amount].") - return 0 - stack.use(amount) + if(amount > 0) // CABLES if(istype(used_atom,/obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/coil=used_atom - if(coil.amount < amount) - to_chat(user, "\red You don't have enough cable! You need at least [amount] coils.") + if(!coil.use(amount)) + to_chat(user, "You don't have enough cable! You need at least [amount] coils.") return 0 - coil.use(amount) // WELDER if(istype(used_atom,/obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/welder=used_atom if(!welder.isOn()) - to_chat(user, "\blue You tap the [src] with your unlit welder. [pick("Ding","Dong")].") + to_chat(user, "You tap the [src] with your unlit welder. [pick("Ding","Dong")].") return 0 if(!welder.remove_fuel(amount,user)) - to_chat(user, "\red You don't have enough fuel!") + to_chat(user, "You don't have enough fuel!") return 0 + // STACKS + if(istype(used_atom,/obj/item/stack)) + var/obj/item/stack/stack=used_atom + if(stack.amount < amount) + to_chat(user, "You don't have enough [stack]! You need at least [amount].") + return 0 + stack.use(amount) return 1 /datum/construction/reversible diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index b17a9a37aab..0c09bc5f2c5 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -287,7 +287,7 @@ /obj/item/weapon/circuitboard/supplycomp/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I,/obj/item/device/multitool)) - var/catastasis = src.contraband_enabled + var/catastasis = contraband_enabled var/opposite_catastasis if(catastasis) opposite_catastasis = "STANDARD" @@ -297,9 +297,9 @@ catastasis = "STANDARD" switch( alert("Current receiver spectrum is set to: [catastasis]","Multitool-Circuitboard interface","Switch to [opposite_catastasis]","Cancel") ) - //switch( alert("Current receiver spectrum is set to: " {(src.contraband_enabled) ? ("BROAD") : ("STANDARD")} , "Multitool-Circuitboard interface" , "Switch to " {(src.contraband_enabled) ? ("STANDARD") : ("BROAD")}, "Cancel") ) + //switch( alert("Current receiver spectrum is set to: " {(contraband_enabled) ? ("BROAD") : ("STANDARD")} , "Multitool-Circuitboard interface" , "Switch to " {(contraband_enabled) ? ("STANDARD") : ("BROAD")}, "Cancel") ) if("Switch to STANDARD","Switch to BROAD") - src.contraband_enabled = !src.contraband_enabled + contraband_enabled = !contraband_enabled if("Cancel") return @@ -345,97 +345,110 @@ switch(state) if(0) if(istype(P, /obj/item/weapon/wrench)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 20, target = src)) - to_chat(user, "\blue You wrench the frame into place.") - src.anchored = 1 - src.state = 1 + to_chat(user, "You wrench the frame into place.") + anchored = 1 + state = 1 if(istype(P, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = P if(!WT.remove_fuel(0, user)) - to_chat(user, "The welding tool must be on to complete this task.") + to_chat(user, "The welding tool must be on to complete this task.") return - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + playsound(loc, 'sound/items/Welder.ogg', 50, 1) if(do_after(user, 20, target = src)) if(!src || !WT.isOn()) return - to_chat(user, "\blue You deconstruct the frame.") - new /obj/item/stack/sheet/metal( src.loc, 5 ) + to_chat(user, "You deconstruct the frame.") + new /obj/item/stack/sheet/metal(loc, 5) qdel(src) if(1) if(istype(P, /obj/item/weapon/wrench)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 20, target = src)) - to_chat(user, "\blue You unfasten the frame.") - src.anchored = 0 - src.state = 0 + to_chat(user, "You unfasten the frame.") + anchored = 0 + state = 0 if(istype(P, /obj/item/weapon/circuitboard) && !circuit) var/obj/item/weapon/circuitboard/B = P if(B.board_type == "computer") - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - to_chat(user, "\blue You place the circuit board inside the frame.") - src.icon_state = "1" - src.circuit = P + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + to_chat(user, "You place the circuit board inside the frame.") + icon_state = "1" + circuit = P user.drop_item() P.loc = src else - to_chat(user, "\red This frame does not accept circuit boards of this type!") + to_chat(user, "This frame does not accept circuit boards of this type!") if(istype(P, /obj/item/weapon/screwdriver) && circuit) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "\blue You screw the circuit board into place.") - src.state = 2 - src.icon_state = "2" + playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + to_chat(user, "You screw the circuit board into place.") + state = 2 + icon_state = "2" if(istype(P, /obj/item/weapon/crowbar) && circuit) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - to_chat(user, "\blue You remove the circuit board.") - src.state = 1 - src.icon_state = "0" - circuit.loc = src.loc - src.circuit = null + playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) + to_chat(user, "You remove the circuit board.") + state = 1 + icon_state = "0" + circuit.loc = loc + circuit = null if(2) if(istype(P, /obj/item/weapon/screwdriver) && circuit) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "\blue You unfasten the circuit board.") - src.state = 1 - src.icon_state = "1" + playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + to_chat(user, "You unfasten the circuit board.") + state = 1 + icon_state = "1" if(istype(P, /obj/item/stack/cable_coil)) - if(P:amount >= 5) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + var/obj/item/stack/cable_coil/C = P + if(C.amount >= 5) + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + to_chat(user, "You start to add cables to the frame.") if(do_after(user, 20, target = src)) - if(P) - P:amount -= 5 - if(!P:amount) qdel(P) - to_chat(user, "\blue You add cables to the frame.") - src.state = 3 - src.icon_state = "3" + if(state == 2 && C.amount >= 5 && C.use(5)) + to_chat(user, "You add cables to the frame.") + state = 3 + icon_state = "3" + else + to_chat(user, "At some point during construction you lost some cable. Make sure you have five lengths before trying again.") + return + else + to_chat(user, "You need five lengths of cable to wire the frame.") + return if(3) if(istype(P, /obj/item/weapon/wirecutters)) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - to_chat(user, "\blue You remove the cables.") - src.state = 2 - src.icon_state = "2" - var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( src.loc ) + playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1) + to_chat(user, "You remove the cables.") + state = 2 + icon_state = "2" + var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc ) A.amount = 5 if(istype(P, /obj/item/stack/sheet/glass)) - if(P:amount >= 2) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + var/obj/item/stack/sheet/glass/G = P + if(G.amount >= 2) + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + to_chat(user, "You start to add the glass panel to the frame.") if(do_after(user, 20, target = src)) - if(P) - P:use(2) - to_chat(user, "\blue You put in the glass panel.") - src.state = 4 - src.icon_state = "4" + if(state == 3 && G.amount >= 2 && G.use(2)) + to_chat(user, "You put in the glass panel.") + state = 4 + icon_state = "4" + else + to_chat(user, "At some point during construction you lost some glass. Make sure you have two sheets before trying again.") + return + else + to_chat(user, "You need two sheets of glass for this.") + return if(4) if(istype(P, /obj/item/weapon/crowbar)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - to_chat(user, "\blue You remove the glass panel.") - src.state = 3 - src.icon_state = "3" - new /obj/item/stack/sheet/glass( src.loc, 2 ) + playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) + to_chat(user, "You remove the glass panel.") + state = 3 + icon_state = "3" + new /obj/item/stack/sheet/glass(loc, 2) if(istype(P, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "\blue You connect the monitor.") - var/B = new src.circuit.build_path ( src.loc ) + playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + to_chat(user, "You connect the monitor.") + var/B = new circuit.build_path (loc) if(circuit.powernet) B:powernet = circuit.powernet if(circuit.id) B:id = circuit.id if(circuit.records) B:records = circuit.records @@ -456,97 +469,110 @@ switch(state) if(0) if(istype(P, /obj/item/weapon/wrench)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 20, target = src)) - to_chat(user, "\blue You wrench the frame into place.") - src.anchored = 1 - src.state = 1 + to_chat(user, "You wrench the frame into place.") + anchored = 1 + state = 1 if(istype(P, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = P if(!WT.remove_fuel(0, user)) - to_chat(user, "The welding tool must be on to complete this task.") + to_chat(user, "The welding tool must be on to complete this task.") return - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + playsound(loc, 'sound/items/Welder.ogg', 50, 1) if(do_after(user, 20, target = src)) if(!src || !WT.isOn()) return - to_chat(user, "\blue You deconstruct the frame.") - new /obj/item/stack/sheet/mineral/bananium( src.loc, 5 ) + to_chat(user, "You deconstruct the frame.") + new /obj/item/stack/sheet/mineral/bananium(loc, 5) qdel(src) if(1) if(istype(P, /obj/item/weapon/wrench)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 20, target = src)) - to_chat(user, "\blue You unfasten the frame.") - src.anchored = 0 - src.state = 0 + to_chat(user, "You unfasten the frame.") + anchored = 0 + state = 0 if(istype(P, /obj/item/weapon/circuitboard) && !circuit) var/obj/item/weapon/circuitboard/B = P if(B.board_type == "honkcomputer") - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - to_chat(user, "\blue You place the circuit board inside the frame.") - src.icon_state = "1" - src.circuit = P + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + to_chat(user, "You place the circuit board inside the frame.") + icon_state = "1" + circuit = P user.drop_item() P.loc = src else - to_chat(user, "\red This frame does not accept circuit boards of this type!") + to_chat(user, "This frame does not accept circuit boards of this type!") if(istype(P, /obj/item/weapon/screwdriver) && circuit) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "\blue You screw the circuit board into place.") - src.state = 2 - src.icon_state = "2" + playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + to_chat(user, "You screw the circuit board into place.") + state = 2 + icon_state = "2" if(istype(P, /obj/item/weapon/crowbar) && circuit) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - to_chat(user, "\blue You remove the circuit board.") - src.state = 1 - src.icon_state = "0" - circuit.loc = src.loc - src.circuit = null + playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) + to_chat(user, "You remove the circuit board.") + state = 1 + icon_state = "0" + circuit.loc = loc + circuit = null if(2) if(istype(P, /obj/item/weapon/screwdriver) && circuit) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "\blue You unfasten the circuit board.") - src.state = 1 - src.icon_state = "1" + playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + to_chat(user, "You unfasten the circuit board.") + state = 1 + icon_state = "1" if(istype(P, /obj/item/stack/cable_coil)) - if(P:amount >= 5) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + var/obj/item/stack/cable_coil/C = P + if(C.amount >= 5) + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + to_chat(user, "You start to add cables to the frame.") if(do_after(user, 20, target = src)) - if(P) - P:amount -= 5 - if(!P:amount) qdel(P) - to_chat(user, "\blue You add cables to the frame.") - src.state = 3 - src.icon_state = "3" + if(state == 2 && C.amount >= 5 && C.use(5)) + to_chat(user, "You add cables to the frame.") + state = 3 + icon_state = "3" + else + to_chat(user, "At some point during construction you lost some cable. Make sure you have five lengths before trying again.") + return + else + to_chat(user, "You need five lengths of cable to wire the frame.") + return if(3) if(istype(P, /obj/item/weapon/wirecutters)) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - to_chat(user, "\blue You remove the cables.") - src.state = 2 - src.icon_state = "2" - var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( src.loc ) + playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1) + to_chat(user, "You remove the cables.") + state = 2 + icon_state = "2" + var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc ) A.amount = 5 if(istype(P, /obj/item/stack/sheet/glass)) - if(P:amount >= 2) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + var/obj/item/stack/sheet/glass/G = P + if(G.amount >= 2) + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + to_chat(user, "You start to add the glass panel to the frame.") if(do_after(user, 20, target = src)) - if(P) - P:use(2) - to_chat(user, "\blue You put in the glass panel.") - src.state = 4 - src.icon_state = "4" + if(state == 3 && G.amount >= 2 && G.use(2)) + to_chat(user, "You put in the glass panel.") + state = 4 + icon_state = "4" + else + to_chat(user, "At some point during construction you lost some glass. Make sure you have two sheets before trying again.") + return + else + to_chat(user, "You need two sheets of glass for this.") + return if(4) if(istype(P, /obj/item/weapon/crowbar)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - to_chat(user, "\blue You remove the glass panel.") - src.state = 3 - src.icon_state = "3" - new /obj/item/stack/sheet/glass( src.loc, 2 ) + playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) + to_chat(user, "You remove the glass panel.") + state = 3 + icon_state = "3" + new /obj/item/stack/sheet/glass(loc, 2) if(istype(P, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, "\blue You connect the monitor.") - var/B = new src.circuit.build_path ( src.loc ) + playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + to_chat(user, "You connect the monitor.") + var/B = new circuit.build_path (loc) if(circuit.powernet) B:powernet = circuit.powernet if(circuit.id) B:id = circuit.id if(circuit.records) B:records = circuit.records diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 2c6740ffbb3..d7384290164 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -69,21 +69,23 @@ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) to_chat(user, "You start to add cables to the frame.") if(do_after(user, 20, target = src)) - if(C.amount >= 5 && state == 1) - C.use(5) + if(state == 1 && C.amount >= 5 && C.use(5)) to_chat(user, "You add cables to the frame.") state = 2 icon_state = "box_1" + else + to_chat(user, "At some point during construction you lost some cable. Make sure you have five lengths before trying again.") + return else - to_chat(user, "You need five length of cable to wire the frame.") + to_chat(user, "You need five lengths of cable to wire the frame.") return else if(istype(P, /obj/item/stack/sheet/glass)) var/obj/item/stack/sheet/glass/G = P - if(G.amount<5) - to_chat(user, "\red You do not have enough glass to build a display case.") + if(G.amount < 5) + to_chat(user, "You do not have enough glass to build a display case.") return G.use(5) - to_chat(user, "\blue You add the glass to the frame.") + to_chat(user, "You add the glass to the frame.") playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) new /obj/structure/displaycase_frame(src.loc) qdel(src) From f5c9ebc0687b1a712b6030ac94fa8bbb29724896 Mon Sep 17 00:00:00 2001 From: Markolie Date: Mon, 14 Nov 2016 00:22:24 +0100 Subject: [PATCH 059/193] Grammar fix --- code/game/objects/structures/morgue.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index cf5c97ed593..90122f2280b 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -12,7 +12,7 @@ /obj/structure/morgue name = "morgue" - desc = "Used to keep bodies in untill someone fetches them." + desc = "Used to keep bodies in until someone fetches them." icon = 'icons/obj/stationobjs.dmi' icon_state = "morgue1" density = 1 From b25e9ca26173cf597e5400dd4db621d36e7dcf72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20J=C4=99drzejczak?= Date: Mon, 14 Nov 2016 01:42:30 +0100 Subject: [PATCH 060/193] floofs --- code/modules/customitems/item_defines.dm | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 18a0ffc9729..8929c2c2128 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -225,6 +225,29 @@ to_chat(target, "You comb your tail with the [src].") used = 1 +/obj/item/device/fluff/cardgage_helmet_kit //captain cardgage: Richard Ulery + name = "welding helmet modkit" + desc = "Some spraypaint and a stencil, perfect for painting flames onto a welding helmet!" + icon_state = "modkit" + w_class = 2 + force = 0 + throwforce = 0 + +/obj/item/device/fluff/cardgage_helmet_kit/afterattack(atom/target, mob/user, proximity) + if(!proximity || !ishuman(user) || user.lying) + return + var/mob/living/carbon/human/H = user + + if(istype(target, /obj/item/clothing/head/welding)) + to_chat(H, "You modify the appearance of [target].") + + var/obj/item/clothing/head/welding/flamedecal/P = new(get_turf(target)) + transfer_fingerprints_to(P) + qdel(target) + qdel(src) + return + to_chat(user, "You can't modify [target]!") + #define USED_MOD_HELM 1 #define USED_MOD_SUIT 2 From b3efc79f2bbc610d2ec794cc685e252c1804f9c7 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sun, 13 Nov 2016 20:27:28 -0500 Subject: [PATCH 061/193] Automatic changelog generation for PR #5872 [ci skip] --- html/changelogs/AutoChangeLog-pr-5872.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5872.yml diff --git a/html/changelogs/AutoChangeLog-pr-5872.yml b/html/changelogs/AutoChangeLog-pr-5872.yml new file mode 100644 index 00000000000..51fea8730cb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5872.yml @@ -0,0 +1,4 @@ +author: "Fox McCloud" +delete-after: True +changes: + - bugfix: "Fixes BSA having peculiar results." From c6b4a2acb70eb51bb266914d7475967208dd4701 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sun, 13 Nov 2016 20:29:09 -0500 Subject: [PATCH 062/193] Automatic changelog compile, [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-5872.yml | 4 ---- 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5872.yml diff --git a/html/changelog.html b/html/changelog.html index afc90835472..7b79cc81f3e 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,12 @@ -->
+

13 November 2016

+

Fox McCloud updated:

+
    +
  • Fixes BSA having peculiar results.
  • +
+

07 November 2016

Crazylemon updated:

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 delta 70247 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犨=d=02Pg#*yU?P!mwWyEana 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 AbN~PV From ccf8b12feadbd4d4314dc43d2267f9b3cc68578e Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 23 Nov 2016 00:06:25 -0500 Subject: [PATCH 078/193] Fixes Super Breaking News --- code/game/machinery/newscaster.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index f7e78ffad2e..1d8d9a1e22e 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -981,7 +981,7 @@ obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob, pa /obj/machinery/newscaster/proc/newsAlert(var/news_call) //This isn't Agouri's work, for it is ugly and vile. if(news_call) - atom_say("Breaking news from [news_call]!") + atom_say("[news_call]!") src.alert = 1 src.update_icon() spawn(300) From 134b91f55f855534ac8cfd9795b863e9ce888a8c Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 23 Nov 2016 00:48:26 -0500 Subject: [PATCH 079/193] Automatic changelog generation for PR #5903 [ci skip] --- html/changelogs/AutoChangeLog-pr-5903.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5903.yml diff --git a/html/changelogs/AutoChangeLog-pr-5903.yml b/html/changelogs/AutoChangeLog-pr-5903.yml new file mode 100644 index 00000000000..802c4be876b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5903.yml @@ -0,0 +1,4 @@ +author: "Fox McCloud" +delete-after: True +changes: + - bugfix: "Fixes double-breaking news newscaster" From 3cbbce57436d29437b36bc6b952b353537e120be Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 23 Nov 2016 01:00:11 -0500 Subject: [PATCH 080/193] Automatic changelog compile, [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-5903.yml | 4 ---- 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5903.yml diff --git a/html/changelog.html b/html/changelog.html index 5582979afc5..115f8a93752 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,12 @@ -->

+

23 November 2016

+

Fox McCloud updated:

+
    +
  • Fixes double-breaking news newscaster
  • +
+

22 November 2016

KasparoVy updated:

e#ZkL6^*LSFm^D@-(!e$w%XOB$!W*wt@2EMSD<+2ugQP88 z&ykgRtnE|bs)PAX7K-ij4bik--xSG$u+TTxH$wx1P?Qr!!1d|E0-Wha-&WFm6ng(B z0MrkzS$p$3KVOFy#vJoL$UyNjoO5jtUsKmStmbCG#wKw8(fN^P?w!?IcPvvf9apJt z12E)Y#d-bju6WaFgs}YWc)0o!lp}J)7e&sWKkKXbBmDNu-WxdgJWi$^GWPQF5^`E@ zZ^SkdKC_mU{m3k-W1T0R?k{GfPr|GuHAE*q=+k03glu3v#BA^EWE51`VB>4qMjelt z;@Qc*zb+;;byG1ey1Kq0O-3yR7V+ko_~L%g*&xMs2f~*^`9(dKHBc zkeRC9k^Ry8@#oK>OL^2^?R3}D*HPv{llqKYt(2_~U8b7hWNt(z`f7kMRhw<>1>g}> zRaQ7Vb`9N`6X8MK;p`6e@&B!)T>AUKl$B zRebeI9g>M&_##tm*X=(Tw+mEknr#I;aekt(vRGX`Wxew)IyG%F^gF0L*Y znl}W&Rmq-#OCmOj#*9$1$YCD>f02a{djG-}XLIIgddc#hZ`j*LXBobiPn_{-znlhF zgJP%E(v>++oypwRxsYWjDwg+qg3Np5khud6t00HNfC_R4=tcf(N!a!u?_s!-fpM4L z)qvprvQHxip%5gpplSsH7(g@;a2?ms}083DQRkslYvq%{0A!>eQ>sX@Qq{!>%Id-Lrn=-Yu`u~knsM@&(6 ztfAwEOSmLo~~DE~qLF8B9Ux3*WiCGLFK9(6^kWpD(ta z!q3yNp|HE?|Mns;spJN5&KTbN72QUV9r2>djL8!HKwQ!P!kClo<5gVoAtxxJe)K zi66J?ae~2z+}uZN;8q=}(VZ&FK`37TO8&G`QqeZrvSf98o50K3+B*Dl>89bED|~Xd zMXYumuGGzINk#4M($*0{4&dh0qcCPI8$$ST6<`s~l(bEgHEs8vE!rayb1PT9EGOcf z(G>t=vFLh#64Q8aqxXvON&f}@?zFYHMWfN*O24aC)#=v`_y%(nJJ0-qPF-p&Z2ULD z68^#vlg*U`)5RZw@mEs>j)Gg*3+~kOo-6kUhQ26+rwYhoKyEEA;Ld&fpj4TV%ri|Q zv{VX*;J+O$3vmH=fSPG~>ej2^MDXbW4o^+jzXqqMvzhzhFmBFH1uaunFM zGvqr@y9(7vI!5!j(i60mlp=?>L!O_oKQjjEJ%NLF+|wW2M#AwbZqCm=v+SWHXC|e0 zZ6B0R!E?)@$gpnY_#Mx+u8Ha`j0I&vHZ|%6^j4}sz%-*Oo1k&l*Ym~HwswUBC#n)R zN zm$)mGMj20^3)aY&VaAJKv}F4Y@=WH|wU9#~w2 zY9^bMV0M|uP4ppuh@>0m#I6kgX_wgtnkLrVci7m26Jvv>r4lMHDn{SoY3blq zO5@9d#Y|OikKW-iGX1_o!okrFIApO(;ncm)ZavfIXZb(}1$sYDxu2E-)i&?s@!hR> zY`KGj5%#a^(!}8lrO7%B*njC`Y37f%6{VZ%;_^Yt%H~Q!A3)+o+yYwa7;IfhG8SA&&umSHD;D9(XpoiCn5Q0V#SSFs&E2D-LD=;BncdzGb zd~3dfEiH+_HieukWDqnD!Q$4RqS|q{7T6+yaOeqOLuiI11FO;&6y3roe&UTP+tNJ@De4X+fuT! zO^cY2e;BAnt8q~Z=%%3NTPp7C8{vh%AH$69=}C@MutVDV-42-Sdc?@6{@R+gy&l$rW4iWO)&x8cTGAZC7D#HF@(IyRo4P(3-+2`&bb4PpL)ZOMeXz`PQCfRt|1%VW- z`q=9>Na$8p=WR%BEYRk8@J>-+QX!h=2|k?|YdojncF(|-t=sb-_~XL=@)0Mv>279v zkI^tc&ZkeGEDFd-nGVm&leD^y({ULYd3}XZ%vt`4X%Ui<-P(1@Zwh+Bkt@?be+~d$ zph~9|`S$kq(2pN)_3=-V{J%XR;Qz}N0#%(}{^>um`lvu*qu_}Rlh1ge+AAj~ZgmZf zylX#R@CYX*CpQHvo6>IRM>kYR-JmZM?7pBG3SQo0@Y@@|9F~=xxO7G;zw4ys>~HvO z?*6nkd%aX4$Y?V8P2Myc00Aiu4-LIblQc!CfbY>6o0JAh!CM{EIeO4EM*9!MBqVHN z>4}Muf5Y**Jn*zrPJD(T?sF`J zH~^iOmF#X@LTc)W*;M@G_Tn$vHyQrkk;kfH=*>_Sv-(((Pn=R7zA|+mF5?}0@)W`} z2p|RDy_FpR)_T9GPh^Ddyp@4PTNJ!z`>OvMCVAsJdV}`ej`7eC4ECp#=J!+iD5^X>T9I*LDB`NGaJ_}7 zztrz*)vIIc{g#cKnJ_@-@M3PaUGnKFWnSqhzpC!GG-+hgSxcD^uf2wum1jwmmu072 zZ@yDwvQ^IprG^8%tI$D^%kf=Q<;D&fc>z14?6(am6L zON|`CeEJ6}(*C_KfJ~H+ASZ=PG~jJQql-5ESQ9r;VTmWo{_AsHq|vQJe%p9L2ch<# zE5_b*qBR>HkRR|0sD05!R&q=-J%mOK`M8}LpWAklUD@SZ5vSfJEeR7%G`n@@nxk3R zJXPAUKJC;tag7^SVp<>&*{>0w{3fT9BS1ciu8iHVMF;X@v?HRUa3qK0q)!!1EUPlN zEilQRcetWwSoAqLx%mBD)5OMt_{}ke`N7oXrd>^7t#OlC7{$qIT)JmYy03brH;GHr;d>Hx#U)*^rZr19HU8fcl{`xUcMl7k$Wu@!6zi9> zX_t?moNMYfxfVU!HiCdVUejVj)^s`qwj6@G{y>jB!gYpr{~AT?DTLsQEFiwei@0tE z-7(Yb&eNl@cS)%0U7oO^cIEE#B;q69wI)hGk8MJb%DC3Tf08h zB>Qo(UcKsZHXkpKV#f2K6QF07r)Yefln}3t`Nks{8XM)sq}#fLh=>b-!;gD%mt)Cm{P%y}qH5E-h=LPDC%! zYiOnytp;ocz1P?@lx>z_n2-tOdU?5}A-_uq#DBhtEW_L^F;#7#rhjVZAcdA5f}@ho zCuZ^ecu==9`PQq>N@rw{WkP=b{K|L5w5Qd5Xxf_)H)s463I(c?nt!g(lw-WH_AE|8 zYC8~DK-Gy*3&Z&Ai4_t~``aesnazijez z-Lg~P?;r>q#u)Ur_(ZX*3VVHqeHOk>7XQmSa4w;tPec3Pj(@-c52-2o|BNj3gZHfM zJGamm|CSd%2}EreqM*%c4UGTuq?>AadHLfR?8%cS;ku3E?K=i1p$=W#ls!AwK~bPp zZNV!F3_=_G2aQiJz=`^3q^cB538M|4*q3{)HxlLxEeOL;9hg}s$(b*29Pg?{f2n$B zAhLm@D8K-Y+&osV(UwW}22m zFUs~omBaj5xy6=v;7^DI29ATc&DOe-tpI?PnIfbt zAZz9~i;3n-A^wb@Lr4jo2xIAUY`!A;JCM6-RN2q15_^&~E1p|XNPi861TdfcCY;Q~ z+RkD+9hh1A@}#ZkWC4@L=lCnwFWu+;cbX$agr&-z44+auk>x)*1qOfK{XDmTq28+u zNc$`wbFd8O`cs5wALV7BvNwIfw*bLo^{Gth>_nsVIVwP6ljmn0MBO!AS#CpVv7;QnJN7w25=Hp#M< zJ2n^;5M?)b1e3A`2jH@V<0qvWo~V%0eh9$D?0^IiJ|^XaS%b}h;~BTGJ!q&k(ZccN znHy@!IqeRF^xIn2cXoyFi!-^jxL;K?;5~+rpnzLxd^pI)E6m&Vt2vpEU`N-sG}G#r z7Y;Pj!~s|Qy05=Pe9%9!5yc(^h z^O^hC*=EYF9Nq)n=BU@QrXNFb9~zuE4q%3u*VDgv`BJT1cQL?mLMF5U5^fbaG;P;@ zu&IRZ^4P;6fw651T&{=YLUd_i`~(#;E5mnzC+iCdy)L6de3-U$MjhG3F*O%R5=HO&pzJF(mg)2mq*gta*!|V zT!!p|(TsDyJw4w^d!}#)@%zW0j*nv6qz=jo(DOa_D{tQ0)+r-hP&r`{KG_=UIt2zc zOj3@J;W07VU*h8A9-frq9!X99xD8=EocVZ<-7b4 zgs`xN)=m;hNta*=a{CCeAXwh9odN^0Mh5fil2G!ZDeq1O;QI(_Sn^@|qN*?3IBEso zR%{3=f0BX;Nxq&{n!a#2bm4{URTfr2V?;|U-}{PAWUO+(Yrh+tn##VsvI1{s)Oa>< zQ7m?D@^wQ8x-H!eZmR)27Un2%PA82OB5>QRI$*nGQic*>MygDW}LZ`9fW?G zeTh|nzvVV;{+V9*xy7X9()9<}IYk$IUeJa@_ddUsUZS3x zXJmJDPpkqub7%hDANaz;d0m<0%eNqLy_047XhviSR0M`A+a(pP?9&-F{S*pt@EUbIHJw?(N&!J)CrU7!W{xHONJyNR#lH_tO#m65AnA)pdE1@klmr^d!100bLxfh z%le9QWR65Us-KF+__DI*2=LwN>IN*LHfpt&#HRva(1im#E#OPc^!L4qYL?66t)S9U zcJB9octb}UfqcPQ;f!zJ9)s0DkQB(K9!HUH4$zwiWqP&J-*Iu>)3B@ZsmLMIkMEOg zD@d1cP&_k%5bN1JZ_a%i?Yz%y`Xj|S};;8D-_HWnUu_%^p7C0kB3Od_sMJYdv8jzgmL zlr9#n(1Tq);7hbO@StgIOSUVTHg?JNRV%G>@K}-S&L1L`0^ZGaUpIrbwPd;ldr%{+ z!pI=8SiK`Fb-0cTyW*8wvF~O*d{kSHM%#_c5qbJ;@{_W4O>yFLE)4qvZ%z8RGuHsz z0hO)-XbrbJkyJ36ewOyf!~1V|Aq;m(lrip-B4QwrDcVqkpFis%8=UNmCLz5TKR zFfR61E_Oi=|M62WlTE#Z{*PP4Apf{p)(CbQuK*z!@%O1~EQs{?jXhM>e!L_*`2yz& z%LPz0uyHmz+OHxC;n!X17*Oi=}u_zp^=)a|_s;ZI&wS^q|qooy}w*W-;YJy%? zJBlMxxg6XCoj- z^cfXb)JK8R|L~$fDOKM3g7PDnfamrSmsL8@R+XAH$#4MFF|RDNJ=&z7!@oSZ8z=>~ z`5HC`Zk%Q$i^JeSyLJyBs;$r^TYY17bwD^i0u%_|rUEvWp@tPEaw(t1^!htf7D$Ab z?Ps69Zw3u;fEk-|Zp;m3*t>9^4}FOT&HkfN<__xHSP3G3#+ zS1B(x_N(QR@=)q4Pf8%(^}<{*Ym$`S~K8 zlJcDEh)imrRw0J2$qz^G})`=0ufYr(6Q$ImE&*+B=o zjcj`e25mej(?eAPZlP}zFcNMQqZjPl#SnyS?vR&=?Su*fuO8CR z7P|cU6+DncSUN@uhIfwQ^TkoBxV39gyjpnq0=VVrWVRVZnUTJNlXcQdh$3a7QO zT!#MZXJ4B5V&D4^wt80pIFi;5WEZSh|6N;Kk&g= z1h>blH3D&xvGDW@Dm4;bc&lySgV-9gdtc(&f0lFT=UM@tn`ocAC@Q8)M7DrgsKQGE zb#Rewe*S(oef3T0?Df#oG8Jx`pfpa-XwQZGMxQta}q8hc$*woIthuzk< z`l*v=JbU1X?X3i20Y3DeQpsl`tuA253;C2oGN{U#yjKm9P$Hp{_Cy@9pkq$|&e$te zL<1)QD3Rz@3#f8V@KL-Uww$7gDx4c(1T9>vOWj*I_JaxUkbXthD&UpE*bt-GO6@D( zl5teKGIrq4@4MHg`%~O{d~LcX^}R=2I=(lywtr&-P$kPImR9(i@jEx5W9U|tK*arq zhx1qBOT?~odWNt@Bn9`cDnyWXcYi-0AbJ~0kyOCWUlffxgJg%RRzJl>Rcc{&=Fjp|3nqZk~IehygaAqky_=40v|*v>M3 zrapJDP##~0db}53(R@Bh@6I>SYz+0^Hb_w?s5lSq7Wbz?Kv5FFD@DavpX-L$EUbJF z5ZY-sp5eUGeZnb;*FePp-F$d@Dr$0Z=HuXVMf>_N0w1$no|RKF(k|iVy%q9jCuqun z+J($_87a0C5kEQz<(hXPKK*os_ulv2tnMPRy8k5Z#*J=a}8{M0D@q2`hCx8rh+DIYJ)rc5 z^nshIe=CTk!J9Uqn&Lvxki$jao6`x{hY{i4*Kx@olhYtXx{9c}J;{mn3q(P{JTV^% zWATdx{nD8R89jXA!G^e&z6C7TFV4m5eabSS_reUs5y-GZZsx>bLKvBt4t`?O-_1!G z4jg84sD@{CE;PCns4+Of3_ZLg5Q2y9u@{G3@fpBBVs+VghUg`e6eRbl=syt7|N52m zF(;==Zfr)*%x0sML-DwOSCzB-C_eT01SgN#iS=F9f z0I-Ff^Ph($NSiUY(v#&BL!f#EJE8)xo8w>QGzZ0L`Ijil$D_i%wm0(MQ1|JL3@xy2OgXG~t5 zN*a#yTKgmKH9L3l$VjODoXGWI9~UHGXXpLw@nKi^1oix1kje&LAejQJ{4_~S1HK=a z4=sfE(`nc(_kAs4@24Z#STL}Nd6|Eq{gL~`Jy5GdUMdYB)Bn&U(J+y z>UyZZpY&|r$Kg}gUhA1r-vX{wMaw{WNX5ClC#uyR{R!^6AB+ZsNjQ@HPFYr9yXS3* zX>ma80en>F#@t;c6>v#Pi!-fcc6lN2m z4SD_T4!%v)UaLD6g!4L2^ms;BS@bUtFtY@b&4rJkJmOTx7L)DW)kw{$sj1M&$XgIT z+sXdTeT*@*WG&Gy+zq;O{}%!4fiJ-MJ8ADfl+Q-7t{N594eL%mPM^6tu!~!5Ar1;H zjlczwwp9&xcLC1UV|BCi0+|* z1~9U+>?$%a2*Q=@xlOIRS0`}Gsm=l;uM|T9#JN_v!YUs~r!Y!({7U!)Vj@jGl9H(>Fhc6n7HlhFIv#Gwji@Q;$JRfOAESTYt~+>yNexU%W8?8-N`69~c?BO^9HwtngbkCqvIh;bCJ2 zo;VC2kBekVx< z4cGc}J;wc{>vso;5c25#;^jJTNjCXejaog+wrRPzP`!dIj_8*+42O3eX|X(jFsr7s zgUKhqSvdZZFrqs@;Ed=pvy&(paQQYLL8T`M->svNk(HfH*a!M?vo)_&SW@`z0|QqF zzs6YTRXx{lzg?4q7~_)5ulul{{Rr6`D*wKE(DKR3U-mB|#aP8xJ0(VtU^*G+S9wuj zik>2fWb(N^N7rx@Bwz^vZ>4azm&3HW&Lq;$On=fPfW$F>OF?OhTkxkfpXmMBxZKF?GK#M%U0~=)-isa>aN>Bq^a?^bpm))hEigcv zl7i(JQ~7%bYDJ|0XS?4*Zkno^{$u>H{=*{yc@Qv9;AbOHC=4#v*zO*V43iuiuK9Mrj3lh$`MW9w`s@p<8?IyAxBP# z2}qFgz)Qt#9Znh{^0;|19I317t=hKHhnBqrkUU}DE7{E(cmDX;PP-%D1YUd0_4lyOf5ya440;Jg0{^IJtKe*32#*`Fw{^&pFs zo9n#qDt|6H-ZiH8?wSaiG%eaj^%>+$Zyrs_SrjY^<~V;VVy=DcGv>7#O0*1xBE#)w z>b9J(6B0NyoSj`jOf%=|${9>2`VyBC0amVj;3Z00&sr0VxZNeMx9#)mgDF#oOrL`Q z@R)^dl8KO#k}_Q`!01fncSC6kw_DExi1UK4`}P+OiUc=a?>W(dv1{!vs?y#8fTNtR z5I2I`%&tm6yySOqAxa2kM((|n;=s~^`4HkRafL!&AQF&ULT#%1zlP` zdrJQsB!?r~){WP4@Xg-Usgrd&;>-`YYT$8MS28>TVGlGtQ=xZSV{5s+=|;!Kc$13V`tD6vYJGihp<0hmlW$vWn3(%>LH^V(DI;Uo*gbR) zzYg4?O)=2peX5;gLwpy^^LRRSBsk*+GYWy1x8h5pu6gIZ;T#8(`VP967v<~cM?;c6 z&I#P|=JFjy;Y>>9fP6g~nm1dhoK_Sf&Vk7Ga>Hh^iaf(+_b~9T#`m{= zMXEVa9Hw>gCok42!HHsk)2+HssL*2G^7?28m3*+*U2C?n3qTfc&K4^6E!T$3Ghq}v zuT!M9TJxf{{({1Uw;3;bl^)H*I*v}5V#MBUZCrsr*`9*kaTWdT*c#Zc$a8oQUeC<& zgEMZbf9!YH7OWRr2F-_3JUAFWOzFS^NbWqhbGK|uxGnb9SzW@cE#XsOg7Lc1tsi0s z^DS;osYzUl;@vbBd^;yq)?>`qr!x-A!&x#`uyWcaH@JoSEB@&kYZ5S-d-Ve8JLfiS zBwTQI5VY1R^<0*;5Ph0BjPhOA_QoWAQ&lET_j>NSH))$S6@}8;6`jk;H|qdaz!X?A zNEKh3dCyq5?;Ms?o!{OGRS>O>jO=PmHc;Y|R6=#cT#slL|@MBN~O z(a!I`#R!RF4aRrv%>G;|}x_7N03L!i~u!*nr`0P_5y_qyFlvW~bUc#hz6LOzF#ZGH7WQL5nnlO-T4 zi$qUim_R+ltL>?c*f0TwkX^DrcV`SXPhcQwj3ty-85{EbbPB&=WoLs; ztMt1W2_xv%;!z9WNp<*&ip^k%r;57{X~WSDEf^;02Jufb;i~q1A9<`G3||1Vzri=0 z;h=U^oQ1b;=rnTe8v%JvNOeed^u#N4APS7yW~~cdr;j8$U6A(wk(haKR1qylOMM4R zeh?}Nwt$`;spg*n#x~xn0*5CE2Q4=+MX^L~**bfZ~gDMau-4UuPt5eHi*hPJnp ziV1KGmR?_Bw6c5F)#otmirMtWP*QT@dBCZX#)G78~n*`e976I&tzs zZcRjVH?a3}!0DN0MvA=Bq}X1txr^-ll1yk)r4$Av1S;yKorZ=^iZtLsROzRzgkG40t2XLw;3h3KXelrf>7L2MRdGBG6X6z zeUuzYGjcnY-i_P!AJBNtGF{=`F>t#IF&nc#5f$sV;g3ge9dto2-1IB)FU0C`1pUi_ zscX$^U-8PXF9(M0^?C6YAcwXfWydb<^M8t`u9d?~(E9BudO zW>{i8+(@EiCA|$Y1qWhP*pL$MAr@!4wTlg6RA0&1v^?uxy*`ovIR?s1s-?vXGzRT} z@fkiS>g#5js>I17&=&l3sHbO@@nePkPPrYYn5Dk{)3% zCoZXO2~;c-(3F`qO2LxBDt)?t1HL%X$s~LY4CymT%-p9^-)mlu8BXd7NdE*V!aC;Nm7$ z)n5PVhWcsLftS3?*s|^JQRI5Ma4Z8D>~zTf$l&W`TBBkgmUD2K+G7!%b8ummHcPzJ z2T-Sg;H`siHJn~J8y9kRgxGZUxTaLFq)rdf8lR2f96D=3j&tjAgS$*sMWxP6MwQJw zMs@NML}4sLjNf`6>2l4lj8$LIE8&&&%e-uC4x2N7A$*!2oZYpr4*8LnBf1PY2<-E< zmhBwe?)#Rl?vZ{1xAoci@XkZLxHtx&^Nz&nLY~2MR?7Aa0Tt2*aN-b9eROly+09t= zE!ch_Q@;p&z)&_KdrzkM`)ks0OkQUkoh()<@P<$A*Dzyl?bm~WLg0;hP2z|*4qEiV z)=sWoZT|$$6%sabAHe+zO3x+w>Z&aDd8&iPs#_t2yOt3iv?TX^> z&c3|c6%r_jXF8DXL$*rw<%7g{iJe5?#tHV11{gF0#K%!!UccNVv%4}Hd@Sn0n`W4fHZnPz$Zp@*Y=L%pp&MO0h)W;cwPEJnQho^V1`uu+* z*)lp?#)Z{81j|4$mvY9^XBq299)nkB2Mo|z6IScW9_)$St^SMT#)3#LY-i~z@bt$B z!$oi>EZpNJ2EPY;I)j$P< z_S4`0fG;4<9~42S+v{c+1Ljvo;pg%L9WJ<|UtMzIhNr1Z^M_3?U^q|7e@*!|1jkM1Ot48J4W$=;gMcY87+5(Yz4XyL;koTh z9mi1eS)7sEsLu%Iz7uGOjHqaTv_v>3)f$Zviy9J*b_muW8~1J(Vrz9YLFX|wZ1Zc= z%I^;O3DW71!HoiV_xpiMsulfQq|I+(@ZUbXKqOKBdjIUYKk1i`0T1m$_iaix{)}2i zjU!|8PhPBSqGz^&XOw%;wx+JJow{Pmm<)YZTF<_LrVLJpH-4azgg*ERy}_jSW)Fls zV!o9hb>jf~q1oW_>Cr!E^*PgWN6eR9F-m>99gyh7LYM@I(i%!PV-z-ow2}>Bmigw_ zCOaey+lTh2MT5_C(b+Q-=i8GcS{Z<`?_keVnUIo?$~omi>7~MM^aEaz0r!pd+TBpQ zb^87O=lv}ti6hnm+3xV_+e#0?bOjV;f@i(PSlGJ95gIaa-nqs)B-wbO8Y&77&%D(xfXO9U@&Iu<=*`X#&!l3eq7` zLrqjl=twUCA{{~vp(GHJyQ1fLzIVKTe0PjHZpPTzeebpAT5GOZesgXll-FzSL}xf` zyBm+VQ_Op^MC_x@$|t#N&sx5jDbcrbr03;Ju@)$n;`lo{4*4$c=b4w-H!WEdi`o0@ zQy^dN)>fqD*A?7KJ%%59s#(14^3G0^7b^BYD3~SGj0-0=s&Xk)fuh`o-h&ATyU$8X=p1QDfuJScTd4E_xg;X`brI1i~7dEtROU1 zR%tN@%1X2I9gi^(LDbY7f=O7dYF3%B{K`}Id2nlC-2H{LX}D=hY#`5PkE1XY>|x%N z^8wpnk8_`^thzp{-rAK=jBCkHP73weS}t&;;0e!P4F&%-e=|#m+WG5yqTHN;JkP`d z7&m=W&J;jOne=9yxy~t<9G0^|I-S)sPo01+sl{I7+7;~ zA0mcU0;Gech$^NpHeM-nxL!_r0QlR00~SaUMH@65LM1=vu{w4bEev@6lXi`|UJY4B zO>b!TTd(V#A+p$Q*rsxS527uxr58VoejA)Rs(rT9j(bYh50<4xf62`Q$^DT0b);sq z<6uSRI5%Z2$?sb1D0_tXW9RwV#!%d(3T6KnPSn#S_6x^2;UQTq5+|Mv%bs@-}U$+HrW_25k4T>1J3 zr8+JL-o8F}b;cKKR&?29&vTr#e7t@+w~fll%oxpj-p(moUTuSAns916gdYFn#3qn5 zj{hrI0b{;-ul!;2QO+T+Ww|B!ac!hD5J5ARlo1$ z4$LDGoaHIdvA4@R*n_744>O*oa$LdCH_}s~m(KMpcKevPu=SCuyDO8%kzPH9u}%Rs zAl$0XqE3L8*UH=rMJIezJ1Q zYQ!~Cf4n&wlZ6p`lPX!0R{=$kr$I;nb`5( zw?oWMl22p8Kq&RQ-kT{qUxZR1^BRZT)R$q}p^8UG(tuMR(v8}=QwnobWWYw`erf)8 z!Nvs=_gsRi3;%jUp8eGYh2oaHMqcF=R`N0TKdY&S-v8A9?tZI;4JF;8V^vMnvUZv7 z8;jb$>N6>0YVqdQO)6&B*5`|dgZ8F`^T@R#U?5SsbLaj5?O=z@oS>i}^MEPGp7qc@ z@p2sccGnJ0f)Hu_b;s@nKV+X5!B1F7Gcg15isw=-#C8I#vz1l&@xXoj$7o(D6>Psm zIDH#^C3=N+F9)Vqn&Ac}E3C7hv%>n~%>6IrIw;pSGz0^$YtOp}I<&+!v=0zE5uUUg zgY)uFJ$Ku~`44qqJ==b-BzvtZ&J=-&1~YwLxyb%lO)jCtWrh9EZb;S-g#Co%OZPax z7?(ZJA`149|+h(>v_FKUOE(39&np!>q1`fX_RmfTl`7e%G`RfsE;CEF)F?L z*n{9J=%%wGFH!Y9deCJ_>pHnjx`rQiZ?;A>0QQ*JR(Iq7>Ul+l$Dm;EHz+E_6=&;f z8OV6HfBxxyq~m4?eUPYW**aH7WraPPZmc!U+2~4Sn;;v=2(&XZJcRNpvQOedzrS5~ ze>|Q)`9ve}>S6Bg9!dW;PUa~Pf7DM4yMf}gZhxcKAv@5WaWC3^v``HUx!{W1F+JzNMa$3eT`3UT{?IKqZNI2mi;-JsIr8i#O;bgYKqA%_Zd)LltUrqG2 z`OCQACW%nP;_gy&BnM#Fmh3f;&e4Ik6ZB8iqeVskBjaI20O%sdP0U*@m1{jh!LoCe zMNtFv+#qwdRCX%VTo;F!{it`>&uq_)L~c3fM?T#?ctJ+yH0&#NXT@Xa zmfC-x?FZfZ9ghhKv^tFDA3ox8#OC!;mY5UC?lEv$#7SojN^(vJLpvTGUC2eX z;$amii8}1fQVeLFd`SeCAjKgTbmEXhhHcd@E3Cfl@dGEn^#^BLx{A&GO6U6zgoz@R$3eKKPXC!e)V_9qoJ$m$MZsHiD6~ zxJIH3a=1udLNaZ}QALjGwRNx4vCTmkE`$up0ukzn?NOBl?hf`v7LGFgL-u zkCNFB9X$b3R$Q*y>Fycp-*jGFA}eRUXR5-xb*0xV$X zfQf~xHGOAm0J|494B|mYK53t|_Ep#nWh6;V+z)s%nPkSmz{+8Eacb$%CL(^-YG{bk z_8}b?NLh+D%7r|pVuIlL;oLMZuZ`i%@vIAp=GcD47JD%=IQ{dBtWrjAs~Ap z{lSduB`j_2sF^wWK-FdqXOW=giwm$bx15w`kNfR);sObG{{Fyjod%Fn zgUL=_et}WijufJWC0Xc3NTG9uVm31 z0m|yXHsoAE&_D+3D+K+6SnHi&PkSNJUQ-jc!aXb8yLNkK2Aaa$|Y62B1ni8cx4oO=$_%8(&@%li`yHx;0o4}7mpmG(c3=g4=~`20aBiHu?V;@g z<5!?B-}Tt{G((@9`u+V*~xyK?l2Oy8ojrV{3VM z(g1i)Pz{0o1x7m?5W$3^Utn>vuMzT*#nHaTrV4qsZMv7}gWw-=?VL$hv3%V|__uR%pdQJW@?U9iK zPR_iY2o)Qptxo93A5aiT1F*b+l6yxi|9D2$J3HGc8n0pRrtGr5c-ieZ%i)uVS~5Ey za`h7zPUhN-r^`(h9l%iZ#|g>`%O_9Xy{&xpyozpN848zg)%G=TKkSMTsr;Fn?tIEZ zTY_{01~_xSx=!DJ2Cx@pUg50&gov>jNf0P}fImkPZ z#YOnX6KnDsgi(I_nth1dRdBsc?MNMzrg0iIR%t?WTYUU)jb);ooPoar?x~!eio0w!X-D0gDt-=vO_WQFOE08i?XMOwG1^4 z$ICMEczzV!FC4%=l;<|&?ipk78VaZvul)A`U#|onYK>ahKtQ@3clz(3s9QD+Z>0(Q zr_bA#e(VtcT558ARqGeESv0Y5Ip{`b<5t;d1b~C+Mh?>sj)XBLCM-&Hy4%Kk z8eUvuJa~h8Hj%PYM-4pI2_IyJZ>`Q-@L+^k-QcW}7chLil5M-!{{l3U{x3=PeseJi z6@jwMUp_M6wBSRYfNw75_&)k>wApW5MSmbFSdbokKwny}1qfrTq`rkUPrm z1opoEvp)kl1uBLe&pDjFCR?nWSwkP-f+o+4a>k$|Hzc3Y-KLSd+`qS{cg?$*Rd=%T zYl~;t475C zUBZd<;iJRP&#EG_JI%$*+|Lh(fB2y5z3)-p;y!adKACC62F1FU>0Jr};dp%S+Hi7^ zd-NY5E{2-U4UTMu4qPU+=R;w}uw92Ae?8PUdiTgcx))-Vf79f@D=`tNc4b#{G0hTp zM2Y;NNa*Ebv}XaQJC3(IyfvG)5kC3++G`NUh~&G*=ntx+vL2g-UrUA@>c?pZ-;()x zIsHlWKbQ%fwwfVLxUdxGwIVTR|f%|Jv@S(q}*PVW<<$lW*Kh@V}jiF~I z$MhkaE`invQ6^5BNp<+#|HatP8*`&>0wSlBA>o94H@ zIkeT$&qXFdr(QZZ{6d0M4vjQ5p*B!Kh%KZzg*-jL@Ug2vym+^ zn`q6K2zp3R@4DH3$czHOFVj0K*sX1Azwv>`Ag5kP5RbfTMt|B+OXr=Ot&h$w6@rvvDyzklvMUC9jR0Xf&zUwiU8Kn5*8pORAOPkB7GyL&vuJO?y(|Ad3kExJtL9+zx$lpl-llaJ?3;C$t?mWL z)X0b!&jqp;F@Nvdf*UMk=-)OoW9Lb;+=NY1lC=-5yr1AcR+C{V25v|(a{<~Q#&+yM z6ueW|ES~u1MwlDhQJ5R~ee}~OE4_UESwvGlcV#CIDvt%Jr?i%( zc!fag9G4V*6A*6A7clcQ4yVPumJYKS+GK}=t|lB^M$ggmwMd=pkhx3JoF$;{lwYcv znQW9tTcB!&%F9fO$oTrsF-N>Y)|)hmzJD9Vn%9>#fOV2#qUeME0C~l_+l>m5Pz6!5 z59p(Yu1j;HBz`34H_8F>ifmd4#J;X)YJ}t9t15MlrhL^~;~9}ZEt;LU(1?+d9oDRu zOJUev%`F_H79<-N8FUm3iU>qe20WX|%rY?FKiN^Zb;}-fnBwr$GYWqw@GaExC`?JE z1*@pOOrfwFQoq|2&p~v9BY}SQ&uzyp@@(c@*-m4`#PA~_Aul8{gjvkH5wJ$Nct(A~ ztdhzRZJI8han}vz`Uu4N&o*PV$KEZ9Pk>QD<}ydYnq)D}v}(;+D}zOvKB)ij)}X?R zu6UICTEcdY{f>X`*Ma{K<2*ae%qKJKO2tRib?;TX%AKlo*Za{zQvQoihrF_XK)Fli zDib@;2-UTp78P~RP2%`sbrP>eR-+UzYx5zE*iC*KnE5mkN^;$T0V^4xU-b9*VJX7Z z)PGX06|95SPb@5mD?OSykDKAjpk%J46}mW)%cZ}3`4Y|%M%9>j;iCAoVBa6QwAsI> zsn*$Kw(x2?N8-#J&w80dUb;fNx#%1hZ|iQ9PwVIaZ_Mu#S1VPyl%-|9f@X(kgLTCo z_3hm*n^5zpHqYskk;0zqdj83jB$MN$Mbm5fBPZnS#T{Y9m*) zJ$)5cNt#nw+xzAl-D#5s7tSYks$ZaE{xbGsT}dloORMX))O>L=GLAlS=Upa+!3Rrd z1l?u(XX&Oxc#iR58ARXx%bSal@05Hqyz}&5ati(_0}(aJ4)E)#*D0lU)u70GyWGKd zkx574W7m4b!KkVmL?q*o_C0_|fDKU5*=wpoqhML$t;+hGvUQiYX9)uA$3n)-|}9TuNtF+~FPKIz!L+Ck@;uRryhqrWqs- z&-K8c$Nm{zYm_7jZL#c@q9Bwp>=`fNIh|~0g#WQ3U+6Ua2#nOK;VtlQ)GzClKyv!4 z>^M{|dVP))^I>3nD*f7V? z)2wLSbtF~JNENNtx0Djt2X!PAO@*fVytOpL7Sznj@|K%H4zXrhO;CyBSV_nHX*ISG z7^2)sG|PY|@)kqvPJ|%1< zqs=>6CMsM8=BWys3_P>*R1jVt_>ZC5={HYzH?k*xgaQfV3&Viw#Pz0 zMy}1H{&|8~5L7wcZc1#ERybHb?qq?y*%=(i2NF}_GI8&NacS|{PRZp{=Q$eOE4jGZRkuS{cCfRj2)gtT*-bq# z-{v|fuEegbbR2QoZ3Qz=;ZlvFB;jK{>n-|%y~)AKN(r$v5Mob%cevMp(G6-rX|am;NxlF}Rc8d+})} z_c|btF_VglYP(7KAVKxSW2{>*wmAh#r?>aKO^h3nB*+s9Yy{&0qRDh$yi?n~LZEox z^zcVJuMsC2g1u7+1xd+Z$zt&Ud|w%BjIQ4@Gp%{-Eo05?7L_+qnbb?chfFuh9X~%K zL*KNhtoZ8tBw~Ykyy4C0Gul!^@X9EqaS!uc=Q5*w`n-8_JL3{Ww(K|Aul&rvjZ}RT zCHS_rQI+#`tEt!MX-df$NDG#|T(uzPL~?ApXUc|p@-DNU5Tt*8?CZ$-(y~21VvtxW zJR_fk8BMXxHUr|u-Ab5s&tQ>kw1uPSbMWj4pgE9HylBJGZ{Nr_P^W@73F-%)LImtyjGVqdZ4 ztlZjSVM(uryf*W4ZH_&Tt@jFrM*L=Zw`lf1AYS3C4#PR_V=H>|HH18N(L}GRS%Xu{ z6-(hRUh#b9nl!$WF!|J#X)%X8d9y9;+%f_qnf~nCyhiPD2 zt?gxAV6Z!NaIJSG&ewB?d9ymbLS<-}=JiE(E{^6BJgdadE4lY!U{GXsWytIEcVNJt z`4D6|ySp*mEBuoMfu<51bohZT^nT5aIbcuW%3)Pb2_Qm@CTL17DlP3jJTdeQOs;+X z*{(@nmuW4|WDGS4f$V{(;?<(cg~j+=CX5XE1EQdDs@rFW6FY7e_!hg%WIOl|<%)(^ zAA0XZCOoS;-Wn%R&R@$$PV@BK=5-m_bHE-73TP8(4vtX@m= z2<&L~Frb$tBVA7ol`VWkNCLu_SEb@Ng83NR;@YJbFWUBfg`VEF8~pky*}eN-fe&o~ zd);MI-bU%E4-&)+|K=&grmkdv>nMU{xukIABjR9B2mp*X1L(Lt&G0=%iP`x@Jf^aL zQ+i^HE{0~P@p}`uTBi>>88;KWmJcr$6^8S~U{^*2;kNkusoT4*mAmlmCg!z(=+ME` zQHE3NJ+W9oW`&ZkaY2K4npY)@&&f#XqrSmuAuu!Cp>6?BJIPR(WKFxsMMEA{Skcf0=44v36Sl!u=w5=9t^ao@X&o{I^mjMkqLVl z<41YxXRoHP9*&S8=r;{|1dc7v%GSIZo9ma?GIo6wmn=DxSjcc`U) zOTVU4>MMSm!sWPfeDr#YnAk>??rGq`@ksv&Env z%ztcxp&=4q(?r9ZQzlD6yvzJmDJ7uFJ|7&TXlGiA`PXL~{q?|q)L&?%aZ?mgsM~CQ zu&>7;d6A-|k9Um<*;r7n>N%-aMPE&h(ibjwydbdFzKqyJmd}%;UIo(dMwj^ilr;BY z&oCfQ*rAsn zuhb9rPW8*^C%HxyT+-I^eWWtgoD+?>p7V5ptfI1MpzG*OY|hb6D=_&5&9A619; zoqh3Nwfj&|Ahh)jSAb7;PYr4sz+>qP`?lb{?d$Qxi7n=wCiZUD`H_Ht+HpR%laX&V zxj^S?N`7j(7yn`P&uC{=raVCw>g^=SISxKhQSslw6ApM5{w_>1@fg>CJnK^}jg~1p za2PD%>A!j&uwI-vLQstV?=JfvWdr;l68s_Pot737Ha)whKV+YUZyO&!|}VoZjajt9@O^Cqr2hC}K zOy)_?e8AY@F?Aye9*?+_NXA&Qj7NLl`-C8OtX?m)JL$x=l7W!B8`R{kvQH{+{pRK;v2iXMeV=SC z&Gk&GG*wh)l6%j6h+s4jblb&;zc)<+g)5W1qD=oAD$xYzpmQVyCoxSycr=2Mz_d0@ zO^P3b7^?ORd_I|;W=E5l;s5Tn@!q`rimm@=@{eSBUyX?Uu#ejNA}zy?Yzc-&&BhH| zF)a{;umsI3IvzoH((fz(JtXy9ZKGnhjO9E0o?ATa=00#BuqhBHUK$??)OcrP<;LfGd+LZHT2Py-q0#!fwnNhzZVVkuY!?+|EvmL^%^ z0+>Y|9O1K9eJDM2wfK!A*APGkDD(C`THvHjbkwEb-+i`bOTyQYhkZ}tba^e@d@oWT zSao>wvbm_9cL(0)JLT`?XFX0p)CWlU1Fm8JDb(6a9nYq$bR!}5D~|fKc3G;suDbWH z54=*s!{_LlVH=%H@rh|B@+likx<+4SRGHe+=^^!uw_^;C>iS)jK}f9;KV#t?|0Yck zI5Ag=W3r5zDfOPoLrDuEA;zXkQ*nl)!6?49*4P0K4m7mppaFZIe{;?7U12l-)oaW7 z-p1Zt@!DBHX2`j8r(C1&+)1?B#){WvJ7My{*B|#>|5$rI%}@jcq}C`MSYz5mnn|;r zw&LW2rP@4Rx6Sd(zDO*KpOfzd;v17znjT>rC=pO-we*KE*E)QHj`5Z#xomv@8F=df zBd{DYNQ(A_C&53~rfv_MB)HQ@Gu?_$tF~uo=l=jko%LY7yP9Nj)t-0+kB-OPdQESd z_mlSHE}eJF3|;1By`N~d{A0ulg}*dmc5GLgnZZhondqiac(qF1u!Y-aUbd}vuzw$w zw`E@dnf}|8iG3CbS_q$jh`AkfskU%TWJNUFD8G0lnXJ&{d(`MIxVojqz({D>rq*b& zPlur}5vasCgwZkHeb%MZnV&3!oYT|Pj8F|UNhA;1lRMQh$YpvGuDe-mzTymy;90EBJ;emt%~$m`Dk}IN`m)U8OP1$O_L^pYt)(yjc-I8d zuZTKYF_oavf&*i|4i6{lb}{XE)(=256Or}QR>YodkkkvTr{wZM;B@4Al@DqJda9VW zAnuwkyJbEIiH+%k+sbg}sPLCaKtwDzflB7_UMWy5UaO5|E^E}cf}gx;3}jtoeGT&= z*Pv8E0Ux5d0pJy0lPIM47^~ZGJq~o&@}Jk~)dr6$+}vh!)9D@!tZwwDfr@I$4@Z_i z9Cao>pv=r#;>N}bmkD2u#oDPFEc}pt)o&y8Nj zsV@&kqcVPaV_Re~IW+86zkr>qC$>Hik34?Vl-w#8o}+Lc=Q8lS={ual6`{ zAr+ZK3HLTn>Ja52NnDx3djTaKK`3vuST>}<6%ilWxcC`k#+KGCrk`!XJsN&9)8zte zN2r_t+WzPYHn;MapHnq$vF71D`05Pe1_tye2<}4j^LIQ}tgE8%ZWQ;u-;!}W#ds7A1+&tMFvtm)zAKA!Tc%*`xbLS2=)+h?I@wyv#pviH4ZUTY644eElyt($t$nmkT6R_}mCVN&lBScPxIT+Ym;)R?o zm8rfm?Om*Zls)-L3^75Exr=L1e?~&zg!7q-I^uQ+kK%#yW7o?MuHfN?AJ9VWq43J% z_i3;xIJJU%`=@7QIB-Fg)zXc{#?Ez<2H8cb=m)I03AS{_eu=_xfoHd4<(IkH@Yy{( zOBs$$Qo>YBY<$++9jKACFA+*&&;OvIcQzLIBRA$5iXOdFIA@X8*>WMc zr|}T;fbOI|1jlSIn`pRha?>5PSOk)-Kbb7 z%}Dt$THdz3tJdmlJmYTUx~TeLdB-4=6gC6p1#M6BJj5oSVrIJN3R7ISqi()L(`}A;m2PLC8L@tgbx0ivguM8CegUz$_lN~_+uoCV^F}8 zY_bx}@%mAXfgwodjCUh{uHOq)2i~Z$_x+9AAsIaTxCoSiXi6fP(Qj_kh~~W)Tp)ts z58vT_ulvfL%yNTvc8Xy$sm6Kzy0u9->7%f?Ci=%E!a4p94y?sX^Sz?c5 z9V!Q;DGZ2N;h0x*GgHZ6#28$&#A(g3?H16+Ck3O;eiIBTu^!n9Hb9F%B3p#Uq0?D^ozc|qX^=~Rw%XOyTKFf#mGi{lTQuFnw?|r6pE=YVAa`c_l=QJF zt++ihKu$u`mB+h?P8y*!PShA3a%C>B?Gw}2Ym5k z`X%!Qo6cMTktuQ+>3Ui%XO5zS&}xP$cPX*Kvp+lfcI9J zv5OWI_HeN%idRXe$`roR8laU!DQ+pQ1oy#Rbe*ucH4hL~A59(y658K!kg!N%w?TVa zmolkr+48z6nCyYPZ?E2bJo1ZP$fKCh$;AG4(&F@{%%u)PX9+g*UCTL2`>v$(e14Mppk0AK4`gHSpBYdxH-JO z9y$jM0Q+J>@#&+I>h+X9l7tM|~JlfiOA%7o`C4oK{LqB#cW zQ|IKDfk1knBsY!+3RIF4X(lgTz7dSG6h@~UPvpV=MG1EEz$qI1t94-4_WyV$Sw~m* zZ1kN1Ii=82p)ezHRn`5&6GQK#k%Rp-j+6JCApl4~u4QpoQ@g;voj3l$Y@Vbz{U^v9 z9@KPHylr@=FP;Ok&83P9e17NiuI<>1G`GxC{8>W!Q}u#gr$;V0^m6so-E{~v0(&ot z(CXH|O~s}`Ra^t*i~Hu)ER}VZhv?3sj=;H}kX`q4pu82RS$0X<<-O(^n?+ESW`*bl zMXNany3?KyPJo$0YX?~}z!a*oJwPK%^qPYn=0jl2Kw>1#8TcVwT3iLg1_9Kr%9_Q1 z^J&4^(ij7KZW~kb(fd57JmOC+on`hVeN1<8e}S!I4&a}b9-W04#t%=X3MIjGsR8w3 z3aDAH=_JNWNXPTVrrftyz)bjGPj;#U{{?!b&RFwpXMBgtaMUSr6W=9|f;-nM-9OH| zShcRq)D)_+^@K=r6q-6nAsgMpdt#Gc{3!A2TuoqJAAOZ8=tWP(aVgYn+_L7|QGCaR zw>b(QQfk{GzmPfu!-x2)wnOUO=2KsasOQb_yr)1w84h<+2R&;*VRGSDN3&CDVv~y# zkjx0{q^x~gjA2vr;*NPK2WV@-Uyjfy1UkF9LQWQpa*$d#x{?7mj7|XJ8NHLk`OJ|WMwM>mir!?0IAM`1#!r9)| zB2Ls>6xDO!J1VulI4Ea0AP?R&oy>FaH*08)%TX9K1Be=20GRV;3GPU70Q*S@U)fJg ztLC^b_Fx`LWW9-keqVkw*fRHc`GC0!LGqUxsDvCZ;b<@1D|6EK<@Uafo*?148rk{-}LVQ{gxIFJkWG11=Ozt*FG=c`+z68|wP z1)Th!5R(5Nwwd;)6Sw}qJ!oTaH3pGAE<$*ai5veS(ZK`u8pLKiUv`G!g z!h1QZ^H~hX+F@fqx{C3o$8?==pqfed$3bwhM{*2($zvone5~l*q3iul056bom`dii>)%_S5zo@ zZA3dwhXYabnECFYK{EQuQm=8}a1Po?QlEFNIWVkJLz#^I<^J^K**6>pY7~z*s)8uQ z2~d^*-Xn1uQN}7$nKIGPmsRx(lR^d0H6kwYGuKwM>D;=+X4lp?Uetb?7fOngPC@mx z)^2-8NqZ?~G6_*<{-U=8zj4dn(tc1lEuQQClNT}3Pt%YBZk_U3!%LMc-#^|>S->n5 zO38fqwt883r?C3|5i=8>xou%}XU~xOq(M21o8=Q+UR_fpB-q#BN^&8n8{m3*I(%$m zE$jAzk6oj4Q_)%;7=|(%rHJ?*q1;hzmy-PaR+|d~w?Oi~Pcmbw=k24uzl9E{)lHvJBO!XgHhkgsR;)+p5}8;g&T!IdKHm^!A_6K3h1&Ah+Wa z@xbK$A}k3i{c%Rl?u|}`RTOglOH}mHAEe=>sl95-+mG&zN8JmS_wm5{J4yb%z7)@- zb4B|Vbl0xdd5iXhR{thBVbF~aMQ9?fhgpw?b*m^V7(VA+;oB9 z*&EvWJv1WOYc zhl`s#ld+#a-@1JHG8=)grCM`uls+RK8YXJHR;%zCR88;uybK|g<1s9NXRM;sOeRh4 z@4s{ExZ}3@1o4C%ga>Hp@4sZ56jN<|&W}Bx9mn+@W7cG9DgMz`HYT6A!)z{SxKlH% z^EJ{niYC3qFppg;IXf-wp#jIz`A(j^^und6%Ozn-Pius+Liazhkaihw?dA8Ye_^+T z5XViZluVbV>bP;Pze%&&-ELqgjlYhUvE0-tq&{b0cXn>-KYVyDN!H1Aq=eQ9+926w zwqp`w&R>b&sA%6#EDUd&@`Oeh=#>!4#COne1*A>#IAEnn#J<>_7YqIy-?u$nA8sAZ zFvhWe!b}q5^QynSUs@W-0!WU4UkS2wR}XqlIBh+Ax?h>qd$w7bD42$pawV@j_OahK zYe)na=qW$187Z|crYHrP^!D}^=h#gLBHb)>w4Au|#5Qv10#F}e-?z~TA*!#nT9$d$ z9jFR9n21a4aAsXAm+^0v+?TwdQDCcGawV7 zRi-Lvef6fW>?PSmIfR%1bvjuDc6L;u{J9v>|K*63W5D(GU$0&&;m?}0Dp5XGJsX6X zb1(8EMo}#skapX=*Md4PF@$BmDsi%4r|<1Q0?#H|j`xuEz&wYyQ|3=jso^L(XwEgF z=c^iC9s6{VCe6#HH7)muEBi@{2qILotqVmGCtcy_Pj*Xjy<3iVckgah=ODI?b(~)b zRT_?x`*Xr~p1NuXc}GSh`itK+zFf&NKb$zwjNj7-*_fH~j?)S6-o2}L%J7GqUjacQ z6YaCbkK2Z-oRZp-<)tMc_ZntSvN8|6?4^(f9&94R?25$e+T$Cl56?$EKBQ3NlH)#V zkh#?S@ZtH-)*ZrgJRRIOlk^2HWG;BD4OZn zHbL4Z7r;N7K@c+1_v@O^OXysvM>Z=cbPjV#RVJxWpERp?&n?o8&~85CaFkwMAWL-G z71PUa3`Se^A2ki*5!iw;|DB}=w9)2gVwtlD1^-;p-R&IJR|oUJdcU=XOc&Eb7$t6u z+WS+|nb-JOSW@W^>Rjs+9*cP{(~TmM@Pw0A_pbj5P+{m#jjzDItV#3V%!ju#h_tpq zmJnF8@mTMyAH&q&l=mTirJ5w=XZ}*R%xupp3CG`xCish#i|ri&F{4CKo|p(YeQ>*? z%3)kKt?nyJ`)yX`>@U<6wNQz^o98h~kE#l6M?@Xm!<$8%Cn4|!ELZmhF7GNG;RH!b z=xw<)z(qKer(Im=FNk(lkA2<`Ut`M2v zkq!p~&VHfX2_q))SM70ThCMZq-TeTs_y_PsH2EC(sgvH`%O>(zV@R&j_E*_&F4Hx% zn>X4x9;QD1YGYyQ)dlfpHGb#{Xnw`za#!9Y4s`VLrmBj)5p4U#uN!?%&1~ita2?m^ z`yFWCvdA>tIU*~XiX3_tXXtxx{_>aXuF;q2^UCfUl{ zbAopG@&XVr3iZd4hGV0V8r)E&LghDr-P^1=v)X#WhaKkblElb#_=UOorCIW?u)^fO z&TZY~y#2Emy&dwCrmdewT#@}~N9Ql`Bo^FPQ+98-r{5DRyS!y`mF_UR(Rb3c%Kf2P z4GB>UKHQ)(5jG3HeLOf%e)YzlN?7uZoD9dO1h%_qLj6Bh4pc3Gtzfb2+JRlrRl*V#m_>n`YagB*SO5P822D+Jh1leo{&7Pq<_sl zOA9yJFMUBSr|UwewGt%f|06q-|Zg7RL{M)3$r(c!5lY!zGBV&m@3L|wQM*o zK+5#DuiH(CO8O9VK5@5DBk?CSl_gCZN>`%RUURKw@$yYWIt%hI|9G`5y*oOC)ogd> zwd_yfz_UL+A$H-yh0BBn9p2yS4)fg!PxhRx7*P#KWak_a*)Nr&Q?Rn<{bjb0$3?8! zIWELd2X#@6=jbVt;#<_7V^mwUQ}R_FVSooMS1|R;xhR_yKqm!h>ozERGqTx1G;eZi-?0d26arPRdndH!!ZDdsjr&B-bLpB3nx2X-uV22xNJPzhuyh_ ziGgdHoj|wfHScLOFLdEtgy9vR3oB}70lzg8-5(c zmBh1?`vV@=haY(VZ$;gEiukeN`w!>g$Jp#*U2(YHq~lNM4~%vUylP6{jx# zqnK|`ug+|XkWVvx9++%6*a{MvV=bY-o}Cmrg#T&v1LcyKip`-giwMXK0v#|?CzTz{ z{WfAgeE2}wzBO8&{Nm;;_t;F`iVM-_)p%kBqGb{NRi?5gUVG3rN^5ZD{%#3JCiM|x z@l8(GQiI8l4-r-8-d0#7+2dW78zrLL{a|{8IM8GNheo(?psMFLj>x`)D9NMR+GW z0<(^mM{Kja-SyX*nYt4>U_*0|`8>$>) zY@|dEC3C4#9^&gS2zi92HP86Lq%Z*Qf0?(P0cNRgnp*9IY>J}Svg7EHDn)B-62rfd zlM?c>!)97!y59x8?LvmVFZyV{|HKS%4*8qyKhb!{VC}lAe284Ae2ymPETG1zawav9 z48QZb?aNd0=Q~App0=t9jm%iQx?%eVO90)}g*ea4eXsMm@C|(VCb?HcMnww0H&_G~ zpfLCN3GAO1CwIK-g@AApu`Sq%dNAOtq~9jiVVKeyGhlhhH(ex-Iuy$kbuV|g7M|JY zT-+M%bc#pFW<#S}}i?FAX_{YW=|e zL)=`Zl}$EgPuuTl{!lO=rd3LG#BJMjytVc!UrW&8BtPW#!t-+{jts5Z@1%inTwfPy zql$Khd&O_Pjya5Bt&;BZ-KxPn#--VICtr*FKF0j}8tQxD{~_%yz@qxP#?e7kR7ylb zNe2}PK~%a#DMdgD0f~_kkZ#F?NrQ-VnREz9$EZk`n6l(pbQuklt%ek3%V}v> zp)d))i(yPG`?F+tr55{Kn@K!~NkdAyW&y#l?6(0-`g+HU7oUYjS{_8Cfm8w~1d#H1 z3XH`d^$p*!7IkN5`cMh`oC0Go>ZjnYJimYfDXdF68*6#Ov|9ObY^Uoc5hP=`Mdp z0n6KTK|eUR(%gBUs)XJ^bJorrSA!m4E7I^C1m*=@VQtZ0;Rq#XvY!t}k_BbEuP1qB zdYnUf#s3t!i0*>?YtA95`-tzn615#MWycoJ{)Aj3tIG6o47Vut_AChFnml{Y%~E7= zV06Tfr9t_htRax~YO6wk^66Tzcdi}tIVk>oMMkRF@TM9k0&y=C0B1&I-|s*(WwY=M zBWGWe;d3Kwx631qPSZ$Jk)RpP8&y{aR$6$kG2lQ!=SZHk^gRnTnE%dXT z!?u>VZWZS591;?+iSWMZ;9V%HxC*900+!mCH-ru7f=T16%HPN;LDQuh6pb)!HxYmF zd7;clM9`;dujNIP`7vQO8OipRveKK3`~@-gHlebEKz4A)Yc>m1sD!EM(uikgYc$B9 zIAe=kaM%8rK;$`sj)zG0UuLdGx#J}#$rC3dX*~ZX3kqIQMHZR_uR+PE5}K*lDWU$1Os=> zkz#AoIYnmv>nfh(o|tEuA~LhO(9zKBJ$Rb>%sJ{98rpg?w70kG_wi?*u3xFMO!69BZU>jG=NPQjDMAC)0G)>a5$uppt%A$~=AL~!YbjdS>UesO0cf~>|MG?6^ zV)A>evA+IMW)$eoqtACnxvzb@`FCQ&(3lI{ol(#UF~wx1`?eW@hHn087A+#HGgScE z>C4D>aw08gLptEyZh4ueEs<6;n)i}Svz><4#_vrGDuw&8D^S|I(+!NbxI#}oXPUaD z#KlwK%{ZT^Wg9p=esMVw*jimi|MB}v=h5XSj+=@Mh>VW z)A(f?&Ed6HEeQO3l%BUDHu8d56sTTeejhCXb~N8AD?fNJG?!aG+8f8AIMv_pphZ%g znVHEgzx4CT`*PP=zxY6F>ks~{dS2oChG254#1ZELkTqn%bAHtt$Oz3e=0fPlf3 zluJ>fJgVhX>Wh1!q+?`cw8SwEG*+mPG3xi&6!>C7VhahY5{r_ICr%@Oq>?gP^=XD% zGXF_^j|y;(7mGDmyS!g^uQ6Ko4M&&$u5%*SEM5b`tl$b#08C}|C1+?iW#N>S%G^WG z#$G1=d`%nl$xYyBJqlBiB%Hsw7Zu@K41SNstcju8R&dv?{M_V0d=n4(hRn^zclOpT#2wq> zrveDr)7kgK@y+_-imKU@4OUz$iZa@fLeS;@GH>vsHx7BE7lC4*hsr1;-TR-ug%Xs; zYi_$wnJ_x{%_rq)+`(7O_V_Daleu*dW0_cg@@S8o;CO|=bx*G;npY3-bf~DC!?y#}hmY#co0akLJLdWlBslUs6TYU(WGjlluT&4 za3{D7*{gfC?$8U{4*aWa|0nDXx43Skh{w)9qJCqx--QF$LrwGklTqmvKnl`GIt`)r zJ1t?3x$F;Zf*NjeL7~( zkjAhyl_g2glzWTJrQk_j_|C6ol43Ui+6AY(Zp*9I zhiya#RXF&r&w;XJ<=}3*A{YXD0u{t6XiEFgDU-Y-r3P_VrqlJzUZC^fSOSFj*x#rx zLDb#G*eJ?q#sRAA!Uiz|13wBe&t<43)2f1Pi@H4ZILLim4zoA%$zb}*EV_)bAVj=9 zjpNAIC^lQh1-}m!TgEZVcVgn)xxk%IZ zi%Us38OqFw4`OSxX9CS@h5J{DWhLZ$a-JAoA)QC0R&f9+;FJ%}3WO z7@AF~epcht{nGA-d*3zkXNm!|tZXOi>hH}GX-f4^(QQ`9KMzTg`DW4B#n#DcYzm7e zpWoUnx&EJ_&l9BC4OxCQ4SGyjPagTUS#wIy)a? zUcz9Wjb8pg)%W=vT;6C6RKbVr$di0jSFN`O>5{ojyk2|wlc2}67I zTDR87fuMe+{UqMR3+9hEYItQV-h;#PeiSOgBO6-IhPEf~KiLTubpm{c|J|ca(IEcM z5={BO)wX@)UvKvq|4l~%`v0mI@&6W|qAx)y;!06tf@x+iiI`h~_40^p)TruepYr;qf_ zZzoU}L~%0N-NS3W`S%=wRU&Y`PJiGz9kOt08;S85PGwAKW&j`Izvt2h;*MNXPw!PE z{#(}m|D1h81C`bt6AcGdCky^9nArIDX#AOHJ9{}yp_HQjXrg3CKNz{Fs=RgC!EmWN z|HV?RLsxL8C1`n2(H=ttv6v)J&k@%D(J^A#EiIvw(Bl28$M)065hWm7SLV!l&sU`C zTZL#x&g=csDODIYQ6unuERVO|q zG7nh;q`6vjVzgE(N=wMd^^*=&57i(Gk%Xq)S^SU_MFBkClD7}2Z=is}iCc4}V2SKs z<&6c=yZ=%h`MQP&f<5RjGOI8UiMAv&`2!U~wY9|$Tw4ut#8_mcod-^EH zLeF_>FdKZx1non(y9y{xgHztRN4PcW}F^PhX2^(M*ndM7Jl^jynA#)x$~V zoaE(k4%A26706%F^rSuC+?`)6a|2J_rjMU5(fc&082h(*C&kK(^G`AEbG&>B)4X}$Hko>H5$>kaA9egkTz7|H<{xG~|Kr#w5vF#y9I4OP)Q z&6>luiTTSNLmWED4e;1Ig#oG{pU_$NmmJCEFXn{s94BKc(u>AK#XCih_2A@c3PCM0 zLa^_4@K9O`LztgxZl_3HO{A10S3bFudnfAAp0K(bkx7H29n^)n8JpYewabll&f^|U zt7ME~A2n1JcFZpWBKSZ;O#Sp*)rf+-9*d_g*1)Gu6n`r2Sb@~<(92XW=E!>Q?9rOJ*G{wER;hE2 zU(qaj^-(f|uQ+7!$L|{givgw16mqpyW(-iSCk@E9+4ig8C%YP+mqX0~9-pq~!)5Zj z2P2gmzPI83q*7@ppaCo3f6$wdqW(0F7X62}$UatZ@WIYM`VFYd&WT=uN+Dnrhi>zP zwG3`&@x@E9ZaOgUX*V2P96r0=l&9_=#nYrX;7RvB97J^TuQ)92_w7`Y{N#({>HSJF zaYHqvXmvR_?Z(LUiR)a)aL1%247mPitkkSCTS9p1l^H{)d` zy$fZ40tE5G9M2cb6=gtGUJB)wI=Xl^X!om}@6VuD685YuU<7>h+q`e*etiy*aFvk+ zi3E@M@jOWi_4=21EhOHau^|CkFP9->+3dVcd6n|lKQygOY3G@Z;T1q-M}R;%G7aCK zL_hq0^cH38QM}oro`|Ck=2E*@YYNto6rW`()&5O1ZSG5fWHz;)~ zR);!_Pz2v>HYyzs+>#I~!SLHC2?k*$41GsdT|r%6j3s8=c^EC4w+QG@{b1L=BWWK+ z_nnrUZPpa}{eeQ1-u|a!_YP3EX5HN^>-#vIx7~o~qG~`k^<$f@M*#y0Ut4|y$t_8R za&oZpeZ4T@!iZ?|om0@V<=W`4h2Y65Qxk!U?=C9L?WtZpXwKm9%Nsnko%cY*iT)F| zdyz5>R@Mz1>GW6i?`^vNG;=Kd__wJx75+hC7SeJAL-`*dX1PNsgH z=zTmUFZoV5`oWOXp8?luqZ@5|hu2NNZ#(tLF<|;aHyRDFMX1N|VYhXL;=hUmVs_yy zoe=fKP+&-dYi2vu$W!rcm3m65Ff7uC>zF=*h`rg2`9gs&W3Q{v!kC1P z*XYG1JdbFNW0L#AnB}OzLVc0-G3-NfMN{`x?bJB3xm=*3iA;qiG#May4A=kge!!ln z{eFWd)1qJd_kUb(L<^~hBba&8Y^_QB3Nk(TSu~15Ufm2w0Cp{?-E=pgox@dvh-=#! zDHp^u9322u^=MKWEsDdyDlqn2s)Qv}Ik_3U-h|QXrQhYP`i5aol8FtOc|Eo~{bMm1 zDIgAIkAz(_Ah}063&Y*wEIx$`uEk}I_%E*bFYixQ;^=Pz-2&)aZ_|48Q6h=$I!?0k zLHgd%ZeXC-LEr8R?>@|Y*3c87m3ZL`o(&Fc24mFl^la)*;f>1~fDSh_f<^sgLz{>> ztAgF&jHwwAul=*76e^nl%prhX=6i_@$9y!l69V*M|D$FKA^o3GWQIn5Yw?dhe;C00 zs`NX_!Z#3LUHSTNWZbC&bW1U3`()csAP^682&p(lG$#}wdv9CmpH_C>$2rV}b+fh~ z&}Y>L4FM95KoowpJ7hT0THnh1+>fAgFk_)I!DA5f>;uSB+=1$qEAc2mII}=T=p^(r zeOv;N&lE1^py?3_uV03qt63R48;nh&A2^a~WNu@Dr8E`_r}H6^5u)r9h5*JXsUrub z5sHK;r1R4P^Ym4Jhc>lx%SdJ9;`7Y&$54u>DwKtovv#6b>u=&>7|*Bm&K2m~@lo_? ziWvEs44*vN<^_t1)#+om0cJ*OOxYlVtH`ChJjWJ9C&xU#|EI9`*<+#3ijI9ah{_ab z{!8XW)$IE$4lt9=4gAWT`fX;WBw#Z8(g#0ptXbkx7(i9{AMQnc4(nQZOIYw9dlFX- zb`#gw7oGj+nA|kEx{_Kje~#+*Zl`0eZ2*ZQg#>D5)1dOz4dVhhR;s#7PEqd zfwCGS*PE0fuqgPSND#=JGcX|X0&A4;H8(q9|6Og=N&DC#%TeX1Jt6F`u`(gNF1(Pi&D6YFY~#PTWkB%C zJ$9LWBbjltyQpwmi3i1=m~L6Ut;B6?n3&E-QOxFiVgeZ?Cc{WC=fl(ZA#is4_X;}t zuTxTHsO6TcYq6k+$Q|=gP{AM<3Og0-f(q#8UQ4{yjHsxrG~7Jl(QqH{u4r)@>y@D- z>A+yI0wUdu{<~xPEL>4s=ih@%vwt8}6FCnYrb?Y{GGO)=KHD^E^PS!vc!E}Rs#)Bc z3vDq%_I4GqgZ#63z;2_n{XRF~lJX+1D=X=NkG#m{lcViy@{r~L=8>~99uzB=Hf35r zPv}DSR&~GT@Ha+ehq=GWr~uCNf_5J5+2{)r2BvXXB2@#h@hS$Km<^R~Z?BZDfP>>M z8v2(^<3)YRUvo3Pc~yXV=@76no~rP~sZ!+|ync3O<|NwUJtPbc+QEtApJpR<{2GkB z`D9RmQF{$X-|xRK8O0;^(zyl}fA?vbDr0QO4Adtpk6f0?#6|L1weg6o05zK>oM>1b z1>2}Aq%W*jK!z?HqbT7tN!;(`lcS`f6PqgEw}OhUKbRWJT921>8XLk~nxt5G4}s1A zTS@iW4`k3n$U4u)&9K7Es+#XdLC)rZKNP|#b!%bU<2ipW%XOV<>aBFOT!1>WeL$w3 z;k#ua`4{CYZ&K80BRM4F=ezyj&qeGM7VD5XH=fzgs3o0OVw@14COl&1|XOZD^aI8Ci5Z!M3ur_1~88x7%<_x zAU95KXZ~I2C6YGCZryz}6-3YgP61$G-&0O5chUdnwjWi@nXm(5yvLbThL1l$FeOyI zE*EV4a7*P1{Sl=r1vfUcc-5)C9Ld%{bEd3tV6 z14u-^^ZOhNZ|@g}p+LwPx4T{U^)hD1jpPv_yOS7bn$l)y&w!ud^!(@bBv6zSos)L? zdBwPytBxViG@)(V>bf?n>vnVHyXXZ>S*V^l_2i{SWA}o8etA*?KJjEZ)!rme;oEm?JJB5W zPIYK`;OL>=7iQe?E7c979Xnx>Ox__BJ*+)Z&N}}Nb5)J5$jF|--~{s6hS3{Y=y!YN zvha7cqGwU;X0OuI3v&&MoczR0CGBgySQcpL*l#`HI>^A84L)gYbFoB2UX{ z(@|W}Ad4kti+C0_)+#XXEPH|$!Tljjh^Q47MkwKhA^+y%L{w_34O{KzC+BA6Dd3&^mXE+Xy9?UNFG*fnPOD0?<3aEGdNReZq5OMFS80Irpm$+p6a2%ujwH)@;jSfxK;hfZmNk^8 zEk%#N6?!SX6ek~(vBX_8aBmw~`#P$SeXy7`=zkaqp-t(jcKvq?Zm(dO930Cf1n{de z0r!8rxjM@gg~mrb7&C0T>?mlNED?7*l0%lO{)R`yu*__OX7Ve4sj9Qo2kCAF)*Rup z9W0W)wSx8B0kh)6)QyOf)}$wP$!*ThGSml$Ji8l0rJSZ86aDz3@(7H|4}E>aHa zUgehv5QZ}t1I?`OR5bT~&=@~tY#qo^l;BhK9Tndqw(CkXbM+}Qo~wgL6nBU^{wuh4 zwH(OZ*~5Alw4#e`;=qT%+r9E;{N?PuKK^=IZsJs#HS$4%-^FJaHkK=r8J2HbDK1tr zsleLejRNhH&k0C~_%3&=O(=?N;=a9R&JQ&VUu{ktH=$X&@#MUL$(v;I5-Ms2?u$+n zavN2_Br1}&gYuSc`!{}xT&!_k-mPmo)O>D@P`Az8nM0TlxwbCqI*r{G^F+cwqH~xD z!D$wzp-NFlk1s4N2&(oFECuS1T~Q7zI=VI~am#%cBED6Q)K|tn1dedy)LmohQBb#r z)2H2SWTSh@Np`J*Din6gBWm=rCW{a1kpU`TfX#m2XRN}d)mwbi31@>sq{jCL)#Upf zH3YJRO61rOPsV-rqo-<;5n>z^bc=YYVP!rlsGt_O(m07$U$Cgsohlo=VL&(DtmY3E zT9*c!+oP}vd*E|?+Ua8fr4vcOo6JiXJUTxKuj$I#qdh(=+?kM0PN3~6Zu&K|{#B9a zs}Ee(TsaM_>-@d;-x99?E7srZm)gIMXM+%L_p+dbTtW2w69d5;w71Idy&t_oLE(R{ zL%h(x<$Cn*p)UyA7jp2QI0!1`{~!7PPuTN0)LtMN&OrE0%j z!TTAenAP0tFOm^&UgS*IJZN;sO{|YkV^9id>=k|XQ>r2@=o+!Hh`BpAWnVyW(I zh64f{zT>cp^R?5!N9fFt&U6AyF}kSTfL2TU!J-6a9z&rTZuwCI^qP&8)j9jIg1hCyKEy1u zRp5_hnsxYaw~9>!wBcsnJj6HPz@tNR$BLsh9_$Lt!kDy0es!VG3~#K?uxrhs@9(~- zUW%OTjy(lyoASSGu~$rI5A-7$Je`D#Q|~hKPktg`#cwEE{VZjRlPkYZ@+ElOs5iMR zH((&$4cxd7R`Q`zE;+$^z!^URt z>l|2N4+)b{*^r>w=7Vo~2mYEir23B5#(=P`RZo7jaWez=wt6`p8l7}P zRJIDX!6X7&LlylEjrKbeuQelqP=0)S|KO=Zjo61T;GxIq@ST92?BJrRrg+q=u?+yc zTy*Vbe0~yeKf;+BVm@>Abn$Z)eT#$AaH!dVdo~dp^;+I!%SHw_@^VW}A^XhC)o)~C zf_NA29O_&B91tO7{C4a&1`TCc%mabK1cT{G=+ z0X5RLHqj7(lS{m49hR&J)jt(qY5A#4Cz|a*{h8JP@f{I@diF2e^~H(>Cf%9$vKZ4U ziUez*wserEj!#{t+cF;Efn) zHwK!seAO69YrcinTTDLc=X+?rH2W`;4m~JmE65W;~&o%@>b=ksY$#c0m%#8&XDXmY1z&J4w> zWnI5@vEI8i)UpG(44{c3#aip9HP-Wbjfs()J^vE2r`)kGCg^eCD^i}Wy?Bfu1 zxv*yRBW@^iX+?r8C(&H-Y+ZdXmj^6mbCI3BFX7jhsRZw4@piJrN!otr_1yh9+DbY0 z1S?V`6GQMgH?_Z(&AOtxV5wH%UEQ=sm^Y_GrZ}_JW@EZp5A122+E*^PTr()zVbk}lwAX_2RH+%FnRt~jS{Vu@)#34fV&s+LVonk$eW*zj6@V1_3 zTJ4YhueW(JatoO?5m0d$8Dy&AyVD6A zJXSr5D0`t>*-|PgT!%jBm&?$hXICEuAfH}6701OOYnJ_quMp#QZCz0zv@q5n1#ujn zik+8%q=)z4g9*8pG<82@VTGBS6_JsuQ7={b)LI=Y#?MM_F7vY#EG#!T8I0F>ixPI9 zv6(s4ZnOzCH9e;f7})E=?;l-=hq}Qs}eSx-yL=lUQ%t?jr!&J>9C8H4b}}douhw21w@rEd|?-}cs9uuFcZAy3-yVfkS#O1^%q)VQjt_tg&I&RRi7trcA(8V#&przO1R5vfZ2kkbC z25>;qVwCLnd0d9_{`1SzjxxcLk1LxXx3^;{2)_vjobrL04k#;{hZgkhJn+T6H>BU$ zr+J7|5$j=ppZo$J%G3`~G!bSqaZ!3^yrDNc6w?To)OS7D_v*~xFdSp%157YY(K1OZ zzUf)q#5i5*&++Sev5W0;nGX0;ee842+0T{++6F!}k_OwJ0-Fkb@~_;C45&^|zOK@W za=<^gKFgk7Q>6{K6Of8gagl!{Z7F$7)YS{@C#e=lM>k9=xxO;1%X|*>zA6C zYBDBPP*54Z;4X71;T9Z;5sYAC2#yrrT-0~`C}He2&dNeKh15~gxe?H5N7FU5?pD#= z-#)I8*NdBL{c%Z%2*qe3B%SGMC&(r^9jDYSdT@6piZw{hywd%aoFa~@nOZn1-=(W1tpYZx=7#R2m*V39wA$L9 zaW#uX>$lM9kPEKnrimdT6o7R|Wi0Im4=UpIELPBpMgYEZYP^fRhfpE=JVdtYmgw86??{+tjBxeBy_rstQfZM^>CkOa$99w6T3o+-W9minqY9f}JK8w-^7WJ#eojut=a<*aj%uD0Nn@DdYT1rTLcyt-u z4wY#2^JC%$>2+HyqbO00!qK{5V@VSqb2(sy(p9rPTLXNYQ z^UdAw#H>7&`3B%GRWWOm&>~(Ut7=r`@)h9Ho|4V#E7NG}B~J@)bBP@w9rC;pAQm{x za=$bn9m|UY1M;p+L!_NMAY4HPbh9B?CpXsoR8?0h9<@N=KL~*S2~qLdcHo;z(fZN? zOQwBW`AQTcV2(Dtm1UbrSDBtR!c|v_(~P^OrD6#0P?rjeyi0T^{5xActLuNX-VKN2 zacb!Ma(7n!#?AMAY4!BY|A9X|rxapPU+xw|QchTM!))JI}EdKLg*?4LD_?!S_vc$#iL!oiQM#x4eC1F-W%7v;ti1|X*I~vp0m)j<+^VP{-!5Bk6LgOMpjVC07wD} zuL4*1s#8l9<@tDEIKDql8z?qNCMb-yU)J2jcZFM#n|wBU6H2F_Yb^lbw&C>z{*5Du zJn2$k6mJ2)*?2Llfq!Ew%wYOiBoym+_vQb{Q3(5+fn$X& z3^H!abrqG^FtiN5NiT-7;h}PK+LBta7ApOY}+PSA6zzK>Qj^|)YC&bQ+ zF&orKPWKoQYn)wTL)q$;Axz^Y3EKx4*`XB)z$ftH`f&;n3UOtMfkI#h7eBYMTjOY>;gmICzK{<*QrJ;@7lDt;;5`4rhfaG%bPrb9dIl zHWwvhq40{E55Otbss=yOFK2aWIb^ zu;r%tessd3MBv(MYh_qya84!+Mk0aJ%bjgJ8a_Xes~-#0lG}i?@Qr|iaT~I18T=5L zui@s|d}u_Js^=`wE>nh&&0vVl$r^9Pptm?@Z@R1~(-VQ6XyE+?A~jznM>hegRGGYa z3Rbgx0XZY#I5rIHl`}R2LNoL9o_WaQM+C&ef)nXF5sEVhcMiO9iO$V)Ad^bYXc`q( z*9SkSbBre5`ckggGnrOVR`4B+G!yh;XO)|MdS2oW;!P@4(!56OfR})4w{JkL{fzvr zbq4aM!SXMa`4bJ4ii^v$TvI%~$Y9*4C|mhV@RvJMoko6G5xB>N@$Kl6Dpvk6kGbo- zBvzEax99zwQVF=hpS_O>bT#)OK1MlX$Z++rPtm@ZUQL9ClF}ofI$qU}snYlVu{Orw z+4OqngN1V?I{Ur4lQ*=^v$y9%=T2;ahwKQQMuK2!63-{VzFs#h@IwxX%@#Ue7B}Pc zNdvZ>B40MwdXz&R>xwVSxWG9hxF|xtLDBOfUAuOp8MYXpUGqTS&~|C$+lX&dUg}8H zA4av}1SOiNGV5HP+bks48z>!UZvG~!0kYQzINg46Aoemx^UCI1==2eIFI&#M z;N{jjKIi_v^2JI*0fcZoNcl-40HFc}x8DtN*YE>t?Uu#R{IMRO?yzCW* zxB{3#ufKs z5AVU_70M%sLAeB<90VS@PL~cWTr_pNK~^wzqdbd5opaUdypCbLrsZT>CB}*TN0y*} zVv6-xu^v(yEjMfVCx(M5I70weka7>=%Hh0wPF^FTNd;QKieyHbU8Q`cvK-;pO+JvR zh1W;g-_$kS9k&+{`Z%)jq2S*!&<%>(f=@fXgJx^X5vIr^IJDUe$5Hu%&YTBel zj{XHvB9=SH`>JV0uvNG(e}CLpcv-;CcF3rIu&nU~hcTOxeIKaUqYm`I_m7w0>T-6A zCE&iwdh%D&gNgHX17D4O`5STV$xGjcFO_vx2#SrhHM|a1+Ux-+FfGQ+AS0LnSvOhfAe%HWcr7-}h{Yx4t`P z631@VrgG~Cb82Gn3j3dl8HTu2TE!C?@RWlL&P zwJ*Xc?KnU%9_M`Qcx0pE0VKZ=0h&YE9_<%kb8^q!hQH)72jJ>n9YjQ}PnTYb1n`Xs zUae`6)Sfovu3u%)-$u)igpB~emP9QLdfl8>RM>mwc)y(ZQ?r|7onO40i*3(EYsJ#j z=-&$uqIF(?3M4r7N*0Uytnm8iggNrXL13a7Ndf&65)FIR`O&lbWOw88IGSC?@5yjm zlZy~zExC>f^h8GrsaDK=5a)&+_dZyE_`*uh^~L&{)mKTS=?Oli8JG>69>}MqQA1Of z12)0OjRmY6C}d0bAPS@ zXvo&2Go=kr^!+_#3U!h0?`pPF)WNX%yoBYTw5@iyn`42Rrab^?sSB(IuHAm^=In!i z65Su*jTHa^_Cn-621ITDr&2MgUCk;=ebZ!u_a(vJi<~;%8GeuGx&n2L*RfF)E_>TV zc;r`=gj~?YR$m?;C@J`9lXca;4E#{Ejy+Zq&przm(Klc~IryzCNB!;8%DC{?l2nkg zvV>#5`%KojeTCiBS+xx%YJ?bpB*sIZn4`RDBL3rELxetV7b)E9OJ$3(Y2-_5Q8aPtJC|zaqjB`Ao*iHeO z_xPnTeD@R3zmnxFMBz8#)os~$nV~@IPE$Oc0Vt4Qkv5q)9BYnf0XMA@|; znNo7tXXrli$u-twa93#*3-e(*R@kd?N)R<78_6Hmapx5Gk61cFQ6M^}1LbsO9GLuF z*I<6VvOVc)fX4o~N&-zE03Vr{dR&Pm%Ckxd^OI9;-Sx*6*{FDaDSrNLN;D-5Cs=rc zUOsB-5B9g7ED#^g*9D}j6wdCt>j66$nsQBHs}( z@yI#v9%jZTOPSp*iS%7d3+gws45yr3%(MXv_?{bARp#TLsD4jI#29bPi;w|MX&qz- zLm4`VXq(2Aeoj-^9X;$c9YpjCPLXcez2;bPm0uZOnP$euKdHjXQ*(T_9kjNeTUXL_ zv_7BsOJhMNvFOZmW1kRVg@b1RG7SjrK#zm54HU7q53FxGv!u&<-;C84GT0&4Bhq9u z?aq^n?pEm-Q`n9mOu_+~2dAv=Lc9As9EOzb*P%@a$Pl?8*#?K33?xXoRy8q{UM_Ul zi5v6mcA3E!+yl@0twuj-S%qH+r36}!CjA^e5*S~za-#4Th5Z8%udo0P0tj~mhZ<&g znnT)Z27Q1#1PO9*Dc(Vmoa$Gd1KwY%^ku}g`zqQFjo%A_x|&n{exacQ^oZAC6T2RN3L%wD_eO*R@GM?;r$&wd1LZ@nC^==}+W>pYu*Lr>eK-=ZH&!WYt;J-yvY36i70be8=@7P~-Z95vG%QnN?nk z3z8(7UjC3$5(ZQEI`{bMPRyG~eW^aNtZ9?RPXW*paj9~mC=MQgI}=j6WVDwwpS^Q8 zuei-PX7hW#=NhY{w6+dDKz~E7-fi2$()dfa+l_`;$LNLA_KI5+_<_JP;pM6P^1i=c zfJ6x{_4#j$O#i`)qi85OLyv$Z5BM9K70t|`1;IiWvCB!@4hfQoVlY7arH!GYSs z5+0nAI#voE-!6WgaH&GwdmcUR#q01~-ur%m@zkeDUsuheoQzoS;GOpOHV>oD2vlsK zfZd<8;ZNlzseZX3A*on`zfp-*Xh*7eduey$BWh<|B!tXJ-Hr9H_@K@JmP^0V0mQb& zFdG2wO!3CYtwNQkLO=AWYx-%rT7x=2f0rsTM&I$PAPKu)%#tn5`rKPP9-5s*Q z7NZ>`L{=+tdm{u>R&WdX=-uCFm9*Y9E1$(sf%;Z-ne~l)NXS0j>&9hOAe17$#ZfM- zTb$mk)D9WpKIy&{YiobTjJ2N~>(kuyvnVzv<;ZdazoJ|TxuY3`?;j2Zomjszl+x%_ z(PS5vQ(Ju&@gigqpR$JidZ~>K198Ue$Vy({()gGf8~Ql;6&A`;9xLXp%#0-j;R z8BJNn&@51z;47&*2@0u^aQ?)`s^s7u0j+7CAJ@ptY)0EzhmSfqQ0X1GKLqJz9)~LB zS^38Tb`diP0Y7=bLhgxQrv4N)5XxQ*C<)5Rq#;JbBZ+t3VE% zaZ>g)r{JwHVX3VJ2nwIWiRx5u=lP8$3kCCZhC4a2!L4vHIPp~vY=PejjDKQ-NF^-s z<9~OIEHMY5r5gyY-R`Bg?)iatgCBke1nQSgj*h#MGtc~9iowQSEZ6&(qkjYqUarG# zJNQ~S4wvM$3|gvo88@#B9ZRF(H<9))UT=Bf)RqGkh#YgBS!--c?XYX&yY`#(g7rj0 zE2?E2fK*f#fRuH^8M?XTu9$ke%JxQuj!ocFi?#<^DAoea?{diDCU7EpK%5Mp%tA&+EmsTL!hYjCIV7Mv}CjA>;}e z#IkJfN?gc zz2EvWS@tnX^sTqN#mtulzrS)fFp#_C)pBBkR4R{r)&$}ddD#K$7h{@=*sf1u!oy)R zo5%sduF;%Ejb?6?_odU&oxc_%CiVFWi;gUDJ$3v_6*)uY#40~EGgI0}iX!r70bwmU z^7e6x5#StyqI4jLI?_k6J^}>x?jE6~orzK7j`3UNavC*knD}U(oZ0J146{(1HD4O^ z=l{C5g$P1qyU_9?u54V?)D2i~)S+ZE2En8#h@~zs_x3wI$}Vg!1KYTDA6WL#z8x*U zl{haG=!3+4^t7+fa^KrKAZnjbM2@YicNWvnWS~h~{%mSG(lJxz8q-8iPPCj>^Pdga z7s?Uyt+SHhKSICva02E=X85DO9CP*jn zb~1xPu57T&`(8%3f4lXgI)XzoO5A<>BzIFQiUS@(n4R-G8D~FEzSLz_QpxXslI9YLFyLj)alKyxK#-D>y9p#1M;^9 zl4CB{o}n;#2BN6$y+YkiP^6LL(#{8zmeR{ck4nmp+Qy|VkDk5av(yV-q^6!QRvx)h z`s>%PC&U1O=(ms~|;cq<4ZMy##5Y zgS2315=saO$=w-e?*Dzy{r-FZ=bi_WlXLbtXP0&MUi;l^y=zm+&$5QbGigINm^wCM zDDu$XvS<#S=KkhtnUSZ6a&CUn<`I{Jx2i?BKN8ye0gOCcYOQA46yR&o>KKbEYo)1! zyIT5v&moLEp`w}olE3sjn@Uv$CEb$`)Lm*;ud_=y#)@HYoI94UHRBR%pNkeUCQ8q2 z%A~rv%{xvY`{d4$OeFI2mm2mKYnnnLO3*y2>2%u*UQ{{dThOvRlQi zMBE>rbF{T3q=h&I_E(*&F&rTZycvv$g`0BcCFgu2P$s3&XOpIY+C0?ZA7Ls0$Fev| zuY~55E7bP*j=H^_d$5(B-4Jf%J?j1!rjm0sC=idD2vhIvXqU~vej1*GR9DG-@1WZ%A4N>eFyn$&O-pMF}WMvsE(s%xNqJvRLAlZG3{QY!4#Q&m`naOIIG z_08U(_G%YlT)KbBac+6(2Rh9~MOWieQiLI4<62OaSzj|&H<5UUuejjEZ^4ggAo3t7I{DT&od_$Zqs70a)?U=#>GjIX&Eu;Ab{(qOKI9BVfY$t8 z@k@mvB}3NJQA2lnea_kDxLhC1o0k!hk-vT}Z$1B-yEEi@VdrrzaEoF$Gg;mXlqf4J zi+$Ch%EZ=Hk*j69SYQ|jMQEIT=jL&aCISo}z$VSFs#$3sL8Yp1q7(I3=Hf0l?^*_% z)r#ue;o@XBiYB9U8ZHQASj-HUQ{PYBobBU7$qz3K1PaK1G*Pkn!NnIz$;7y*m8^PM z?eH;rk5lVOD_cseTq^{sn(z=tX(NhOpSR~21d13L-55{^9rJWv=rA*HwUc6+Hq3Ef zbysfnlt&k9nBJ3p9R7Zn36!rO8Z^{=U=^F`RUk{kh7`6^^eIlDyvrjEt!1JQIc4m< zW2L6W#Kq-+0uB)dVNhynxl$3GAf=GgcR!Y2IlUihsJhDmPR=wBS zc`gXmM>mx9|0Qvf6ChO0hJr0xEF6ld8J$t*C=Vz+pre~dsilF6@c%`HwU!260|HjS zDhkxPKR`s7T7*D=jMb^~?kA)bgNZPJ1arwIjgKr6*4M&8nlR5EJ1yjz$>vO%7%-$n0xPzboA{Wvm?5L``X$u&ja}*4lLThibUEDu{*`)R71@Ru`;el!n^(WC zC$%F+^%^X7x93w(u1C_ zv37Y<(iQz3;GowP?CUhg)($q@Tl6(6yA)fTd1#c>jpFZ7=webnf zUyU&SmTsb-r!7IKLR8+!o%dj~^<<@~ZZBOJVS%X;;_o96>*DYfAZWr&j$P3Wi~RPf z_7UvafPwb0N4801oNZ5{IDh*a7A5W^>tEwS6F|zf@hX<+0rz6OA@hj5G3(IP%DWK# z5vf;m=54e#tL06Oc| zmk{t9;Jf?g0pKLt8a9P#o5zehR!z0Pxk{BKrAFMPPTi(Hx=8EnEvAG7GaC!G9C-fv z?yUV16dgm4AZ*32=K>|5NAl#kT2jC7Mf?d*f1gDV8AE{`m$uvxhNx`b8t>LuP*)pbKo zqTl+#?D*M8G8}ClT!5@Te$eTsX}k$nSpc}9_^;s@ZrI@CoV2Z9-*yb9 zII9|~8gWBFP3O(|BvJOP@3V{Q_seOC&!*0`d@oO4n_U=D)h>!WD_+FA86}Qsy?Vu5 zb^W4s`VBXC_xl{bj8xqKt;6Hqvut3mlw6mr`T;OQ3%Ob5B zeNbF-ZIPE&ss*U(Uf#Lr`D6Ar|6}-}Yx~lf47~Y*wNG+80lpcJY z`Nic^#=72`zf{75dnamZ4#x6KA}35K-qx1jynd6#4!qKB2U}LyrWJvP4PH`qv+>Kf z3rf(!Bw4xbqDQ2&GCAN3TqnYhRYNcW-;_DQM4Zwf62otFdUCxHA98{-cU(d~>cOKK z7lg~^yq7b2pwc$NAz5g7;)jWO-w{TfeD8N$ zR{yS2rFMG2u4^l?!lKFWV7tZ4VHkh@yGyzVXBCSNBK-itUZAq@BNdl7-2aTS?8$y@ zSu{@3=g(!Ugd5rpAFNKG;v}4!qV-eKM6{=wn#WhBnI~u_9+6{_PI~dp60lSu>IxLW z&}<&#z=JH@TTuCC$|kV%6ucfe?|%cHf^x&vuJ9x|?~?dm?BqA=J-%lZ2jLG3EPcFG z88`6taA*%Y;upK@|7g|N}Yybg#`zj;tSE~)^?X#2$p1vUV6_Jq7`bx&JOS9>s$!wX)OoT7uJ@&s2y zwzR2Rb=59c%y+qPopXTB{D$&IfoFR~-Y!^B8L3Nsc29Y@V&pdIiQyjxO3)|j+Y?c# zzYN1VKu=VP2zCTL`z^P7Afl=2b6raHa`Jr}hOa`ujClszfr*B`)Ss21$zjMVQBngO z?#c2pq$LcgsXnKd~_V>qn!kONky zOJO`^0Bj2}isY+LrKAuuO^szsOCgto2A`Wyst@}jypBEI#Li)BWlUkaD;%vYI_~B5 znGa0mAmlZ}eh%1e*&94y_44%aBzF)T%n(N3?J-|?k`+b+dB>D;d;2>Bo6e|OPg*K? zf~IK0k2~xG%X`S%i79EpH)WemTin^CLk36s=;zgA?xMnbG;=Y}91u6jy z5ZJ|qIA`+QZsMwB<7|Iw&i#Zg(1}20K$r>LD>L~n=sTHFuE!P(OWhXlS$`kM0se4o zM_=ACBe-J4=^B{p;#4@!p+9u-b_!VezQs$Y>5efdnuDT3(a|vuC2`SLjnxhx2qhGR zHs}N&E+U=n>^&H6yb30g@gnA3z>veGKJuk8|DXlX^n;$zKQ)A)q+@fS&)kk|I@7!+ zUMo_zhko38jBl9)FMa&-(IPsKyxT=TZVL2`9MoacZROjYRx6#(8jixAo&Lg+g0IMn z$6ouW^zqBdO_-pOjTVIIdq7Qu1!XG(OeDtS`Z-7>TJ_<%FnLZz^_S=;Bfx;hVG+1U zPy${_>~=txVWE~|MVXowZ{dy;)fWQAUQKJ;&m{-^ya(O&D`qs5MflC~m5HiV6htC;lqqJ#E)0jz3O`=v8T$GU z;ZRBi5_b(bk7uB%ABwsr&hDLWw&o4R+|GNyH&gBU>=Uvh>Y@kZYt_${9U`#n@?AN(`@Og!=BxadyC_dq&1= zXjg6`bj$X)q+AZ^ACFAyy^8VunJ+3Frp$7;dnJYZDerI>J5E|4Yt1}+B}#Ce!t?5q zR*)&ND}wLii6Ah^Hoxw{Jpu5xeU~QfHxsT-dZr-QMtvytslVn^4B!3Bh1=U6>4$h@ zz&OfndOfL5{95mnSJ*<|61_lSz{NtZ zfq%dA`>Z{qPjy-=BLkVrjP&Bsi+Pl^tZvpj1mzpaFHeJVDg5&ieDDW7+#Q>H&zZam;{0R#^DH z%jn13UPGg3h<*wLC*Y!|U5kiTe{oTkkyFz7H-nQgw~dVA>2=Phrf^ke3wJL(-dJOz z&6A6K;JY+RE!YT`>H-*uQU1}mBq+&&PBnezWJr$2+siS<-vfIDy;yPGTV35^6MmF; zix(I7%vf0YjV;~7@5wa9>noQH|KYvFxucJ-Q#g)!!^c4)E=fBYY#%{h^*X5|ZWwH% z9-&!%Fp4M%;d};E-{8DN$1Vgd;1HOBnx()T(DK!N@l9Slbr#xE)_5$0+Az2>0YYV2 zQ~{O<0ufmJjrvj4cmfSnOS<1jDi(12%rdOWlqR33Lk5ZHY~TETv-W_#KJpXN_i*8(QVrd(}QR5!u|v`g)Ot zri6_`V^n-QxBqIQlCb;kdaR(n0eIoe%1QiSA<20?J4OOOR&L+3GXh;RJbjV&wS!hl ziWDG5TNf>pF3!zR+Pe<$!-f2Q$i-*8G*<)&R;@&_ht_D$qgPyzMSQ`JhMd1&Uqfzu`5-!^U_am<2NfI zBoGh?WmN^yWvuIbJ4S}C{{o~$u<+Euj~3>TBIcE%y(otQhxrY$+OMURVvUt*jh-8S z(tnS&wUv~PJxeW%NCTK3nD_JVAA6fo?VN-XMl6_xy;@jWx(Cpdp<;7ve4zzhI(VS{ z&Mi!R=(13soF@n(`)x{zs+;yexCvs?)&5{;K7BCH6DWmM&Y0A_z9f~f?j}$5U1=-a z8VMJxL?GVqu@X>l!!7ta3rt3aH^#_fwNJhKRHwFcly(Q$nQ-0Y7LJHtVd_eVzZ|i2 zLF92fvIo+Rcp{^wq?UU>K3gUo5nlYe5{Xpix8rF1 zcw-DQk)#GzI-iT)!YIwei5s-x_`=|{9qwg(_k4ma28kQRxZy z4uV?+WDt{<0l^_V@`0=!uW;$#mz2d_Qq-k60W)GH*sL*oMmfDY#};VJIzruRl0NusHG4>scClaHaT?Ha$@#Y@gXI##4=38 zJkDiG$UfcI&cEfFQ3a{ADxl%f`{P$WSo&{M-)0=to@w7SJ4r`80fZU8++Ku<1n90~ zxLkZdQ`x)R3Wddw0Y5%57Fad<@#<0buW9K6T9}3OAp>?<_uQeqmP0wat<_Wu{w&cw zsO8Xr1OEL$iHmvk;?~~gw;F9&Y;`vhJ6XZSW^-{wI&ij~Wqj`I$Fm#dC(RsdW^F9sPE- z`v)07CNt~SCI!_Thfhb(-Lc(%R@`pF0O6cH< zIZ^S8t}IS(l9-q-t#lk6aNDpFq-5Et(xxOs6l;||wOuY9vO@w&S8wfekPKCQ=g+p= z)Ok6?DFXZ(>n)?x(gJEWp)Ka=2Cdtv-+3MOySE1UwNjtlR2eYr7wz6oohzqxLT{uQ zFc1=n%zx}{h-CL}!6?zL3JMD5P!R&vBdx`A=#H;9F#h3a1FzrZY>nEk>ZFG|e3zi= z`L1O$=d5oI+lGu9-^`GJoZ`j(S8fg$=B3XYe_0cTnb}pm{e`qx^gO&3YS`@$8JMdY z(L;Sh-D@f-$}+xL_#4Ltw%uQ|@W2 zoNn>j4KPFsY(bN9(8O-!oQ~XGMMcoqIuJUN-)|z7ktg6s&?}n*!Xsfh&f^GNvruf< zIkp|uUlaC;bL~jMTisuIw}sLDg{o=n$Rh_SV+joPOHW}aDDPJ@t z?DpxcQsZ(bw^nR^9YVCZg@pZpjPw@ty=~S4=xYqe4IrSQU-P6c#a`sCoqke!7a-~ zDdPkGK^?jj*|bN7*j6Mxn()c!P0LP}aE5q+X-#~G{F~K%d$kcIBZl6aTEpbplx(_) zVyG?r5GyOi_#}_Ct|G?`DZ5XF4ZKfG$=PbiUNEK>c-$?I;C;B@uSpayH80}{PZH+c zZ6Idn$; zpFQs7kZ?RMP2HP^7y}#SapOf?0$kGTX=oRwf!`^2h)(*%DkUTVpPdqCcy2v#rqte) znN!vv(6T(2QV|%^BPbM8f@;!RN*4Kkpf-&1a*?UL9r*p}Y>;M}Wbcg?a_>;euwj~Z z40+~?;y1CfSw~;ml=txLMdbzHGjg36F0~k=&E>*H8)Sy2-*ttqElBeMlbIq<8dh7m zs)-!40-R>fvq-{VmjtE~23OwIGo0dT5&OH9carO~tyv2J=(=`M`gwgk+Hz|Z;>?PBvr;Tv)}XTSL;5;#biWzEQ$VLl+hfX>BS&Cyg$aA+YON1+P~Rw)v8F2D-(WVtAlhi=3IKjYG8`>VH>L z*}Y0qFS~wYkuY=6cXs8x&gRZ{M%M?$J?5$^7Cc1qMpNM=cY8%@xFdl_OgN6lNZWaN zT(af>T6cH7s@w8L|7NX4aFn`&C1hi9q`arO` zb`TPXxFZXB;(JQKI89UV-|bN(ua=X;)DiMphcEF=wfctA;)vAxjRFSX3D2wdZETrd zFFTFvW~Walk%;JeD;2f5+(l=D1WRP?t5-H+mK^1KuD+nm$2@@#7%xu)t!YJd+lFoq zbV|QSSV*N|%H*pj>xUGlZ*e!w8DKxo2tc7U?Ju`V&4DN9*9d_PD*Ap^`sI7CHLnv^ z8h(6cQbj~EO{+ZPh6&N_Z{BI@=W6PL2#m3QJ9rJy6)C_2w6(MhLA)G72Vdl96I+=> zvf~bZIBR8Z@pX?f68V?u(ydbuC;)1@t=mgSd>Wj9&cvTVTpb&1jW&R^7i!kd$Ut1} zVv&QJAR>wKLOlcvy6~4-(%Tf(4VC35Mm1x{H}$uEQcwCY0=AJ`Nj1OBUiq6h z0*0icZ4WM^Eg2rJMPgX~Mxy8#(&CSK78rSV?Z$JTBh5{LiiQ|HGC>vnwKYp1#UgmXR1mm;C6Fb65l~Zx0Oj>hhzj6~HOp5X zlWV0BEVO#>4MZ%_6A&awQRH>@0ENci8%roolUVS>>6tt*@M%SD{fTA=9&u~pf1m#G zv5OU|e<2#Zv$y;{(%{Ou7%=B4kMEBV{^tg<06ceiUBYPmOS8sLJPw@sqOys;SwHgP zGA#AZq2|ksqG*fax+M-Q{G%1STG?h-9ROE4+k{uv1K=w?#WQl&$~glhD7P zm6JFbO3N8*+;oM5=KjMq}nl*EWS1z1BQrQuC{3y$nJc0ffTaL~O zjYBs4SSGzM!h8YHJ|pr`xy_@utKR6D17t=dd$7$`FLIh3xVUv-rwF10x;KrtKX%5 zD&%7)F`^=D7I+$DW1^uS|LsANsTv{c2FOJ*T(b4g+>Opolg#h_+h3UaL=`8Dp;}jy zZ#~0Hh*G#dgqns|BhrqBH{B*mX=58u@aRQ+p8^7KwQvWlC|f2xakqJsdJ|S z=b^|3%*{m%4Sk7+5(7R?eZ;BvwTn5KKkgcj-yU^E41MJ!cyp8L!zhD%5H1>B-=U=N ze;$Cm)AdOkJUbP(@WAzjxb-nT?vp7y-MI^ZD6`s9;O0&|le>6q?zCGba>Da-DGqwl zW^lIYS$4XwXJN_xiu|>2goczCjSl`blcOlXfO++u>Z1=plsBA|Wfqw;udu30(w>}~ zovq@&Bsy3#{yippeB5lXzdx#S)87Sl{t1-mJMu{-CKOrP5nCxD&X+>#8|BGED(v_- z`M9U&O9z+;=%mJa;BO62B<{|GeS_9-Ev743@gOlHhn=0m$FeH^%e8IxQl1V!I&X8h zuO@~fslHVq_gBKCa7o}~Zrx^30VlKiK+wtsT2FccrE`XwO6km?|6xj?NJ^SA6?c~! zs76gv5F@=sAIN|YI6%!g{E> zI_6CAlIAnN%XGZHs4YgFk;#AHT9lgaWBQ23$Hxb0F+BGV(v?>I zvoOZfu0Y~{{uVgmPL)&qa!A|)7vgoO=FO$9Z~DvI>ac9qBf+T0$_==AC71905-r++miVYkf#}E4f(<@@ zo>7ay=ZSD7d%0saNIPPY%j>!c-xm@BTiPY79L8JhBT3L`n`C%gHq+I(H+7m~G{UR4 zK=)fHt$}>3?z5bmh*=%}??Vj4`1?#cJkIaoBfkgYRh?XIbMmhU>W*zh;>j)ddx?s2 ziIs@&e*`Dlt?sa`e0D9tZ>C}Z*J(LkZ#$n&N2#fLi|<7CNrH~pAO+sI&EY;Quu+>1 zLHG-_Z77kpfT1LGWRS$7p*l*+{cf#qpSVhJGa0f#UYC?e?$nJFPKLWO!-q=u6l0V|jjNL{BK+bJwmo;E`8G6H1C4aV~8iGBGi`tf6W~`iw`e zsridj#n$U^+e9`Nmhb(U%4Ib54gBzd|GH+I7Lw`#o!et3r(a8{25$;u((t3os;ZM8 zY7*jmZ|-V58gHR_jJ$K_J6%o_hU>P|C{{{jin~@ozM#va`aHuVG`Fk)qzbQBnUCZ# zR+e8+s^;W+lIYMR@vYErAx`H~emeuU%B7oiYc^HJFWdcN2^ovqu|JFGb37?k2?g(PRFcAcQ~g2b~*Ih(U+ zH&^O~#i0j1FY(c!8+y2@;bEl*k}00P!2%k3jlUqCUe0+ zoy(aymF%jyZMDAM1fk3Av(v+Rj~qFYjv)oapkl-X1*0!bxnmRp{VY47C}VsedUW2y z!{Z5MZ!;OhX$~St9v+tRpp0-fon*no|l9;ls<*HZKr_#)< z_DH5jL^Y2~i0Pcqc~q?vCS)SrNE$knQ+94Y!WH~bq=#N_FV$KRpGS&b zLtsxsxI^U)_y}&2QXL6bQ0uo~Dp8DBxvn!s5>Oz(M~8|!w2T)GsfH;2ZGw_yot1Z1 z#UxZ?sn)*)fj!DHd^*;{ahks@faOVUgF*Wj>ooFu2Yh--2H10Y*>;}?YE zb}qoVbWTKQvdypEZGNkxm=t#~g1vkTE;9~`(oQ>EQoGBcF#u7QTCA9E=8gm z?!;_QLk+lnjdO<*u82sf$x_YP*bbtt{7E@h5UHGAD>JqJ$*XIP5McJBT2mQQ(r80p z;aI{_bzc%hptw#~_3ps4$h?)Eb9RHR_dUPNkeVkq7Y+I4c2{+Khxss$>SGy1N!nBa z&)C<5c^bY-R3Eug924uk#nZUrLd~0q-$K(4J5c=>Ef(Wsvmat0)WWPC*X?8)a$!3T z_cWuiBX#_@4hZXg=#m(qSkXENRM>UL`9abWCG$Xo`!s}YRYzU5`lX{p6X&LgA*nc! z2%lfbvF4KHuXx(TWHxHSt9lV}Fxc@_<33%he7@y|m>0(QAYzV{3!*!(6-vpl3VTae zThB*3=!YyZ2L;4k5y`OhdD`xtq_~cgeF9^EJ%_#s;{;Jd49ydwPwRnJsgy(IOjBodKWe|s}D5@P0jgX0o4Lu)QBe30nnRmmfa)x&GS` z3JRA&Pu51_#(2oVZXv<5;f5fqjDnF`Lh?1%{$dm9J3g*6%&-o+55wQv-YMX}_|L}k zUklkm%$CbuK#}$at83Nwe#Ox`D>5u=VP9B`EtU{t+#r5$lTp2syoG{zII)Iibr5m z#K_j~c%xtWk~*Oda6$FxjBfgE+5SB{ zxG>r`0ZTk@X*rV1Ji)%y)nYu1F$JCL!kHT7~ zrIJr>`b^fgvYha$j+3g*>_G zsL$Ve6g@x`pf_Dc0o}mQVg5KV);@ilm z{EcFQ>kfYWILgxC*T2W(u0V!jO2C1KG4>|IvbY3GkDUY?0M)IyD= z5mL!28Io`sNkpRq8;}j|Xn++g)>1%dS3zOn!RbbSE^~^GRgjplu>O^EZVh7(g;(*{ zN=GaU3JTn8XV}i2OFT=f(t3d?H1PJW#t|YxY_z&Mv+(fn2ob7)ShKOQabZo(=%(F^ z;*W(bl$l|E(;4Eor_w1pf6GB+=bkGBi%qb~HO7h#efg1=UVjj7nQ^HdU+ya6q5Sos zR?@Y*%E2eGJ@(#Cpbdpq@lOMwOLtjK&8Ly@_T+?xfEhL3(`S#p+@4P(vmARV?@i_; zS1H9T46Q+{fb6NuCUUsH{~Z9|Qx|6j2C_g|!6o#J@9uh?s4Lc6TZ7ip>(5Lztwmmv z@g(#3zro`j$E+LOT27cX_&n<)pin66*Y|1)l^Z`RebxoYVXo%y@0sPA3Z7aP?xaL2 z%hb*_qJocefVN%TdO|=*!$GdrD`)zfkJ-I%Mdzu z%mGlHI663Vno@y$0pmeq(O`ULQ$23j(6F%K z>FJWWxyMtK{gna~3S&zB`eeuqIE9D?Lw~tP!Gd&b0+=qKoQj!JLgi@pL{i|Lc#$CR z!Xa@=p0)2Kzs~ zAa$u8U;-Cz{4+nN^h*6pr{2NJCXyrR2`T=l=`RN`{F5 From 0cd9a555cde12ea9bc2e1343513521dbdef68a1f Mon Sep 17 00:00:00 2001 From: shazbot194 Date: Wed, 23 Nov 2016 02:31:42 -0900 Subject: [PATCH 082/193] Fixing my error It apears the code I am using is a little old and didn't have a fix fox made. --- code/modules/paperwork/paper.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 74bde6b7330..f0af50d8d9e 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -19,7 +19,6 @@ burn_state = FLAMMABLE burntime = 5 attack_verb = list("bapped") - item_state = "paper" var/info //What's actually written on the paper. var/info_links //A different version of the paper which includes html links at fields and EOF From 95ad4cc940c2c53c041daf82b8f790d894410cfe Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 23 Nov 2016 16:22:18 -0500 Subject: [PATCH 083/193] Automatic changelog generation for PR #5897 [ci skip] --- html/changelogs/AutoChangeLog-pr-5897.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5897.yml diff --git a/html/changelogs/AutoChangeLog-pr-5897.yml b/html/changelogs/AutoChangeLog-pr-5897.yml new file mode 100644 index 00000000000..6f5b8e794c8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5897.yml @@ -0,0 +1,4 @@ +author: "FlattestNerd" +delete-after: True +changes: + - tweak: "the e20 will now get logged when it goes BEWM, as it should." From d15c8b6394d21a3a12eadf6f26b45d73b990713a Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 23 Nov 2016 16:28:29 -0500 Subject: [PATCH 084/193] Automatic changelog generation for PR #5781 [ci skip] --- html/changelogs/AutoChangeLog-pr-5781.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5781.yml diff --git a/html/changelogs/AutoChangeLog-pr-5781.yml b/html/changelogs/AutoChangeLog-pr-5781.yml new file mode 100644 index 00000000000..629f9c84e50 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5781.yml @@ -0,0 +1,4 @@ +author: "Fethas" +delete-after: True +changes: + - bugfix: "Fixes human jetpacks..maybe..." From 995941d00694a52a585d068c844768ad196f649c Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 23 Nov 2016 17:00:08 -0500 Subject: [PATCH 085/193] Automatic changelog compile, [ci skip] --- html/changelog.html | 8 ++++++++ html/changelogs/.all_changelog.yml | 4 ++++ html/changelogs/AutoChangeLog-pr-5781.yml | 4 ---- html/changelogs/AutoChangeLog-pr-5897.yml | 4 ---- 4 files changed, 12 insertions(+), 8 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5781.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-5897.yml diff --git a/html/changelog.html b/html/changelog.html index 115f8a93752..e97bc64d845 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,14 @@ -->

23 November 2016

+

Fethas updated:

+
    +
  • Fixes human jetpacks..maybe...
  • +
+

FlattestNerd updated:

+
    +
  • the e20 will now get logged when it goes BEWM, as it should.
  • +

Fox McCloud updated:

{{:value.name}} ({{:value.assignment}}){{:value.dead ? "Deceased" : "Living"}} ({{:value.oxy}}/{{:value.tox}}/{{:value.fire}}/{{:value.brute}})Not Available{{:helper.link('Track', null, {}, 'disabled')}}
{{:value.name}} ({{:value.assignment}}){{:value.dead ? "Deceased" : "Living"}} ({{:value.oxy}}/{{:value.tox}}/{{:value.fire}}/{{:value.brute}}){{:value.area}}({{:value.x}}, {{:value.y}}){{:helper.link('Track', null, {'track' : value.reference})}}
{{:value.name}} ({{:value.assignment}}){{:value.dead ? "Deceased" : "Living"}} ({{:value.oxy}}/{{:value.tox}}/{{:value.fire}}/{{:value.brute}}){{:value.area}}({{:value.x}}, {{:value.y}}){{:helper.link('Track', null, {'track' : value.ref})}}
\ No newline at end of file From 21f0f745d785562f0d536e7a1bf790e0b55b24d6 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 6 Dec 2016 17:50:10 -0500 Subject: [PATCH 141/193] Automatic changelog generation for PR #5958 [ci skip] --- html/changelogs/AutoChangeLog-pr-5958.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5958.yml diff --git a/html/changelogs/AutoChangeLog-pr-5958.yml b/html/changelogs/AutoChangeLog-pr-5958.yml new file mode 100644 index 00000000000..7cc2cf05875 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5958.yml @@ -0,0 +1,5 @@ +author: "Markolie" +delete-after: True +changes: + - bugfix: "The track button on the AI crew monitor now works." + - bugfix: "Permanent door electrification by alt-clicking a door as an AI or setting it manually now works again." From 3933cb884ff3aaafac7815b666cc6405b9d85f79 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 6 Dec 2016 18:00:12 -0500 Subject: [PATCH 142/193] Automatic changelog compile, [ci skip] --- html/changelog.html | 7 +++++++ html/changelogs/.all_changelog.yml | 5 +++++ html/changelogs/AutoChangeLog-pr-5958.yml | 5 ----- 3 files changed, 12 insertions(+), 5 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5958.yml diff --git a/html/changelog.html b/html/changelog.html index 549ebcdccca..aaecde3bc11 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,13 @@ -->
+

06 December 2016

+

Markolie updated:

+
    +
  • The track button on the AI crew monitor now works.
  • +
  • Permanent door electrification by alt-clicking a door as an AI or setting it manually now works again.
  • +
+

05 December 2016

KasparoVy updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 6ee4b5b32e0..781a18d0ea8 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3139,3 +3139,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. KasparoVy: - bugfix: Resolves an issue where cloned vampires could no longer drain blood, burn in the chapel or use their powers properly. +2016-12-06: + Markolie: + - bugfix: The track button on the AI crew monitor now works. + - bugfix: Permanent door electrification by alt-clicking a door as an AI or setting + it manually now works again. diff --git a/html/changelogs/AutoChangeLog-pr-5958.yml b/html/changelogs/AutoChangeLog-pr-5958.yml deleted file mode 100644 index 7cc2cf05875..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5958.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Markolie" -delete-after: True -changes: - - bugfix: "The track button on the AI crew monitor now works." - - bugfix: "Permanent door electrification by alt-clicking a door as an AI or setting it manually now works again." From c093b0e4887e22f75a7a71774ba7e5a06d1c7791 Mon Sep 17 00:00:00 2001 From: Markolie Date: Wed, 7 Dec 2016 07:50:34 +0100 Subject: [PATCH 143/193] Fix incorrect OOC reference --- code/game/gamemodes/gameticker.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 328facd08c6..7e4dd5e9182 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -414,7 +414,7 @@ var/round_start_time = 0 var/dat dat += {"Karma Reminder

    Karma Reminder


    You have not yet spent your karma for the round, surely there is a player who was worthy of receiving
    - your reward? Look under 'OOC' for the 'Award Karma' button, and use it once a round for best results!"} + your reward? Look under 'Karma' for the 'Award Karma' button, and use it once a round for best results!"} player << browse(dat, "window=karmareminder;size=400x300") From b1a4195b4054125cdec46ce282dc1ee3ca622007 Mon Sep 17 00:00:00 2001 From: Markolie Date: Wed, 7 Dec 2016 07:53:20 +0100 Subject: [PATCH 144/193] Fix up \ref's --- code/__DEFINES/admin.dm | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 2efab1b9132..0397b5bcdde 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -45,16 +45,16 @@ #define R_HOST 65535 -#define ADMIN_QUE(user) "(?)" -#define ADMIN_FLW(user) "(FLW)" -#define ADMIN_PP(user) "(PP)" -#define ADMIN_VV(atom) "(VV)" -#define ADMIN_SM(user) "(SM)" -#define ADMIN_TP(user) "(TP)" -#define ADMIN_BSA(user) "(BSA)" -#define ADMIN_CENTCOM_REPLY(user) "(RPLY)" -#define ADMIN_SYNDICATE_REPLY(user) "(RPLY)" -#define ADMIN_SC(user) "(SC)" +#define ADMIN_QUE(user) "(?)" +#define ADMIN_FLW(user) "(FLW)" +#define ADMIN_PP(user) "(PP)" +#define ADMIN_VV(atom) "(VV)" +#define ADMIN_SM(user) "(SM)" +#define ADMIN_TP(user) "(TP)" +#define ADMIN_BSA(user) "(BSA)" +#define ADMIN_CENTCOM_REPLY(user) "(RPLY)" +#define ADMIN_SYNDICATE_REPLY(user) "(RPLY)" +#define ADMIN_SC(user) "(SC)" #define ADMIN_LOOKUP(user) "[key_name_admin(user)][ADMIN_QUE(user)]" #define ADMIN_LOOKUPFLW(user) "[key_name_admin(user)][ADMIN_QUE(user)] [ADMIN_FLW(user)]" #define ADMIN_FULLMONTY(user) "[key_name_admin(user)] [ADMIN_QUE(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_FLW(user)] [ADMIN_TP(user)]" From a2bde2d187c9ddfdf303d03956fe749863c45e05 Mon Sep 17 00:00:00 2001 From: TullyBurnalot Date: Wed, 7 Dec 2016 10:51:43 +0000 Subject: [PATCH 145/193] Mining Vendor no longer gobbles up IDs - When unpowered, Mining Vendors no longer accept IDs --- code/modules/mining/equipment_locker.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 56f71c94cb9..d59688d53b4 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -437,6 +437,8 @@ return /obj/machinery/mineral/equipment_vendor/attackby(obj/item/I as obj, mob/user as mob, params) + if(!powered()) + return if(istype(I, /obj/item/weapon/mining_voucher)) RedeemVoucher(I, user) return From d865b601d8ff57e226935b993526665c9ec2bc86 Mon Sep 17 00:00:00 2001 From: TullyBurnalot Date: Wed, 7 Dec 2016 11:17:34 +0000 Subject: [PATCH 146/193] Unpowered Mining Machine Deconstruction - Both the Mining Vendor and the ORM can now be deconstructed when unpowered --- code/modules/mining/equipment_locker.dm | 43 +++++++++++-------------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index d59688d53b4..74d2fde901b 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -105,6 +105,18 @@ i++ /obj/machinery/mineral/ore_redemption/attackby(var/obj/item/weapon/W, var/mob/user, params) + if(default_deconstruction_screwdriver(user, "ore_redemption-open", "ore_redemption", W)) + updateUsrDialog() + return + if(exchange_parts(user, W)) + return + if(panel_open) + if(istype(W, /obj/item/weapon/crowbar)) + empty_content() + default_deconstruction_crowbar(W) + return + if(default_unfasten_wrench(user, W)) + return if(!powered()) return if(istype(W,/obj/item/weapon/card/id)) @@ -116,23 +128,6 @@ inserted_id = I interact(user) return - - if(default_deconstruction_screwdriver(user, "ore_redemption-open", "ore_redemption", W)) - updateUsrDialog() - return - - if(exchange_parts(user, W)) - return - - if(panel_open) - if(istype(W, /obj/item/weapon/crowbar)) - empty_content() - default_deconstruction_crowbar(W) - return - - if(default_unfasten_wrench(user, W)) - return - ..() /obj/machinery/mineral/ore_redemption/proc/SmeltMineral(var/obj/item/weapon/ore/O) @@ -437,6 +432,13 @@ return /obj/machinery/mineral/equipment_vendor/attackby(obj/item/I as obj, mob/user as mob, params) + if(default_deconstruction_screwdriver(user, "mining-open", "mining", I)) + updateUsrDialog() + return + if(panel_open) + if(istype(I, /obj/item/weapon/crowbar)) + default_deconstruction_crowbar(I) + return 1 if(!powered()) return if(istype(I, /obj/item/weapon/mining_voucher)) @@ -451,13 +453,6 @@ inserted_id = C interact(user) return - if(default_deconstruction_screwdriver(user, "mining-open", "mining", I)) - updateUsrDialog() - return - if(panel_open) - if(istype(I, /obj/item/weapon/crowbar)) - default_deconstruction_crowbar(I) - return 1 ..() /obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/weapon/mining_voucher/voucher, mob/redeemer) From e23b10081ee4e4fc35defe28ff2975abfce4d20d Mon Sep 17 00:00:00 2001 From: TullyBurnalot Date: Wed, 7 Dec 2016 12:45:57 +0000 Subject: [PATCH 147/193] Maintanability of powered checks - Powered check no longer blanket bans everything but deconstruction --- code/modules/mining/equipment_locker.dm | 49 ++++++++++++++----------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 74d2fde901b..c8eb4a8db1b 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -117,17 +117,18 @@ return if(default_unfasten_wrench(user, W)) return - if(!powered()) - return if(istype(W,/obj/item/weapon/card/id)) - var/obj/item/weapon/card/id/I = usr.get_active_hand() - if(istype(I) && !istype(inserted_id)) - if(!user.drop_item()) - return - I.loc = src - inserted_id = I - interact(user) - return + if(!powered()) + return + else + var/obj/item/weapon/card/id/I = usr.get_active_hand() + if(istype(I) && !istype(inserted_id)) + if(!user.drop_item()) + return + I.loc = src + inserted_id = I + interact(user) + return ..() /obj/machinery/mineral/ore_redemption/proc/SmeltMineral(var/obj/item/weapon/ore/O) @@ -439,20 +440,24 @@ if(istype(I, /obj/item/weapon/crowbar)) default_deconstruction_crowbar(I) return 1 - if(!powered()) - return if(istype(I, /obj/item/weapon/mining_voucher)) - RedeemVoucher(I, user) - return + if(!powered()) + return + else + RedeemVoucher(I, user) + return if(istype(I,/obj/item/weapon/card/id)) - var/obj/item/weapon/card/id/C = usr.get_active_hand() - if(istype(C) && !istype(inserted_id)) - if(!usr.drop_item()) - return - C.loc = src - inserted_id = C - interact(user) - return + if(!powered()) + return + else + var/obj/item/weapon/card/id/C = usr.get_active_hand() + if(istype(C) && !istype(inserted_id)) + if(!usr.drop_item()) + return + C.loc = src + inserted_id = C + interact(user) + return ..() /obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/weapon/mining_voucher/voucher, mob/redeemer) From 88946a0b77cf5a8999ed5ad2df6e1aa9bb2fc447 Mon Sep 17 00:00:00 2001 From: Markolie Date: Wed, 7 Dec 2016 16:52:10 +0100 Subject: [PATCH 148/193] Switching karma back to the "OOC" tab --- code/game/gamemodes/gameticker.dm | 2 +- code/modules/karma/karma.dm | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 7e4dd5e9182..328facd08c6 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -414,7 +414,7 @@ var/round_start_time = 0 var/dat dat += {"Karma Reminder

    Karma Reminder


    You have not yet spent your karma for the round, surely there is a player who was worthy of receiving
    - your reward? Look under 'Karma' for the 'Award Karma' button, and use it once a round for best results!"} + your reward? Look under 'OOC' for the 'Award Karma' button, and use it once a round for best results!"} player << browse(dat, "window=karmareminder;size=400x300") diff --git a/code/modules/karma/karma.dm b/code/modules/karma/karma.dm index bbb663064fe..bdd73533c82 100644 --- a/code/modules/karma/karma.dm +++ b/code/modules/karma/karma.dm @@ -84,7 +84,7 @@ var/list/karma_spenders = list() /mob/verb/spend_karma_list() set name = "Award Karma" set desc = "Let the gods know whether someone's been nice. Can only be used once per round." - set category = "Karma" + set category = "OOC" if(!can_give_karma()) return @@ -113,7 +113,7 @@ var/list/karma_spenders = list() /mob/verb/spend_karma(var/mob/M) set name = "Award Karma to Player" set desc = "Let the gods know whether someone's been nice. Can only be used once per round." - set category = "Karma" + set category = "OOC" if(!M) to_chat(usr, "Please right click a mob to award karma directly, or use the 'Award Karma' verb to select a player from the player listing.") @@ -145,7 +145,7 @@ var/list/karma_spenders = list() /client/verb/check_karma() set name = "Check Karma" set desc = "Reports how much karma you have accrued." - set category = "Karma" + set category = "OOC" var/currentkarma=verify_karma() to_chat(usr, {"
    You have [currentkarma] available."}) From ec574a418b66560c40c31c95930cf2763d8c23e2 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 7 Dec 2016 12:33:37 -0500 Subject: [PATCH 149/193] Automatic changelog generation for PR #5858 [ci skip] --- html/changelogs/AutoChangeLog-pr-5858.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5858.yml diff --git a/html/changelogs/AutoChangeLog-pr-5858.yml b/html/changelogs/AutoChangeLog-pr-5858.yml new file mode 100644 index 00000000000..02b79cefb06 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5858.yml @@ -0,0 +1,4 @@ +author: "Markolie" +delete-after: True +changes: + - tweak: "Verbs have been cleaned up: all karma verbs can now be found under \"OOC\" instead of \"Special Verbs\". Most admin verbs have been moved out of \"Special Verbs\" as well." From 1afdfe3933396edb1a70874cb309929316321b80 Mon Sep 17 00:00:00 2001 From: TullyBurnalot Date: Wed, 7 Dec 2016 18:03:45 +0000 Subject: [PATCH 150/193] Adresses the forceMove(src) - See above title --- code/modules/mining/equipment_locker.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index c8eb4a8db1b..fb98f3a8c15 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -125,7 +125,7 @@ if(istype(I) && !istype(inserted_id)) if(!user.drop_item()) return - I.loc = src + I.forceMove(src) inserted_id = I interact(user) return @@ -454,7 +454,7 @@ if(istype(C) && !istype(inserted_id)) if(!usr.drop_item()) return - C.loc = src + C.forceMove(src) inserted_id = C interact(user) return From 89fa3555e8fc98dc06475588756a62e381a4f078 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 7 Dec 2016 13:10:04 -0500 Subject: [PATCH 151/193] Automatic changelog generation for PR #5960 [ci skip] --- html/changelogs/AutoChangeLog-pr-5960.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5960.yml diff --git a/html/changelogs/AutoChangeLog-pr-5960.yml b/html/changelogs/AutoChangeLog-pr-5960.yml new file mode 100644 index 00000000000..8acaa4d75bf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5960.yml @@ -0,0 +1,5 @@ +author: "TullyBurnalot" +delete-after: True +changes: + - bugfix: "Unpowered Mining Vendors no longer accept IDs" + - bugfix: "Ore Redemption Machine and Mining Vendor can now be deconstructed if unpowered" From 11130bcb70ab5f92f18a35f11336111dac743baf Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 7 Dec 2016 13:13:00 -0500 Subject: [PATCH 152/193] Automatic changelog compile, [ci skip] --- html/changelog.html | 11 +++++++++++ html/changelogs/.all_changelog.yml | 8 ++++++++ html/changelogs/AutoChangeLog-pr-5858.yml | 4 ---- html/changelogs/AutoChangeLog-pr-5960.yml | 5 ----- 4 files changed, 19 insertions(+), 9 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5858.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-5960.yml diff --git a/html/changelog.html b/html/changelog.html index aaecde3bc11..ce12ceec7be 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,17 @@ -->
    +

    07 December 2016

    +

    Markolie updated:

    +
      +
    • Verbs have been cleaned up: all karma verbs can now be found under "OOC" instead of "Special Verbs". Most admin verbs have been moved out of "Special Verbs" as well.
    • +
    +

    TullyBurnalot updated:

    +
      +
    • Unpowered Mining Vendors no longer accept IDs
    • +
    • Ore Redemption Machine and Mining Vendor can now be deconstructed if unpowered
    • +
    +

    06 December 2016

    Markolie updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 781a18d0ea8..a4290989c94 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3144,3 +3144,11 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: The track button on the AI crew monitor now works. - bugfix: Permanent door electrification by alt-clicking a door as an AI or setting it manually now works again. +2016-12-07: + Markolie: + - tweak: 'Verbs have been cleaned up: all karma verbs can now be found under "OOC" + instead of "Special Verbs". Most admin verbs have been moved out of "Special + Verbs" as well.' + TullyBurnalot: + - bugfix: Unpowered Mining Vendors no longer accept IDs + - bugfix: Ore Redemption Machine and Mining Vendor can now be deconstructed if unpowered diff --git a/html/changelogs/AutoChangeLog-pr-5858.yml b/html/changelogs/AutoChangeLog-pr-5858.yml deleted file mode 100644 index 02b79cefb06..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5858.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Markolie" -delete-after: True -changes: - - tweak: "Verbs have been cleaned up: all karma verbs can now be found under \"OOC\" instead of \"Special Verbs\". Most admin verbs have been moved out of \"Special Verbs\" as well." diff --git a/html/changelogs/AutoChangeLog-pr-5960.yml b/html/changelogs/AutoChangeLog-pr-5960.yml deleted file mode 100644 index 8acaa4d75bf..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5960.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "TullyBurnalot" -delete-after: True -changes: - - bugfix: "Unpowered Mining Vendors no longer accept IDs" - - bugfix: "Ore Redemption Machine and Mining Vendor can now be deconstructed if unpowered" From b22c97293abb2c9211468827d7a5516d0e407231 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Tue, 6 Dec 2016 02:47:31 -0500 Subject: [PATCH 153/193] Refines Cloning, Fixes a Couple Genetics-related Bugs. Characters will now be correctly assigned their species' genetic quirks at spawn. Cloning will now correctly assign a characters species' genetic quirks. Changing a character's species (via C.M.A. or whatever might call the set_species proc) will now correctly assign their species' genetic quirks. --- code/game/dna/genes/goon_powers.dm | 2 +- code/game/machinery/cloning.dm | 29 ++++----- code/modules/client/preference/preferences.dm | 63 ++++++++++--------- code/modules/mob/living/carbon/human/human.dm | 1 + 4 files changed, 49 insertions(+), 46 deletions(-) diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm index 1ada7c0f5ac..36c9af1c48c 100644 --- a/code/game/dna/genes/goon_powers.dm +++ b/code/game/dna/genes/goon_powers.dm @@ -619,7 +619,7 @@ numbers += H.mind.initial_account.account_number numbers += H.mind.initial_account.remote_access_pin if(numbers.len>0) - to_chat(usr, "b>Numbers: You sense the number[numbers.len>1?"s":""] [english_list(numbers)] [numbers.len>1?"are":"is"] important to [M.name].") + to_chat(usr, "Numbers: You sense the number[numbers.len>1?"s":""] [english_list(numbers)] [numbers.len>1?"are":"is"] important to [M.name].") to_chat(usr, "Thoughts: [M.name] is currently [thoughts].") if(EMPATH in M.mutations) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 0cc1e8a0afe..0e0eaaf6985 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -205,7 +205,7 @@ clonemind = locate(R.mind) if(!istype(clonemind)) //not a mind return 0 - if( clonemind.current && clonemind.current.stat != DEAD ) //mind is associated with a non-dead body + if(clonemind.current && clonemind.current.stat != DEAD) //mind is associated with a non-dead body return 0 if(clonemind.active) //somebody is using that mind if(ckey(clonemind.key) != R.ckey) @@ -229,12 +229,21 @@ spawn(30) eject_wait = 0 + if(!R.dna) + R.dna = new /datum/dna() + var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species) occupant = H if(!R.dna.real_name) //to prevent null names - R.dna.real_name = "clone ([rand(0,999)])" - H.real_name = R.dna.real_name + R.dna.real_name = H.real_name + else + H.real_name = R.dna.real_name + + H.dna = R.dna.Clone() + + for(var/datum/language/L in R.languages) + H.add_language(L.name) //Get the clone body ready H.adjustCloneLoss(190) //new damage var so you can't eject a clone early then stab them to abuse the current damage system --NeoFite @@ -256,31 +265,23 @@ beginning to regenerate in a cloning pod. You will become conscious when it is complete."}) - if(!R.dna) - H.dna = new /datum/dna() - H.dna.real_name = H.real_name - H.dna.ready_dna(H) - else - H.dna = R.dna.Clone() + domutcheck(H, null, MUTCHK_FORCED) //Ensures species that get powers by the species proc handle_dna keep them + if(efficiency > 2 && efficiency < 5 && prob(25)) randmutb(H) if(efficiency > 5 && prob(20)) randmutg(H) if(efficiency < 3 && prob(50)) randmutb(H) + H.dna.UpdateSE() H.dna.UpdateUI() - H.set_species(R.dna.species) H.sync_organ_dna(1) // It's literally a fresh body as you can get, so all organs properly belong to it H.UpdateAppearance() - H.update_body() update_icon() - for(var/datum/language/L in R.languages) - H.add_language(L.name) - H.suiciding = 0 attempting = 0 return 1 diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 6414cdde907..b86728b0564 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -2099,37 +2099,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts I.robotize() character.dna.b_type = b_type - if(disabilities & DISABILITY_FLAG_FAT && character.species.flags & CAN_BE_FAT) - character.dna.SetSEState(FATBLOCK,1,1) - character.mutations += FAT - character.mutations += OBESITY - character.overeatduration = 600 - - if(disabilities & DISABILITY_FLAG_NEARSIGHTED) - character.dna.SetSEState(GLASSESBLOCK,1,1) - character.disabilities|=NEARSIGHTED - - if(disabilities & DISABILITY_FLAG_EPILEPTIC) - character.dna.SetSEState(EPILEPSYBLOCK,1,1) - character.disabilities|=EPILEPSY - - if(disabilities & DISABILITY_FLAG_DEAF) - character.dna.SetSEState(DEAFBLOCK,1,1) - character.disabilities|=DEAF - - if(disabilities & DISABILITY_FLAG_BLIND) - character.dna.SetSEState(BLINDBLOCK,1,1) - character.disabilities|=BLIND - - if(disabilities & DISABILITY_FLAG_MUTE) - character.dna.SetSEState(MUTEBLOCK,1,1) - character.disabilities |= MUTE - - S.handle_dna(character) - - if(character.dna.dirtySE) - character.dna.UpdateSE() - domutcheck(character) // Wheelchair necessary? var/obj/item/organ/external/l_foot = character.get_organ("l_foot") @@ -2170,6 +2139,38 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts character.change_eye_color(r_eyes, g_eyes, b_eyes) + if(disabilities & DISABILITY_FLAG_FAT && character.species.flags & CAN_BE_FAT) + character.dna.SetSEState(FATBLOCK,1,1) + character.mutations += FAT + character.mutations += OBESITY + character.overeatduration = 600 + + if(disabilities & DISABILITY_FLAG_NEARSIGHTED) + character.dna.SetSEState(GLASSESBLOCK,1,1) + character.disabilities |= NEARSIGHTED + + if(disabilities & DISABILITY_FLAG_EPILEPTIC) + character.dna.SetSEState(EPILEPSYBLOCK,1,1) + character.disabilities |= EPILEPSY + + if(disabilities & DISABILITY_FLAG_DEAF) + character.dna.SetSEState(DEAFBLOCK,1,1) + character.disabilities |= DEAF + + if(disabilities & DISABILITY_FLAG_BLIND) + character.dna.SetSEState(BLINDBLOCK,1,1) + character.disabilities |= BLIND + + if(disabilities & DISABILITY_FLAG_MUTE) + character.dna.SetSEState(MUTEBLOCK,1,1) + character.disabilities |= MUTE + + S.handle_dna(character) + + if(character.dna.dirtySE) + character.dna.UpdateSE() + domutcheck(character, null, MUTCHK_FORCED) + character.dna.ready_dna(character, flatten_SE = 0) character.sync_organ_dna(assimilate=1) character.UpdateAppearance() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 170673d2395..98d82ac2da9 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1594,6 +1594,7 @@ dna.real_name = real_name species.handle_post_spawn(src) + species.handle_dna(src) //Give them whatever special dna business they got. spawn(0) overlays.Cut() From 39a8d9e1491f90065c496d10030d8ff9de96af4f Mon Sep 17 00:00:00 2001 From: Alffd Date: Thu, 8 Dec 2016 22:38:54 -0500 Subject: [PATCH 154/193] Changelog fixes Adds missing changelog entries. --- html/changelogs/AutoChangeLog-pr-5938.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5938.yml diff --git a/html/changelogs/AutoChangeLog-pr-5938.yml b/html/changelogs/AutoChangeLog-pr-5938.yml new file mode 100644 index 00000000000..82fff3a552d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5938.yml @@ -0,0 +1,8 @@ +author: "Kyep" +delete-after: True +changes: + - bugfix: Ensures cryo pods will properly auto-eject people whose organic parts (limbs) have been healed, but who still have damaged mechanical limbs. + - bugfix: Disabler shots no longer damage mechs. + - bugfix: On impact, both taser and disabler shots now produce a message saying that the mech is undamaged by them, instead of a message saying they 'hit'. + - bugfix: Fixed runtimes created when SIT, ERT, and some other mobs are spawned. + - bugfix: Fixed a bug causing SITs to be spawned with one less person than desired in some cases. From cd71a83dec31a1cea9fba707f9b44605596ef2b1 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Thu, 8 Dec 2016 23:00:11 -0500 Subject: [PATCH 155/193] Automatic changelog compile, [ci skip] --- html/changelog.html | 10 ++++++++++ html/changelogs/.all_changelog.yml | 10 ++++++++++ html/changelogs/AutoChangeLog-pr-5938.yml | 8 -------- 3 files changed, 20 insertions(+), 8 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5938.yml diff --git a/html/changelog.html b/html/changelog.html index ce12ceec7be..9b4d1d8e268 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,16 @@ -->
      +

      08 December 2016

      +

      Kyep updated:

      +
        +
      • Ensures cryo pods will properly auto-eject people whose organic parts (limbs) have been healed, but who still have damaged mechanical limbs.
      • +
      • Disabler shots no longer damage mechs.
      • +
      • On impact, both taser and disabler shots now produce a message saying that the mech is undamaged by them, instead of a message saying they 'hit'.
      • +
      • Fixed runtimes created when SIT, ERT, and some other mobs are spawned.
      • +
      • Fixed a bug causing SITs to be spawned with one less person than desired in some cases.
      • +
      +

      07 December 2016

      Markolie updated:

        diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index a4290989c94..9ce1bbab711 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3152,3 +3152,13 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. TullyBurnalot: - bugfix: Unpowered Mining Vendors no longer accept IDs - bugfix: Ore Redemption Machine and Mining Vendor can now be deconstructed if unpowered +2016-12-08: + Kyep: + - bugfix: Ensures cryo pods will properly auto-eject people whose organic parts + (limbs) have been healed, but who still have damaged mechanical limbs. + - bugfix: Disabler shots no longer damage mechs. + - bugfix: On impact, both taser and disabler shots now produce a message saying + that the mech is undamaged by them, instead of a message saying they 'hit'. + - bugfix: Fixed runtimes created when SIT, ERT, and some other mobs are spawned. + - bugfix: Fixed a bug causing SITs to be spawned with one less person than desired + in some cases. diff --git a/html/changelogs/AutoChangeLog-pr-5938.yml b/html/changelogs/AutoChangeLog-pr-5938.yml deleted file mode 100644 index 82fff3a552d..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5938.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "Kyep" -delete-after: True -changes: - - bugfix: Ensures cryo pods will properly auto-eject people whose organic parts (limbs) have been healed, but who still have damaged mechanical limbs. - - bugfix: Disabler shots no longer damage mechs. - - bugfix: On impact, both taser and disabler shots now produce a message saying that the mech is undamaged by them, instead of a message saying they 'hit'. - - bugfix: Fixed runtimes created when SIT, ERT, and some other mobs are spawned. - - bugfix: Fixed a bug causing SITs to be spawned with one less person than desired in some cases. From 5d93968b3563f6fb28d7bb9b52d2ca49e248c91d Mon Sep 17 00:00:00 2001 From: TullyBurnalot Date: Fri, 9 Dec 2016 22:19:03 +0000 Subject: [PATCH 156/193] Fixes self-propelled throwing - Throwing mobs over your back no longer pushes you as well; they just helpfully teleport over you --- code/modules/mob/living/carbon/carbon.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index f62df2ab76b..76946fbe00b 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -537,6 +537,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, thrown_thing = throwable_mob var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors var/turf/end_T = get_turf(target) + throwable_mob.forceMove(start_T) if(start_T && end_T) var/start_T_descriptor = "tile at [start_T.x], [start_T.y], [start_T.z] in area [get_area(start_T)]" var/end_T_descriptor = "tile at [end_T.x], [end_T.y], [end_T.z] in area [get_area(end_T)]" From b25f3c045262cdfa16dca5d652c7e0462437a1af Mon Sep 17 00:00:00 2001 From: TullyBurnalot Date: Fri, 9 Dec 2016 23:19:24 +0000 Subject: [PATCH 157/193] Medbot Buckle Certification - Medbots no longer move automatically if buckled --- code/modules/mob/living/simple_animal/bot/medbot.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index df3ae448cf6..ad938b29b5d 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -26,6 +26,7 @@ var/mob/living/carbon/oldpatient = null var/oldloc = null var/last_found = 0 + var/last_warning = 0 var/last_newpatient_speak = 0 //Don't spam the "HEY I'M COMING" messages var/injection_amount = 15 //How much reagent do we inject at a time? var/heal_threshold = 10 //Start healing when they have this much damage in a category @@ -253,6 +254,13 @@ oldpatient = user /mob/living/simple_animal/bot/medbot/process_scan(mob/living/carbon/human/H) + if(buckled) + if((last_warning + 300) < world.time) + var/message = ("Movement restrained! Unit on standby!") + speak(message) + playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0) + last_warning = world.time + return if(H.stat == 2) return From 6488d869bae6ffe31baf77784c1d03f9d62d4af4 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 9 Dec 2016 18:22:27 -0500 Subject: [PATCH 158/193] Automatic changelog generation for PR #5879 [ci skip] --- html/changelogs/AutoChangeLog-pr-5879.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5879.yml diff --git a/html/changelogs/AutoChangeLog-pr-5879.yml b/html/changelogs/AutoChangeLog-pr-5879.yml new file mode 100644 index 00000000000..e2c9ab9cfcb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5879.yml @@ -0,0 +1,6 @@ +author: "KasparoVy" +delete-after: True +changes: + - rscadd: "You can now define whether a hair style will cover glasses or not. Only long hair styles should cover glasses (default behaviour)." + - rscadd: "You can now define whether a facial hair style/head accessory will be rendered on top of hair or not." + - bugfix: "Glasses no longer render on top of all hair styles, only sufficiently short ones." From e19266a89b64cb9292b6c5cda733e603195886d4 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 9 Dec 2016 19:00:11 -0500 Subject: [PATCH 159/193] Automatic changelog compile, [ci skip] --- html/changelog.html | 8 ++++++++ html/changelogs/.all_changelog.yml | 8 ++++++++ html/changelogs/AutoChangeLog-pr-5879.yml | 6 ------ 3 files changed, 16 insertions(+), 6 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5879.yml diff --git a/html/changelog.html b/html/changelog.html index 9b4d1d8e268..5f7d8607c83 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,14 @@ -->
        +

        09 December 2016

        +

        KasparoVy updated:

        +
          +
        • You can now define whether a hair style will cover glasses or not. Only long hair styles should cover glasses (default behaviour).
        • +
        • You can now define whether a facial hair style/head accessory will be rendered on top of hair or not.
        • +
        • Glasses no longer render on top of all hair styles, only sufficiently short ones.
        • +
        +

        08 December 2016

        Kyep updated:

          diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 9ce1bbab711..a3b6a5c8aea 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3162,3 +3162,11 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Fixed runtimes created when SIT, ERT, and some other mobs are spawned. - bugfix: Fixed a bug causing SITs to be spawned with one less person than desired in some cases. +2016-12-09: + KasparoVy: + - rscadd: You can now define whether a hair style will cover glasses or not. Only + long hair styles should cover glasses (default behaviour). + - rscadd: You can now define whether a facial hair style/head accessory will be + rendered on top of hair or not. + - bugfix: Glasses no longer render on top of all hair styles, only sufficiently + short ones. diff --git a/html/changelogs/AutoChangeLog-pr-5879.yml b/html/changelogs/AutoChangeLog-pr-5879.yml deleted file mode 100644 index e2c9ab9cfcb..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5879.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "KasparoVy" -delete-after: True -changes: - - rscadd: "You can now define whether a hair style will cover glasses or not. Only long hair styles should cover glasses (default behaviour)." - - rscadd: "You can now define whether a facial hair style/head accessory will be rendered on top of hair or not." - - bugfix: "Glasses no longer render on top of all hair styles, only sufficiently short ones." From 440d9fa3f2b680e4b46c9c2d73ae433937a910d3 Mon Sep 17 00:00:00 2001 From: Kyep Date: Fri, 9 Dec 2016 23:10:28 -0800 Subject: [PATCH 160/193] Fixes xenomorph walls taking damage from disablers --- code/game/objects/effects/aliens.dm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 3c1a16787c0..d7086b53ccc 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -79,9 +79,12 @@ /obj/structure/alien/resin/bullet_act(obj/item/projectile/Proj) - health -= Proj.damage - ..() - healthcheck() + if(Proj.damage_type != BRUTE && Proj.damage_type != BURN) + ..() + else + health -= Proj.damage + ..() + healthcheck() /obj/structure/alien/resin/ex_act(severity) From 49956eb241be7bf665eaa99dc8b409912c6a3861 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 10 Dec 2016 16:57:52 -0800 Subject: [PATCH 161/193] Tiger request --- code/game/objects/effects/aliens.dm | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index d7086b53ccc..106c451ca09 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -79,12 +79,10 @@ /obj/structure/alien/resin/bullet_act(obj/item/projectile/Proj) - if(Proj.damage_type != BRUTE && Proj.damage_type != BURN) - ..() - else + if(Proj.damage_type == BRUTE || Proj.damage_type == BURN) health -= Proj.damage - ..() - healthcheck() + ..() + healthcheck() /obj/structure/alien/resin/ex_act(severity) From 322e2e16bf34e126bf8ed54e3144c43ea8093646 Mon Sep 17 00:00:00 2001 From: Jonas Date: Mon, 12 Dec 2016 13:45:38 +0100 Subject: [PATCH 162/193] No charge-free shooting for pods, take 2 Checks if the charge actually gets deducted from the battery, if not, the pod weapon won't shoot --- code/modules/spacepods/equipment.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/spacepods/equipment.dm b/code/modules/spacepods/equipment.dm index 55342fad0e6..427a6db798a 100644 --- a/code/modules/spacepods/equipment.dm +++ b/code/modules/spacepods/equipment.dm @@ -8,7 +8,9 @@ to_chat(usr, "Missing equipment or weapons.") my_atom.verbs -= text2path("[type]/proc/fire_weapons") return - my_atom.battery.use(shot_cost) + if(!my_atom.battery.use(shot_cost)) + to_chat(usr, "Insufficient charge to fire the weapons") + return var/olddir for(var/i = 0; i < shots_per; i++) if(olddir != my_atom.dir) From 7001b653b7c1caf2d9894811c9740d3fb6af1a37 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Mon, 12 Dec 2016 08:41:46 -0500 Subject: [PATCH 163/193] Automatic changelog generation for PR #5969 [ci skip] --- html/changelogs/AutoChangeLog-pr-5969.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5969.yml diff --git a/html/changelogs/AutoChangeLog-pr-5969.yml b/html/changelogs/AutoChangeLog-pr-5969.yml new file mode 100644 index 00000000000..30ae348901f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5969.yml @@ -0,0 +1,4 @@ +author: "Kyep" +delete-after: True +changes: + - bugfix: "Xenomorph resin walls no longer take damage from disabler beams. Only proper BRUTE or BURN damage hurts them now." From 2955061429c0cc7d2f639c70708d409fa3c18019 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Mon, 12 Dec 2016 17:59:13 -0500 Subject: [PATCH 164/193] Automatic changelog generation for PR #5966 [ci skip] --- html/changelogs/AutoChangeLog-pr-5966.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5966.yml diff --git a/html/changelogs/AutoChangeLog-pr-5966.yml b/html/changelogs/AutoChangeLog-pr-5966.yml new file mode 100644 index 00000000000..3c8c3d8a6f5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5966.yml @@ -0,0 +1,4 @@ +author: "TullyBurnalot" +delete-after: True +changes: + - bugfix: "Throwing mobs behind you force moves them to behind you before actually throwing them, preventing throw-shoving" From 8a7129660d21e88bc87659e30441a8d4b6d739dd Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Mon, 12 Dec 2016 23:00:39 -0500 Subject: [PATCH 165/193] Automatic changelog compile, [ci skip] --- html/changelog.html | 10 ++++++++++ html/changelogs/.all_changelog.yml | 7 +++++++ html/changelogs/AutoChangeLog-pr-5966.yml | 4 ---- html/changelogs/AutoChangeLog-pr-5969.yml | 4 ---- 4 files changed, 17 insertions(+), 8 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5966.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-5969.yml diff --git a/html/changelog.html b/html/changelog.html index 5f7d8607c83..e5b33949b04 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,16 @@ -->
          +

          12 December 2016

          +

          Kyep updated:

          +
            +
          • Xenomorph resin walls no longer take damage from disabler beams. Only proper BRUTE or BURN damage hurts them now.
          • +
          +

          TullyBurnalot updated:

          +
            +
          • Throwing mobs behind you force moves them to behind you before actually throwing them, preventing throw-shoving
          • +
          +

          09 December 2016

          KasparoVy updated:

            diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index a3b6a5c8aea..c50256330ec 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3170,3 +3170,10 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. rendered on top of hair or not. - bugfix: Glasses no longer render on top of all hair styles, only sufficiently short ones. +2016-12-12: + Kyep: + - bugfix: Xenomorph resin walls no longer take damage from disabler beams. Only + proper BRUTE or BURN damage hurts them now. + TullyBurnalot: + - bugfix: Throwing mobs behind you force moves them to behind you before actually + throwing them, preventing throw-shoving diff --git a/html/changelogs/AutoChangeLog-pr-5966.yml b/html/changelogs/AutoChangeLog-pr-5966.yml deleted file mode 100644 index 3c8c3d8a6f5..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5966.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TullyBurnalot" -delete-after: True -changes: - - bugfix: "Throwing mobs behind you force moves them to behind you before actually throwing them, preventing throw-shoving" diff --git a/html/changelogs/AutoChangeLog-pr-5969.yml b/html/changelogs/AutoChangeLog-pr-5969.yml deleted file mode 100644 index 30ae348901f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5969.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Kyep" -delete-after: True -changes: - - bugfix: "Xenomorph resin walls no longer take damage from disabler beams. Only proper BRUTE or BURN damage hurts them now." From f43ad384d1d435fec621d397042d2d3ed452be19 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 13 Dec 2016 09:15:03 -0500 Subject: [PATCH 166/193] Fixes ED-209 Crafting Oversight --- code/modules/crafting/recipes.dm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 6f946146aa4..288dcfcd9c5 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -71,12 +71,11 @@ /obj/item/clothing/suit/armor/vest = 1, /obj/item/robot_parts/l_leg = 1, /obj/item/robot_parts/r_leg = 1, - /obj/item/stack/sheet/metal = 5, - /obj/item/stack/cable_coil = 5, + /obj/item/stack/sheet/metal = 1, + /obj/item/stack/cable_coil = 1, /obj/item/weapon/gun/energy/gun/advtaser = 1, /obj/item/weapon/stock_parts/cell = 1, - /obj/item/device/assembly/prox_sensor = 1, - /obj/item/robot_parts/r_arm = 1) + /obj/item/device/assembly/prox_sensor = 1) tools = list(/obj/item/weapon/weldingtool, /obj/item/weapon/screwdriver) time = 60 category = CAT_ROBOT From 202607acb25844327f7fe4061766685f12a6d3ea Mon Sep 17 00:00:00 2001 From: TullyBurnalot Date: Tue, 13 Dec 2016 15:12:55 +0000 Subject: [PATCH 167/193] Removes copypasta code --- code/modules/mob/living/simple_animal/bot/medbot.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index ad938b29b5d..4eafbf50065 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -256,8 +256,7 @@ /mob/living/simple_animal/bot/medbot/process_scan(mob/living/carbon/human/H) if(buckled) if((last_warning + 300) < world.time) - var/message = ("Movement restrained! Unit on standby!") - speak(message) + speak("Movement restrained! Unit on standby!") playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0) last_warning = world.time return From 1b1049196f916db62be44c20dda85abd55f63739 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 13 Dec 2016 10:38:10 -0500 Subject: [PATCH 168/193] Automatic changelog generation for PR #5967 [ci skip] --- html/changelogs/AutoChangeLog-pr-5967.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5967.yml diff --git a/html/changelogs/AutoChangeLog-pr-5967.yml b/html/changelogs/AutoChangeLog-pr-5967.yml new file mode 100644 index 00000000000..97bcc128cbe --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5967.yml @@ -0,0 +1,4 @@ +author: "TullyBurnalot" +delete-after: True +changes: + - bugfix: "Medbots no longer run after injured mobs if buckled. They also inform nearby players of this" From ac2d26b548c38f01b2292704d3839117b087f2e6 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 13 Dec 2016 11:00:34 -0500 Subject: [PATCH 169/193] Automatic changelog compile, [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 4 ++++ html/changelogs/AutoChangeLog-pr-5967.yml | 4 ---- 3 files changed, 10 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5967.yml diff --git a/html/changelog.html b/html/changelog.html index e5b33949b04..61d50b86cbf 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,12 @@ -->
            +

            13 December 2016

            +

            TullyBurnalot updated:

            +
              +
            • Medbots no longer run after injured mobs if buckled. They also inform nearby players of this
            • +
            +

            12 December 2016

            Kyep updated:

              diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index c50256330ec..2506da5d6ae 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3177,3 +3177,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. TullyBurnalot: - bugfix: Throwing mobs behind you force moves them to behind you before actually throwing them, preventing throw-shoving +2016-12-13: + TullyBurnalot: + - bugfix: Medbots no longer run after injured mobs if buckled. They also inform + nearby players of this diff --git a/html/changelogs/AutoChangeLog-pr-5967.yml b/html/changelogs/AutoChangeLog-pr-5967.yml deleted file mode 100644 index 97bcc128cbe..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5967.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TullyBurnalot" -delete-after: True -changes: - - bugfix: "Medbots no longer run after injured mobs if buckled. They also inform nearby players of this" From d548691246a608b924125967725bdad10292afce Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 14 Dec 2016 01:45:00 -0500 Subject: [PATCH 170/193] Automatic changelog generation for PR #5980 [ci skip] --- html/changelogs/AutoChangeLog-pr-5980.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5980.yml diff --git a/html/changelogs/AutoChangeLog-pr-5980.yml b/html/changelogs/AutoChangeLog-pr-5980.yml new file mode 100644 index 00000000000..3dfa79a86e4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5980.yml @@ -0,0 +1,4 @@ +author: "Fox McCloud" +delete-after: True +changes: + - bugfix: "Fixes the personal crafting cost of ED-209's being too expensive" From 23717e9949c3cd33adac0d3ff9a8ecb80ce85e32 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 14 Dec 2016 02:00:18 -0500 Subject: [PATCH 171/193] Automatic changelog compile, [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-5980.yml | 4 ---- 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5980.yml diff --git a/html/changelog.html b/html/changelog.html index 61d50b86cbf..32f14061264 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,12 @@ -->
              +

              14 December 2016

              +

              Fox McCloud updated:

              +
                +
              • Fixes the personal crafting cost of ED-209's being too expensive
              • +
              +

              13 December 2016

              TullyBurnalot updated:

                diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 2506da5d6ae..3a3018fbdcc 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3181,3 +3181,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. TullyBurnalot: - bugfix: Medbots no longer run after injured mobs if buckled. They also inform nearby players of this +2016-12-14: + Fox McCloud: + - bugfix: Fixes the personal crafting cost of ED-209's being too expensive diff --git a/html/changelogs/AutoChangeLog-pr-5980.yml b/html/changelogs/AutoChangeLog-pr-5980.yml deleted file mode 100644 index 3dfa79a86e4..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5980.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Fox McCloud" -delete-after: True -changes: - - bugfix: "Fixes the personal crafting cost of ED-209's being too expensive" From 4b1bfe33ffbc63c4e80545105557197aa53b1248 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 14 Dec 2016 13:12:10 -0500 Subject: [PATCH 172/193] Wall Rot Effect Refactor --- code/game/objects/effects/overlays.dm | 14 ++++++++ code/game/turfs/simulated/walls.dm | 35 +++++++------------ code/game/turfs/simulated/walls_reinforced.dm | 4 +-- .../reagents/chemistry/reagents/toxins.dm | 6 ++-- 4 files changed, 30 insertions(+), 29 deletions(-) diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 62760324f76..7e49136d3cf 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -97,3 +97,17 @@ icon = 'icons/effects/effects.dmi' icon_state = "admin" layer = 4.1 + +/obj/effect/overlay/wall_rot + name = "Wallrot" + desc = "Ick..." + icon = 'icons/effects/wallrot.dmi' + anchored = 1 + density = 1 + layer = 5 + mouse_opacity = 0 + +/obj/effect/overlay/wall_rot/New() + ..() + pixel_x += rand(-10, 10) + pixel_y += rand(-10, 10) \ No newline at end of file diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index d1fb0326466..cb7cd8be813 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -23,7 +23,7 @@ var/hardness = 40 //lower numbers are harder. Used to determine the probability of a hulk smashing through. var/engraving, engraving_quality //engraving on the wall - + var/sheet_type = /obj/item/stack/sheet/metal var/obj/item/stack/sheet/builtin_sheet = null @@ -39,16 +39,14 @@ /turf/simulated/wall/New() ..() - builtin_sheet = new sheet_type - + builtin_sheet = new sheet_type + /turf/simulated/wall/BeforeChange() - for(var/obj/effect/E in src) - // such quality code - if(E.name == "Wallrot") - qdel(E) + for(var/obj/effect/overlay/wall_rot/WR in src) + qdel(WR) . = ..() - + //Appearance /turf/simulated/wall/examine(mob/user) . = ..(user) @@ -139,7 +137,7 @@ O.loc = src ChangeTurf(/turf/simulated/floor/plating) - + /turf/simulated/wall/proc/break_wall() builtin_sheet.amount = 2 builtin_sheet.loc = src @@ -187,21 +185,12 @@ var/number_rots = rand(2,3) for(var/i=0, iYou burn away the fungi with \the [WT].") playsound(src, 'sound/items/Welder.ogg', 10, 1) - for(var/obj/effect/E in src) if(E.name == "Wallrot") - qdel(E) + for(var/obj/effect/overlay/wall_rot/WR in src) + qdel(WR) rotting = 0 return else if(!is_sharp(W) && W.force >= 10 || W.force >= 20) diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm index 1dbda894c52..49cfa1ace0f 100644 --- a/code/game/turfs/simulated/walls_reinforced.dm +++ b/code/game/turfs/simulated/walls_reinforced.dm @@ -29,8 +29,8 @@ if( WT.remove_fuel(0,user) ) to_chat(user, "You burn away the fungi with \the [WT].") playsound(src, 'sound/items/Welder.ogg', 10, 1) - for(var/obj/effect/E in src) if(E.name == "Wallrot") - qdel(E) + for(var/obj/effect/overlay/wall_rot/WR in src) + qdel(WR) rotting = 0 return else if(!is_sharp(W) && W.force >= 10 || W.force >= 20) diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 3b59ff8e0b7..411e6a7bae5 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -913,11 +913,9 @@ /datum/reagent/atrazine/reaction_turf(turf/simulated/wall/W, volume) // Clear off wallrot fungi if(istype(W) && W.rotting) + for(var/obj/effect/overlay/wall_rot/WR in W) + qdel(WR) W.rotting = 0 - for(var/obj/effect/overlay/O in W) - if(O.name == "Wallrot") // This is so awful - qdel(O) - W.visible_message("The fungi are completely dissolved by the solution!") /datum/reagent/atrazine/reaction_obj(obj/O, volume) From b9abce843d01a6ec64b75214f4ab579cc29d51b1 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Wed, 14 Dec 2016 13:37:34 -0800 Subject: [PATCH 173/193] NanoUI Update: Seperate UI Data into ui_data() proc This commit changes how NanoUI's live data updating system works. Previously, data for the template was directly gathered in the ui_interact proc. Now, it is seperated into the proc `ui_data`. To players, this does absolutely nothing. To coders, this opens up the potential for a much more complicated and fancy graphical updating system in the future, because the data is available on-demand without ever having to call nanomanager.try_update_ui. --- .../components/omni_devices/filter.dm | 14 +- .../components/omni_devices/mixer.dm | 14 +- code/game/dna/dna_modifier.dm | 26 +-- code/game/gamemodes/nuclear/nuclearbomb.dm | 14 +- code/game/machinery/Freezer.dm | 54 +++-- code/game/machinery/Sleeper.dm | 23 +- code/game/machinery/adv_med.dm | 216 +++++++++--------- code/game/machinery/alarm.dm | 23 +- code/game/machinery/atmoalter/canister.dm | 48 ++-- code/game/machinery/atmoalter/pump.dm | 36 +-- code/game/machinery/atmoalter/scrubber.dm | 43 ++-- code/game/machinery/computer/Operating.dm | 17 +- code/game/machinery/computer/aifixer.dm | 16 +- code/game/machinery/computer/atmos_alert.dm | 14 +- code/game/machinery/computer/camera.dm | 28 +-- code/game/machinery/computer/card.dm | 14 +- code/game/machinery/computer/cloning.dm | 15 +- .../game/machinery/computer/communications.dm | 27 +-- .../computer/pod_tracking_console.dm | 16 +- code/game/machinery/computer/robot.dm | 18 +- code/game/machinery/cryo.dm | 34 ++- code/game/machinery/doors/airlock.dm | 29 +-- .../airlock_controllers.dm | 56 ++--- code/game/machinery/firealarm.dm | 18 +- code/game/machinery/poolcontroller.dm | 13 +- code/game/machinery/portable_tag_turret.dm | 17 +- code/game/machinery/portable_turret.dm | 15 +- code/game/machinery/requests_console.dm | 14 +- code/game/machinery/slotmachine.dm | 16 +- code/game/machinery/teleporter.dm | 19 +- code/game/machinery/turret_control.dm | 14 +- code/game/machinery/vending.dm | 13 +- code/game/mecha/mech_bay.dm | 27 +-- code/game/mecha/mecha_control_console.dm | 16 +- code/game/objects/items/devices/aicard.dm | 15 +- code/game/objects/items/devices/guitar.dm | 3 + .../items/devices/radio/electropack.dm | 14 +- .../game/objects/items/devices/radio/radio.dm | 28 ++- .../objects/items/devices/transfer_valve.dm | 28 +-- code/game/objects/items/devices/uplinks.dm | 24 +- code/game/objects/items/devices/violin.dm | 3 + code/game/objects/items/weapons/RCD.dm | 16 +- .../game/objects/items/weapons/tanks/tanks.dm | 35 ++- code/game/objects/structures/musician.dm | 23 +- .../awaymissions/bluespaceartillery.dm | 34 +-- code/modules/clothing/spacesuits/rig/rig.dm | 18 +- code/modules/economy/Accounts_DB.dm | 14 +- .../kitchen_machinery/smartfridge.dm | 15 +- code/modules/hydroponics/seed_machines.dm | 34 +-- .../mob/living/silicon/pai/software.dm | 25 +- code/modules/nano/modules/alarm_monitor.dm | 14 +- code/modules/nano/modules/atmos_control.dm | 11 +- code/modules/nano/modules/crew_monitor.dm | 19 +- code/modules/nano/modules/human_appearance.dm | 15 +- code/modules/nano/modules/law_manager.dm | 14 +- code/modules/nano/modules/power_monitor.dm | 14 +- code/modules/nano/nanoexternal.dm | 13 +- code/modules/nano/nanomanager.dm | 16 +- code/modules/nano/nanoui.dm | 17 +- code/modules/paperwork/faxmachine.dm | 15 +- code/modules/pda/PDA.dm | 34 +-- code/modules/power/apc.dm | 101 ++++---- code/modules/power/port_gen.dm | 16 +- code/modules/power/smes.dm | 28 +-- code/modules/power/solar.dm | 17 +- code/modules/power/supermatter/supermatter.dm | 14 +- .../chemistry/machinery/chem_dispenser.dm | 29 ++- .../chemistry/machinery/chem_heater.dm | 17 +- .../chemistry/machinery/chem_master.dm | 17 +- code/modules/recycling/disposal.dm | 15 +- code/modules/research/rdconsole.dm | 14 +- .../machinery/geosample_scanner.dm | 28 ++- .../security_levels/keycard authentication.dm | 25 +- code/modules/shuttle/supply.dm | 26 ++- nano/assets/libraries.min.js | 10 +- nano/assets/nano.js | 2 +- nano/assets/nanoui.css | 4 +- nano/scripts/nano/nano_state_manager.js | 2 +- 78 files changed, 964 insertions(+), 889 deletions(-) diff --git a/code/ATMOSPHERICS/components/omni_devices/filter.dm b/code/ATMOSPHERICS/components/omni_devices/filter.dm index 94efade9b1a..cbe1422c38a 100644 --- a/code/ATMOSPHERICS/components/omni_devices/filter.dm +++ b/code/ATMOSPHERICS/components/omni_devices/filter.dm @@ -108,22 +108,16 @@ return 1 -/obj/machinery/atmospherics/omni/filter/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) +/obj/machinery/atmospherics/omni/filter/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, force_open = 0) usr.set_machine(src) - var/list/data = new() - - data = build_uidata() - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) - + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "omni_filter.tmpl", "Omni Filter Control", 330, 330) - ui.set_initial_data(data) ui.open() -/obj/machinery/atmospherics/omni/filter/proc/build_uidata() - var/list/data = new() +/obj/machinery/atmospherics/omni/filter/ui_data(mob/user, datum/topic_state/state) + var/data[0] data["power"] = on data["config"] = configuring diff --git a/code/ATMOSPHERICS/components/omni_devices/mixer.dm b/code/ATMOSPHERICS/components/omni_devices/mixer.dm index c64703773d3..07269c5f3db 100644 --- a/code/ATMOSPHERICS/components/omni_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/omni_devices/mixer.dm @@ -132,22 +132,16 @@ return 1 -/obj/machinery/atmospherics/omni/mixer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) +/obj/machinery/atmospherics/omni/mixer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, force_open = 0) usr.set_machine(src) - var/list/data = new() - - data = build_uidata() - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) - + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "omni_mixer.tmpl", "Omni Mixer Control", 360, 330) - ui.set_initial_data(data) ui.open() -/obj/machinery/atmospherics/omni/mixer/proc/build_uidata() - var/list/data = new() +/obj/machinery/atmospherics/omni/mixer/ui_data(mob/user, datum/topic_state/state) + var/data[0] data["power"] = on data["config"] = configuring diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 63c42687b67..bc4129d875d 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -476,7 +476,18 @@ if(user == connected.occupant) return - // this is the data which will be sent to the ui + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "dna_modifier.tmpl", "DNA Modifier Console", 660, 700) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) + +/obj/machinery/computer/scan_consolenew/ui_data(mob/user, datum/topic_state/state) var/data[0] data["selectedMenuKey"] = selected_menu_key data["locked"] = src.connected.locked @@ -550,18 +561,7 @@ for(var/datum/reagent/R in connected.beaker.reagents.reagent_list) data["beakerVolume"] += R.volume - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "dna_modifier.tmpl", "DNA Modifier Console", 660, 700) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) + return data /obj/machinery/computer/scan_consolenew/Topic(href, href_list) if(..()) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 5c8dcecf05b..efd9e1ce01d 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -175,6 +175,13 @@ var/bomb_set return /obj/machinery/nuclearbomb/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "nuclear_bomb.tmpl", "Nuke Control Panel", 450, 550, state = physical_state) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/nuclearbomb/ui_data(mob/user, datum/topic_state/state) var/data[0] data["is_syndicate"] = is_syndicate data["hacking"] = 0 @@ -201,12 +208,7 @@ var/bomb_set if(yes_code) data["message"] = "*****" - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "nuclear_bomb.tmpl", "Nuke Control Panel", 450, 550, state = physical_state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/nuclearbomb/verb/make_deployable() set category = "Object" diff --git a/code/game/machinery/Freezer.dm b/code/game/machinery/Freezer.dm index 7f1a89ab0a4..8a8c7a04114 100644 --- a/code/game/machinery/Freezer.dm +++ b/code/game/machinery/Freezer.dm @@ -98,7 +98,18 @@ src.ui_interact(user) /obj/machinery/atmospherics/unary/cold_sink/freezer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - // this is the data which will be sent to the ui + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "freezer.tmpl", "Gas Cooling System", 540, 300) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) + +/obj/machinery/atmospherics/unary/cold_sink/freezer/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["on"] = on ? 1 : 0 data["gasPressure"] = round(air_contents.return_pressure()) @@ -117,19 +128,7 @@ else if(air_contents.temperature < (T0C - 20) && air_contents.temperature > (T0C - 100)) temp_class = "average" data["gasTemperatureClass"] = temp_class - - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "freezer.tmpl", "Gas Cooling System", 540, 300) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) + return data /obj/machinery/atmospherics/unary/cold_sink/freezer/Topic(href, href_list) if(..()) @@ -257,7 +256,18 @@ src.ui_interact(user) /obj/machinery/atmospherics/unary/heat_reservoir/heater/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - // this is the data which will be sent to the ui + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "freezer.tmpl", "Gas Heating System", 540, 300) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) + +/obj/machinery/atmospherics/unary/heat_reservoir/heater/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["on"] = on ? 1 : 0 data["gasPressure"] = round(air_contents.return_pressure()) @@ -274,19 +284,7 @@ if(air_contents.temperature > (T20C+40)) temp_class = "bad" data["gasTemperatureClass"] = temp_class - - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "freezer.tmpl", "Gas Heating System", 540, 300) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) + return data /obj/machinery/atmospherics/unary/heat_reservoir/heater/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index d5179a9c19b..cc93beafb75 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -135,6 +135,13 @@ ui_interact(user) /obj/machinery/sleeper/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "sleeper.tmpl", "Sleeper", 550, 770) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/sleeper/ui_data(mob/user, datum/topic_state/state) var/data[0] data["hasOccupant"] = occupant ? 1 : 0 var/occupantData[0] @@ -229,13 +236,7 @@ chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("chemical" = temp.id), "occ_amount" = reagent_amount, "pretty_amount" = pretty_amount, "injectable" = injectable, "overdosing" = overdosing, "od_warning" = caution))) data["chemicals"] = chemicals - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "sleeper.tmpl", "Sleeper", 550, 770) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/sleeper/Topic(href, href_list) if(!controls_inside && usr == occupant) @@ -454,10 +455,10 @@ set name = "Eject Sleeper" set category = "Object" set src in oview(1) - + if(usr.incapacitated()) //are you cuffed, dying, lying, stunned or other return - + src.icon_state = "[base_icon]-open" src.go_out() add_fingerprint(usr) @@ -467,10 +468,10 @@ set name = "Remove Beaker" set category = "Object" set src in oview(1) - + if(usr.incapacitated()) //are you cuffed, dying, lying, stunned or other return - + if(beaker) filtering = 0 beaker.forceMove(usr.loc) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 8ea98b53c8b..f1da5f49ab7 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -322,140 +322,142 @@ /obj/machinery/body_scanconsole/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "adv_med.tmpl", "Body Scanner", 690, 600) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/body_scanconsole/ui_data(mob/user, datum/topic_state/state) var/data[0] data["connected"] = connected ? 1 : 0 - if(connected) - data["occupied"] = connected.occupant ? 1 : 0 + if(!connected) + return data - var/occupantData[0] - if(connected.occupant) - var/mob/living/carbon/human/H = connected.occupant - occupantData["name"] = H.name - occupantData["stat"] = H.stat - occupantData["health"] = H.health - occupantData["maxHealth"] = H.maxHealth + data["occupied"] = connected.occupant ? 1 : 0 - occupantData["hasVirus"] = H.viruses.len + var/occupantData[0] + if(connected.occupant) + var/mob/living/carbon/human/H = connected.occupant + occupantData["name"] = H.name + occupantData["stat"] = H.stat + occupantData["health"] = H.health + occupantData["maxHealth"] = H.maxHealth - occupantData["bruteLoss"] = H.getBruteLoss() - occupantData["oxyLoss"] = H.getOxyLoss() - occupantData["toxLoss"] = H.getToxLoss() - occupantData["fireLoss"] = H.getFireLoss() + occupantData["hasVirus"] = H.viruses.len - occupantData["radLoss"] = H.radiation - occupantData["cloneLoss"] = H.getCloneLoss() - occupantData["brainLoss"] = H.getBrainLoss() - occupantData["paralysis"] = H.paralysis - occupantData["paralysisSeconds"] = round(H.paralysis / 4) - occupantData["bodyTempC"] = H.bodytemperature-T0C - occupantData["bodyTempF"] = (((H.bodytemperature-T0C) * 1.8) + 32) + occupantData["bruteLoss"] = H.getBruteLoss() + occupantData["oxyLoss"] = H.getOxyLoss() + occupantData["toxLoss"] = H.getToxLoss() + occupantData["fireLoss"] = H.getFireLoss() - occupantData["hasBorer"] = H.has_brain_worms() + occupantData["radLoss"] = H.radiation + occupantData["cloneLoss"] = H.getCloneLoss() + occupantData["brainLoss"] = H.getBrainLoss() + occupantData["paralysis"] = H.paralysis + occupantData["paralysisSeconds"] = round(H.paralysis / 4) + occupantData["bodyTempC"] = H.bodytemperature-T0C + occupantData["bodyTempF"] = (((H.bodytemperature-T0C) * 1.8) + 32) - var/bloodData[0] - bloodData["hasBlood"] = 0 - if(ishuman(H) && H.vessel && !(H.species && H.species.flags & NO_BLOOD)) - var/blood_type = H.get_blood_name() - var/blood_volume = round(H.vessel.get_reagent_amount(blood_type)) - bloodData["hasBlood"] = 1 - bloodData["volume"] = blood_volume - bloodData["percent"] = round(((blood_volume / BLOOD_VOLUME_NORMAL)*100)) - bloodData["pulse"] = H.get_pulse(GETPULSE_TOOL) - bloodData["bloodLevel"] = blood_volume - bloodData["bloodMax"] = H.max_blood - occupantData["blood"] = bloodData + occupantData["hasBorer"] = H.has_brain_worms() - var/implantData[0] - for(var/obj/item/weapon/implant/I in H) - if(I.implanted && is_type_in_list(I, known_implants)) - var/implantSubData[0] - implantSubData["name"] = sanitize(I.name) - implantData.Add(list(implantSubData)) - occupantData["implant"] = implantData - occupantData["implant_len"] = implantData.len + var/bloodData[0] + bloodData["hasBlood"] = 0 + if(ishuman(H) && H.vessel && !(H.species && H.species.flags & NO_BLOOD)) + var/blood_type = H.get_blood_name() + var/blood_volume = round(H.vessel.get_reagent_amount(blood_type)) + bloodData["hasBlood"] = 1 + bloodData["volume"] = blood_volume + bloodData["percent"] = round(((blood_volume / BLOOD_VOLUME_NORMAL)*100)) + bloodData["pulse"] = H.get_pulse(GETPULSE_TOOL) + bloodData["bloodLevel"] = blood_volume + bloodData["bloodMax"] = H.max_blood + occupantData["blood"] = bloodData - var/extOrganData[0] - for(var/obj/item/organ/external/E in H.organs) - var/organData[0] - organData["name"] = E.name - organData["open"] = E.open - organData["germ_level"] = E.germ_level - organData["bruteLoss"] = E.brute_dam - organData["fireLoss"] = E.burn_dam - organData["totalLoss"] = E.brute_dam + E.burn_dam - organData["maxHealth"] = E.max_damage - organData["bruised"] = E.min_bruised_damage - organData["broken"] = E.min_broken_damage + var/implantData[0] + for(var/obj/item/weapon/implant/I in H) + if(I.implanted && is_type_in_list(I, known_implants)) + var/implantSubData[0] + implantSubData["name"] = sanitize(I.name) + implantData.Add(list(implantSubData)) + occupantData["implant"] = implantData + occupantData["implant_len"] = implantData.len - var/shrapnelData[0] - for(var/obj/I in E.implants) - var/shrapnelSubData[0] - shrapnelSubData["name"] = I.name + var/extOrganData[0] + for(var/obj/item/organ/external/E in H.organs) + var/organData[0] + organData["name"] = E.name + organData["open"] = E.open + organData["germ_level"] = E.germ_level + organData["bruteLoss"] = E.brute_dam + organData["fireLoss"] = E.burn_dam + organData["totalLoss"] = E.brute_dam + E.burn_dam + organData["maxHealth"] = E.max_damage + organData["bruised"] = E.min_bruised_damage + organData["broken"] = E.min_broken_damage - shrapnelData.Add(list(shrapnelSubData)) + var/shrapnelData[0] + for(var/obj/I in E.implants) + var/shrapnelSubData[0] + shrapnelSubData["name"] = I.name - organData["shrapnel"] = shrapnelData - organData["shrapnel_len"] = shrapnelData.len + shrapnelData.Add(list(shrapnelSubData)) - var/organStatus[0] - if(E.status & ORGAN_DESTROYED) - organStatus["destroyed"] = 1 - if(E.status & ORGAN_BROKEN) - organStatus["broken"] = E.broken_description - if(E.status & ORGAN_ROBOT) - organStatus["robotic"] = 1 - if(E.status & ORGAN_SPLINTED) - organStatus["splinted"] = 1 - if(E.status & ORGAN_BLEEDING) - organStatus["bleeding"] = 1 - if(E.status & ORGAN_DEAD) - organStatus["dead"] = 1 + organData["shrapnel"] = shrapnelData + organData["shrapnel_len"] = shrapnelData.len - organData["status"] = organStatus + var/organStatus[0] + if(E.status & ORGAN_DESTROYED) + organStatus["destroyed"] = 1 + if(E.status & ORGAN_BROKEN) + organStatus["broken"] = E.broken_description + if(E.status & ORGAN_ROBOT) + organStatus["robotic"] = 1 + if(E.status & ORGAN_SPLINTED) + organStatus["splinted"] = 1 + if(E.status & ORGAN_BLEEDING) + organStatus["bleeding"] = 1 + if(E.status & ORGAN_DEAD) + organStatus["dead"] = 1 - if(istype(E, /obj/item/organ/external/chest) && H.is_lung_ruptured()) - organData["lungRuptured"] = 1 + organData["status"] = organStatus - for(var/datum/wound/W in E.wounds) - if(W.internal) - organData["internalBleeding"] = 1 - break + if(istype(E, /obj/item/organ/external/chest) && H.is_lung_ruptured()) + organData["lungRuptured"] = 1 - extOrganData.Add(list(organData)) + for(var/datum/wound/W in E.wounds) + if(W.internal) + organData["internalBleeding"] = 1 + break - occupantData["extOrgan"] = extOrganData + extOrganData.Add(list(organData)) - var/intOrganData[0] - for(var/obj/item/organ/internal/I in H.internal_organs) - var/organData[0] - organData["name"] = I.name - organData["desc"] = I.desc - organData["germ_level"] = I.germ_level - organData["damage"] = I.damage - organData["maxHealth"] = I.max_damage - organData["bruised"] = I.min_broken_damage - organData["broken"] = I.min_bruised_damage - organData["robotic"] = I.robotic - organData["dead"] = (I.status & ORGAN_DEAD) + occupantData["extOrgan"] = extOrganData - intOrganData.Add(list(organData)) + var/intOrganData[0] + for(var/obj/item/organ/internal/I in H.internal_organs) + var/organData[0] + organData["name"] = I.name + organData["desc"] = I.desc + organData["germ_level"] = I.germ_level + organData["damage"] = I.damage + organData["maxHealth"] = I.max_damage + organData["bruised"] = I.min_broken_damage + organData["broken"] = I.min_bruised_damage + organData["robotic"] = I.robotic + organData["dead"] = (I.status & ORGAN_DEAD) - occupantData["intOrgan"] = intOrganData + intOrganData.Add(list(organData)) - occupantData["blind"] = (H.disabilities & BLIND) - occupantData["nearsighted"] = (H.disabilities & NEARSIGHTED) + occupantData["intOrgan"] = intOrganData - data["occupant"] = occupantData - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "adv_med.tmpl", "Body Scanner", 690, 600) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + occupantData["blind"] = (H.disabilities & BLIND) + occupantData["nearsighted"] = (H.disabilities & NEARSIGHTED) + data["occupant"] = occupantData + return data /obj/machinery/body_scanconsole/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 5515eb7ab3a..79a423c70cf 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -696,8 +696,14 @@ data["danger"] = danger return data -/obj/machinery/alarm/proc/get_nano_data(mob/user, href_list) +/obj/machinery/alarm/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] + var/list/href_list = state.href_list() + + if(href_list) + data["remote_connection"] = href_list["remote_connection"] + data["remote_access"] = href_list["remote_access"] + data["name"] = sanitize(name) data["air"] = ui_air_status() data["alarmActivated"] = alarmActivated || danger_level == 2 @@ -807,22 +813,9 @@ return thresholds /obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, var/master_ui = null, var/datum/topic_state/state = default_state) - var/list/href = state.href_list(user) - var/remote_connection = 0 - var/remote_access = 0 - if(href) - remote_connection = href["remote_connection"] // Remote connection means we're non-adjacent/connecting from another computer - remote_access = href["remote_access"] // Remote access means we also have the privilege to alter the air alarm. - - var/list/data = get_nano_data(user, href) - - data["remote_connection"] = remote_connection - data["remote_access"] = remote_access - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "air_alarm.tmpl", name, 570, 410, state = state) - ui.set_initial_data(data) ui.open() ui.set_auto_update(1) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 7eb01d06988..a7d62d74b94 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -88,8 +88,8 @@ var/datum/canister_icons/canister_icon_container = new() "quart" = "none") oldcolor = new /list() decals = list("cold" = 0, "hot" = 0, "plasma" = 0) - colorcontainer = new /list(4) - possibledecals = new /list(3) + colorcontainer = list() + possibledecals = list() update_icon() /obj/machinery/portable_atmospherics/canister/proc/init_data_vars() @@ -123,7 +123,7 @@ var/datum/canister_icons/canister_icon_container = new() L.Add(list("anycolor" = 1)) colorcontainer[C] = L - possibledecals = new /list(3) + possibledecals = list() var/i var/list/L = canister_icon_container.possibledecals @@ -382,10 +382,23 @@ update_flag /obj/machinery/portable_atmospherics/canister/attack_hand(var/mob/user as mob) return src.ui_interact(user) -/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = physical_state) if(src.destroyed) return + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "canister.tmpl", "Canister", 480, 400, state = state) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) + + +/obj/machinery/portable_atmospherics/canister/ui_data(mob/user, datum/topic_state/state) init_data_vars() //set up var/colorcontainer and var/possibledecals // this is the data which will be sent to the ui @@ -394,8 +407,10 @@ update_flag data["menu"] = menu ? 1 : 0 data["canLabel"] = can_label ? 1 : 0 data["canister_color"] = canister_color - data["colorContainer"] = colorcontainer - data["possibleDecals"] = possibledecals + data["colorContainer"] = colorcontainer.Copy() + colorcontainer.Cut() + data["possibleDecals"] = possibledecals.Copy() + possibledecals.Cut() data["portConnected"] = connected_port ? 1 : 0 data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) data["releasePressure"] = round(release_pressure ? release_pressure : 0) @@ -405,24 +420,9 @@ update_flag data["hasHoldingTank"] = holding ? 1 : 0 if(holding) - data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure())) - - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "canister.tmpl", "Canister", 480, 400, state = physical_state) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) - - //Disregard these, avoid cluttering up the VV window - colorcontainer = new /list(4) - possibledecals = new /list(3) + data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure())) + + return data /obj/machinery/portable_atmospherics/canister/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm index 9f716696591..8f7f6d72bb4 100644 --- a/code/game/machinery/atmoalter/pump.dm +++ b/code/game/machinery/atmoalter/pump.dm @@ -8,7 +8,7 @@ var/on = 0 var/direction_out = 0 //0 = siphoning, 1 = releasing var/target_pressure = 100 - + var/pressuremin = 0 var/pressuremax = 10 * ONE_ATMOSPHERE @@ -98,15 +98,27 @@ /obj/machinery/portable_atmospherics/pump/attack_ai(var/mob/user as mob) src.add_hiddenprint(user) return src.attack_hand(user) - + /obj/machinery/portable_atmospherics/pump/attack_ghost(var/mob/user as mob) return src.attack_hand(user) /obj/machinery/portable_atmospherics/pump/attack_hand(var/mob/user as mob) ui_interact(user) - -/obj/machinery/portable_atmospherics/pump/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) - var/list/data[0] + +/obj/machinery/portable_atmospherics/pump/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = physical_state) + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "portpump.tmpl", "Portable Pump", 480, 400, state = state) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) + +/obj/machinery/portable_atmospherics/pump/ui_data(mob/user, datum/topic_state/state = physical_state) + var/data[0] data["portConnected"] = connected_port ? 1 : 0 data["tankPressure"] = round(air_contents.return_pressure() > 0 ? air_contents.return_pressure() : 0) data["targetpressure"] = round(target_pressure) @@ -119,18 +131,7 @@ if(holding) data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure() > 0 ? holding.air_contents.return_pressure() : 0)) - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "portpump.tmpl", "Portable Pump", 480, 400, state = physical_state) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) + return data /obj/machinery/portable_atmospherics/pump/Topic(href, href_list) if(..()) @@ -155,4 +156,3 @@ update_icon() src.add_fingerprint(usr) - \ No newline at end of file diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index 1fb0bdd1308..de5ac2dc49d 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -10,7 +10,7 @@ var/widenet = 0 //is this scrubber acting on the 3x3 area around it. volume = 750 - + var/minrate = 0//probably useless, but whatever var/maxrate = 10 * ONE_ATMOSPHERE @@ -52,7 +52,7 @@ if(istype(T)) for(var/turf/simulated/tile in T.GetAtmosAdjacentTurfs(alldir=1)) scrub(tile) - + /obj/machinery/portable_atmospherics/scrubber/proc/scrub(var/turf/simulated/tile) var/datum/gas_mixture/environment if(holding) @@ -108,7 +108,7 @@ /obj/machinery/portable_atmospherics/scrubber/attack_ai(var/mob/user as mob) src.add_hiddenprint(user) return src.attack_hand(user) - + /obj/machinery/portable_atmospherics/scrubber/attack_ghost(var/mob/user as mob) return src.attack_hand(user) @@ -116,8 +116,20 @@ ui_interact(user) return -/obj/machinery/portable_atmospherics/scrubber/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) - var/list/data[0] +/obj/machinery/portable_atmospherics/scrubber/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = physical_state) + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "portscrubber.tmpl", "Portable Scrubber", 480, 400, state = state) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) + +/obj/machinery/portable_atmospherics/scrubber/ui_data(mob/user, datum/topic_state/state = physical_state) + var/data[0] data["portConnected"] = connected_port ? 1 : 0 data["tankPressure"] = round(air_contents.return_pressure() > 0 ? air_contents.return_pressure() : 0) data["rate"] = round(volume_rate) @@ -129,18 +141,7 @@ if(holding) data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure() > 0 ? holding.air_contents.return_pressure() : 0)) - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "portscrubber.tmpl", "Portable Scrubber", 480, 400, state = physical_state) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) + return data /obj/machinery/portable_atmospherics/scrubber/Topic(href, href_list) if(..()) @@ -160,7 +161,7 @@ volume_rate = Clamp(volume_rate+diff, minrate, maxrate) src.add_fingerprint(usr) - + /obj/machinery/portable_atmospherics/scrubber/huge name = "Huge Air Scrubber" icon_state = "scrubber:0" @@ -172,7 +173,7 @@ var/global/gid = 1 var/id = 0 var/stationary = 0 - + /obj/machinery/portable_atmospherics/scrubber/huge/New() ..() id = gid @@ -207,7 +208,7 @@ else if((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1) atmosanalyzer_scan(air_contents, user) - + /obj/machinery/portable_atmospherics/scrubber/huge/stationary name = "Stationary Air Scrubber" - stationary = 1 \ No newline at end of file + stationary = 1 diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 08e3677b039..1c40370f56d 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -86,6 +86,13 @@ // onclose(user, "op") /obj/machinery/computer/operating/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)//ui is mostly copy pasta from the sleeper ui + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "op_computer.tmpl", "Patient Monitor", 650, 455) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/computer/operating/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] var/mob/living/carbon/human/occupant = src.table.victim data["hasOccupant"] = occupant ? 1 : 0 @@ -156,15 +163,7 @@ data["healthAlarm"]=healthAlarm data["oxy"]=oxy - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "op_computer.tmpl", "Patient Monitor", 650, 455) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - - - + return data /obj/machinery/computer/operating/Topic(href, href_list) diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 097efa2c75c..539edb24d65 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -33,6 +33,14 @@ to_chat(user, "You have been locked out from this console!") /obj/machinery/computer/aifixer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + + if(!ui) + ui = new(user, src, ui_key, "ai_fixer.tmpl", "AI System Integrity Restorer", 550, 500) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/computer/aifixer/ui_data(mob/user, datum/topic_state/state) var/data[0] if(occupant) data["occupant"] = occupant.name @@ -49,13 +57,7 @@ data["laws"] = laws - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - - if(!ui) - ui = new(user, src, ui_key, "ai_fixer.tmpl", "AI System Integrity Restorer", 550, 500) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/computer/aifixer/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index cecf755b37d..ea53374970a 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -24,6 +24,13 @@ var/global/list/minor_air_alarms = list() ui_interact(user) /obj/machinery/computer/atmos_alert/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "atmos_alert.tmpl", src.name, 500, 500) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/computer/atmos_alert/ui_data(mob/user, datum/topic_state/state) var/data[0] var/major_alarms[0] var/minor_alarms[0] @@ -37,12 +44,7 @@ var/global/list/minor_air_alarms = list() data["priority_alarms"] = major_alarms data["minor_alarms"] = minor_alarms - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "atmos_alert.tmpl", src.name, 500, 500) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/computer/atmos_alert/update_icon() var/list/alarms = atmosphere_alarm.major_alarms() diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 97a976ddc41..c2e58af92cf 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -70,6 +70,17 @@ if(user.stat) return + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "sec_camera.tmpl", "Camera Console", 900, 800) + // adding a template with the key "mapContent" enables the map ui functionality + ui.add_template("mapContent", "sec_camera_map_content.tmpl") + // adding a template with the key "mapHeader" replaces the map header content + ui.add_template("mapHeader", "sec_camera_map_header.tmpl") + ui.open() + ui.set_auto_update(1) + +/obj/machinery/computer/security/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["current"] = null @@ -115,18 +126,7 @@ if(current) data["current"] = current.nano_structure() - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "sec_camera.tmpl", "Camera Console", 900, 800) - - // adding a template with the key "mapContent" enables the map ui functionality - ui.add_template("mapContent", "sec_camera_map_content.tmpl") - // adding a template with the key "mapHeader" replaces the map header content - ui.add_template("mapHeader", "sec_camera_map_header.tmpl") - - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/computer/security/Topic(href, href_list) if(..()) @@ -138,10 +138,10 @@ var/obj/machinery/camera/C = locate(href_list["switchTo"]) in cameranet.cameras if(!C) return 1 - + if(!can_access_camera(C)) return 1 // No href exploits for you. - + switch_to_camera(usr, C) else if(href_list["reset"]) diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 7e78232de4d..a33d3aa02eb 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -173,9 +173,15 @@ var/time_last_changed_position = 0 ui_interact(user) -/obj/machinery/computer/card/ui_interact(mob/user, ui_key="main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/machinery/computer/card/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) user.set_machine(src) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "identification_computer.tmpl", src.name, 775, 700) + ui.open() + +/obj/machinery/computer/card/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["src"] = UID() data["station_name"] = station_name() @@ -242,11 +248,7 @@ var/time_last_changed_position = 0 data["regions"] = regions - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "identification_computer.tmpl", src.name, 775, 700) - ui.set_initial_data(data) - ui.open() + return data /obj/machinery/computer/card/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 4afe9ba3cff..847f20a3f23 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -120,6 +120,14 @@ /obj/machinery/computer/cloning/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) if(stat & (NOPOWER|BROKEN)) return + + // Set up the Nano UI + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "cloning_console.tmpl", "Cloning Console UI", 640, 520) + ui.open() + +/obj/machinery/computer/cloning/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["menu"] = src.menu data["scanner"] = sanitize("[src.scanner]") @@ -175,12 +183,7 @@ else data["podready"] = 0 - // Set up the Nano UI - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "cloning_console.tmpl", "Cloning Console UI", 640, 520) - ui.set_initial_data(data) - ui.open() + return data /obj/machinery/computer/cloning/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 01608efedcb..f7ee5908824 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -69,14 +69,14 @@ var/list/access = usr.get_access() if(allowed(usr)) authenticated = COMM_AUTHENTICATION_MIN - + if(access_captain in access) authenticated = COMM_AUTHENTICATION_MAX var/mob/living/carbon/human/H = usr var/obj/item/weapon/card/id = H.get_idcard(TRUE) if(istype(id)) crew_announcement.announcer = GetNameAndAssignmentFromId(id) - + nanomanager.update_uis(src) return @@ -313,7 +313,16 @@ ui_interact(user) /obj/machinery/computer/communications/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) - // this is the data which will be sent to the ui + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "comm_console.tmpl", "Communications Console", 400, 500) + // open the new ui window + ui.open() + +/obj/machinery/computer/communications/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["is_ai"] = isAI(user)||isrobot(user) data["menu_state"] = data["is_ai"] ? ai_menu_state : menu_state @@ -377,16 +386,8 @@ else data["dock_request"] = 0 - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "comm_console.tmpl", "Communications Console", 400, 500) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() + return data + /obj/machinery/computer/communications/proc/setCurrentMessage(var/mob/user,var/value) if(isAI(user) || isrobot(user)) diff --git a/code/game/machinery/computer/pod_tracking_console.dm b/code/game/machinery/computer/pod_tracking_console.dm index cf16c34e04d..8664d786a24 100644 --- a/code/game/machinery/computer/pod_tracking_console.dm +++ b/code/game/machinery/computer/pod_tracking_console.dm @@ -14,6 +14,13 @@ ui_interact(user) /obj/machinery/computer/podtracker/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "pod_tracking.tmpl", "Pod Tracking Console", 400, 500) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/computer/podtracker/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] var/list/pods[0] for(var/obj/item/device/spacepod_equipment/misc/tracker/TR in world) @@ -33,14 +40,7 @@ pods.Add(list(list("pod" = "\ref[my_pod]", "name" = podname) + chairs + list("x" = my_pod.x, "y" = my_pod.y, "z" = my_pod.z))) data["pods"] = pods - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - - if(!ui) - ui = new(user, src, ui_key, "pod_tracking.tmpl", "Pod Tracking Console", 400, 500) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/computer/podtracker/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 160fbeb9827..6f7e3391457 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -35,6 +35,13 @@ return 0 /obj/machinery/computer/robotics/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "robot_control.tmpl", "Robotic Control Console", 400, 500) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/computer/robotics/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] var/list/robots = get_cyborgs(user) if(robots.len) @@ -43,14 +50,7 @@ // Also applies for cyborgs. Hides the manual self-destruct button. data["is_ai"] = issilicon(user) data["allowed"] = is_authenticated(user) - - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "robot_control.tmpl", "Robotic Control Console", 400, 500) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/computer/robotics/Topic(href, href_list) if(..()) @@ -242,4 +242,4 @@ return for(var/mob/living/silicon/robot/R in mob_list) if(R.name == name) - return R \ No newline at end of file + return R diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 67414971337..3a147e29287 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -179,7 +179,18 @@ * @return nothing */ /obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - // this is the data which will be sent to the ui + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "cryo.tmpl", "Cryo Cell Control System", 520, 420) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) + +/obj/machinery/atmospherics/unary/cryo_cell/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["isOperating"] = on data["hasOccupant"] = occupant ? 1 : 0 @@ -206,13 +217,6 @@ data["cellTemperatureStatus"] = "average" data["isBeakerLoaded"] = beaker ? 1 : 0 - /* // Removing beaker contents list from front-end, replacing with a total remaining volume - var beakerContents[0] - if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list... - data["beakerContents"] = beakerContents - */ data["beakerLabel"] = null data["beakerVolume"] = 0 if(beaker) @@ -222,19 +226,7 @@ data["beakerVolume"] += R.volume data["autoeject"] = autoeject - - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "cryo.tmpl", "Cryo Cell Control System", 520, 420) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) + return data /obj/machinery/atmospherics/unary/cryo_cell/Topic(href, href_list) if(usr == occupant) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index c0fc86c8261..433f23a592b 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -560,6 +560,13 @@ About the new airlock wires panel: ui_interact(user) /obj/machinery/door/airlock/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "door_control.tmpl", "Door Controls - [src]", 600, 375) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/door/airlock/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["main_power_loss"] = round(main_power_lost_until > 0 ? max(main_power_lost_until - world.time, 0) / 10 : main_power_lost_until, 1) @@ -568,22 +575,16 @@ About the new airlock wires panel: data["open"] = !density var/commands[0] - commands[++commands.len] = list("name" = "IdScan", "command"= "idscan", "active" = !aiDisabledIdScanner, "enabled" = "Enabled", "disabled" = "Disable", "danger" = 0, "act" = 1) - commands[++commands.len] = list("name" = "Bolts", "command"= "bolts", "active" = !locked, "enabled" = "Raised", "disabled" = "Dropped", "danger" = 0, "act" = 0) - commands[++commands.len] = list("name" = "Bolt Lights", "command"= "lights", "active" = lights, "enabled" = "Enabled", "disabled" = "Disable", "danger" = 0, "act" = 1) - commands[++commands.len] = list("name" = "Safeties", "command"= "safeties", "active" = safe, "enabled" = "Nominal", "disabled" = "Overridden", "danger" = 1, "act" = 0) - commands[++commands.len] = list("name" = "Timing", "command"= "timing", "active" = normalspeed, "enabled" = "Nominal", "disabled" = "Overridden", "danger" = 1, "act" = 0) - commands[++commands.len] = list("name" = "Door State", "command"= "open", "active" = density, "enabled" = "Closed", "disabled" = "Opened", "danger" = 0, "act" = 0) - commands[++commands.len] = list("name" = "Emergency Access", "command"= "emergency", "active" = !emergency, "enabled" = "Disabled", "disabled" = "Enabled", "danger" = 0, "act" = 0) + commands[++commands.len] = list("name" = "IdScan", "command"= "idscan", "active" = !aiDisabledIdScanner,"enabled" = "Enabled", "disabled" = "Disable", "danger" = 0, "act" = 1) + commands[++commands.len] = list("name" = "Bolts", "command"= "bolts", "active" = !locked, "enabled" = "Raised", "disabled" = "Dropped", "danger" = 0, "act" = 0) + commands[++commands.len] = list("name" = "Bolt Lights", "command"= "lights", "active" = lights, "enabled" = "Enabled", "disabled" = "Disable", "danger" = 0, "act" = 1) + commands[++commands.len] = list("name" = "Safeties", "command"= "safeties", "active" = safe, "enabled" = "Nominal", "disabled" = "Overridden", "danger" = 1, "act" = 0) + commands[++commands.len] = list("name" = "Timing", "command"= "timing", "active" = normalspeed, "enabled" = "Nominal", "disabled" = "Overridden", "danger" = 1, "act" = 0) + commands[++commands.len] = list("name" = "Door State", "command"= "open", "active" = density, "enabled" = "Closed", "disabled" = "Opened", "danger" = 0, "act" = 0) + commands[++commands.len] = list("name" = "Emergency Access","command"= "emergency", "active" = !emergency, "enabled" = "Disabled", "disabled" = "Enabled", "danger" = 0, "act" = 0) data["commands"] = commands - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "door_control.tmpl", "Door Controls - [src]", 600, 375) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/door/airlock/proc/hack(mob/user as mob) if(src.aiHacking==0) diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index 2b336859127..d9be59bde59 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -21,6 +21,13 @@ name = "Advanced Airlock Controller" /obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "advanced_airlock_console.tmpl", name, 470, 290) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data = list( @@ -32,16 +39,7 @@ "secure" = program.memory["secure"] ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - - if(!ui) - ui = new(user, src, ui_key, "advanced_airlock_console.tmpl", name, 470, 290) - - ui.set_initial_data(data) - - ui.open() - - ui.set_auto_update(1) + return data /obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/Topic(href, href_list) if(..()) @@ -79,6 +77,13 @@ tag_secure = 1 /obj/machinery/embedded_controller/radio/airlock/airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "simple_airlock_console.tmpl", name, 470, 290) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/embedded_controller/radio/airlock/airlock_controller/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data = list( @@ -88,16 +93,7 @@ "processing" = program.memory["processing"], ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - - if(!ui) - ui = new(user, src, ui_key, "simple_airlock_console.tmpl", name, 470, 290) - - ui.set_initial_data(data) - - ui.open() - - ui.set_auto_update(1) + return data /obj/machinery/embedded_controller/radio/airlock/airlock_controller/Topic(href, href_list) if(..()) @@ -144,6 +140,13 @@ icon_state = "access_control_off" /obj/machinery/embedded_controller/radio/airlock/access_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "door_access_console.tmpl", name, 330, 220) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/embedded_controller/radio/airlock/access_controller/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data = list( @@ -152,16 +155,7 @@ "processing" = program.memory["processing"] ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - - if(!ui) - ui = new(user, src, ui_key, "door_access_console.tmpl", name, 330, 220) - - ui.set_initial_data(data) - - ui.open() - - ui.set_auto_update(1) + return data /obj/machinery/embedded_controller/radio/airlock/access_controller/Topic(href, href_list) if(..()) @@ -186,4 +180,4 @@ if(clean) program.receive_user_command(href_list["command"]) - return 1 \ No newline at end of file + return 1 diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index fcf9d56b355..b1f7d33244d 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -174,6 +174,13 @@ FIRE ALARM ui_interact(user) /obj/machinery/firealarm/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, var/master_ui = null, var/datum/topic_state/state = default_state) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "firealarm.tmpl", name, 400, 400, state = state) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/firealarm/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] var/area/A = get_area(src) @@ -186,16 +193,7 @@ FIRE ALARM var/minute = round(time / 60) data["time_left"] = "[minute ? "[minute]:" : ""][add_zero(num2text(second), 2)]" - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "firealarm.tmpl", name, 400, 400, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - - - + return data /obj/machinery/firealarm/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index 452408ccdaa..80f5e8be5d7 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -130,18 +130,19 @@ /obj/machinery/poolcontroller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "poolcontroller.tmpl", "Pool Controller Interface", 520, 410) + ui.open() + +/obj/machinery/poolcontroller/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["currentTemp"] = temperature data["emagged"] = emagged data["TempColor"] = temperaturecolor - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "poolcontroller.tmpl", "Pool Controller Interface", 520, 410) - ui.set_initial_data(data) - ui.open() - + return data /obj/machinery/poolcontroller/Topic(href, href_list) diff --git a/code/game/machinery/portable_tag_turret.dm b/code/game/machinery/portable_tag_turret.dm index deafad7f9b7..de78d46178f 100644 --- a/code/game/machinery/portable_tag_turret.dm +++ b/code/game/machinery/portable_tag_turret.dm @@ -43,18 +43,19 @@ iconholder = 1 /obj/machinery/porta_turret/tag/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/porta_turret/tag/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["access"] = !isLocked(user) data["locked"] = locked data["enabled"] = enabled data["is_lethal"] = 0 - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/porta_turret/tag/update_icon() if(!anchored) @@ -121,4 +122,4 @@ if(istype(H.belt, target_weapon)) return TURRET_SECONDARY_TARGET - return TURRET_NOT_TARGET \ No newline at end of file + return TURRET_NOT_TARGET diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 83f2dfef93f..a6eb360f45d 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -194,6 +194,13 @@ var/list/turret_icons ui_interact(user) /obj/machinery/porta_turret/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 320) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/porta_turret/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["access"] = !isLocked(user) data["screen"] = screen @@ -224,13 +231,7 @@ var/list/turret_icons active = (access in req_access) accesses[++accesses.len] = list("name" = name, "active" = active, "number" = access) data["accesses"] = accesses - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 320) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/porta_turret/proc/HasController() var/area/A = get_area(src) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 7bf9b661a24..9de1806852f 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -109,6 +109,13 @@ var/list/obj/machinery/requests_console/allConsoles = list() ui_interact(user) /obj/machinery/requests_console/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "request_console.tmpl", "[department] Request Console", 520, 410) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/requests_console/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["department"] = department @@ -129,12 +136,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() data["msgVerified"] = msgVerified data["announceAuth"] = announceAuth - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "request_console.tmpl", "[department] Request Console", 520, 410) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/requests_console/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 9705ef9dedd..c72e987cd92 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -22,6 +22,13 @@ ui_interact(user) /obj/machinery/slot_machine/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "slotmachine.tmpl", name, 350, 200) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/slot_machine/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["working"] = working @@ -30,12 +37,7 @@ data["result"] = result data["resultlvl"] = resultlvl - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "slotmachine.tmpl", name, 350, 200) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/slot_machine/Topic(href, href_list) add_fingerprint(usr) @@ -112,4 +114,4 @@ T.amount = "[amt]" T.date = current_date_string T.time = worldtime2text() - account.transaction_log.Add(T) \ No newline at end of file + account.transaction_log.Add(T) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 369cb0fc708..0fec852c2f5 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -11,7 +11,6 @@ var/calibrating var/turf/target //Used for one-time-use teleport cards (such as clown planet coordinates.) //Setting this to 1 will set src.locked to null after a player enters the portal and will not allow hand-teles to open portals to that location. - var/data[0] /obj/machinery/computer/teleporter/New() src.id = "[rand(1000, 9999)]" @@ -67,11 +66,17 @@ ui_interact(user) /obj/machinery/computer/teleporter/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(..()) - return if(stat & (NOPOWER|BROKEN)) return + // Set up the Nano UI + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "teleporter_console.tmpl", "Teleporter Console UI", 400, 400) + ui.open() + +/obj/machinery/computer/teleporter/ui_data(mob/user, datum/topic_state/state = default_state) + var/data[0] data["powerstation"] = power_station if(power_station) data["teleporterhub"] = power_station.teleporter_hub @@ -86,13 +91,7 @@ data["target"] = (!target) ? "None" : sanitize(targetarea.name) data["calibrating"] = calibrating data["locked"] = locked - - // Set up the Nano UI - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "teleporter_console.tmpl", "Teleporter Console UI", 400, 400) - ui.set_initial_data(data) - ui.open() + return data /obj/machinery/computer/teleporter/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm index d27df18523a..eda38ee6120 100644 --- a/code/game/machinery/turret_control.dm +++ b/code/game/machinery/turret_control.dm @@ -119,6 +119,13 @@ ui_interact(user) /obj/machinery/turretid/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/turretid/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["access"] = !isLocked(user) data["locked"] = locked @@ -136,12 +143,7 @@ settings[++settings.len] = list("category" = "Check Misc. Lifeforms", "setting" = "check_anomalies", "value" = check_anomalies) data["settings"] = settings - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/turretid/Topic(href, href_list, var/nowindow = 0) if(..()) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 4199bf72d68..ed6a23998c4 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -411,6 +411,12 @@ /obj/machinery/vending/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) user.set_machine(src) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "vending_machine.tmpl", src.name, 440, 600) + ui.open() + +/obj/machinery/vending/ui_data(mob/user, datum/topic_state/state = default_state) var/list/data = list() if(currently_vending) data["mode"] = 1 @@ -446,12 +452,7 @@ data["speaker"] = src.shut_up ? 0 : 1 else data["panel"] = 0 - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "vending_machine.tmpl", src.name, 440, 600) - ui.set_initial_data(data) - ui.open() + return data /obj/machinery/vending/Topic(href, href_list) if(..()) diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index f60a37be397..ea8a06961cc 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -145,7 +145,18 @@ ui_interact(user) /obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/list/data = list() + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "mech_bay_console.tmpl", "Mech Bay Control Console", 500, 325) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) + +/obj/machinery/computer/mech_bay_power_console/ui_data(mob/user, datum/topic_state/state = default_state) + var/data[0] if(!recharge_port) reconnect() if(recharge_port && !qdeleted(recharge_port)) @@ -160,20 +171,10 @@ data["mecha_charge_percentage"] = isnull(recharge_port.recharging_mecha) ? 0 : round(recharge_port.recharging_mecha.cell.percent()) else data["has_mech"] = 0 - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "mech_bay_console.tmpl", "Mech Bay Control Console", 500, 325) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) + return data /obj/machinery/computer/mech_bay_power_console/initialize() reconnect() update_icon() - return ..() \ No newline at end of file + return ..() diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index 39cda37a167..6838aae1b29 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -17,6 +17,13 @@ ui_interact(user) /obj/machinery/computer/mecha/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "exosuit_control.tmpl", "Exosuit Control Console", 420, 500) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/computer/mecha/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["screen"] = screen if(screen == 0) @@ -28,14 +35,7 @@ data["mechas"] = mechas if(screen == 1) data["log"] = stored_data - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - - if(!ui) - ui = new(user, src, ui_key, "exosuit_control.tmpl", "Exosuit Control Console", 420, 500) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/computer/mecha/Topic(href, href_list) if(..()) diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index d4668b3a69e..ab897d80ec0 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -41,6 +41,14 @@ /obj/item/device/aicard/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = inventory_state) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "aicard.tmpl", "[name]", 600, 400, state = state) + ui.open() + ui.set_auto_update(1) + + +/obj/item/device/aicard/ui_data(mob/user, datum/topic_state/state = inventory_state) var/data[0] var/mob/living/silicon/ai/AI = locate() in src @@ -59,12 +67,7 @@ data["laws"] = laws data["has_laws"] = laws.len - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "aicard.tmpl", "[name]", 600, 400, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/item/device/aicard/Topic(href, href_list, nowindow, state) diff --git a/code/game/objects/items/devices/guitar.dm b/code/game/objects/items/devices/guitar.dm index b95cea0aae3..73831d1f468 100644 --- a/code/game/objects/items/devices/guitar.dm +++ b/code/game/objects/items/devices/guitar.dm @@ -33,6 +33,9 @@ song.ui_interact(user, ui_key, ui, force_open) +/obj/item/device/guitar/ui_data(mob/user, datum/topic_state/state = default_state) + return song.ui_data(user, state) + /obj/item/device/guitar/Topic(href, href_list) song.Topic(href, href_list) diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index e37b267799b..51859fd27ac 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -99,15 +99,17 @@ /obj/item/device/radio/electropack/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "radio_electro.tmpl", "[name]", 400, 500) + ui.open() + ui.set_auto_update(1) + +/obj/item/device/radio/electropack/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["power"] = on data["freq"] = format_frequency(frequency) data["code"] = code - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "radio_electro.tmpl", "[name]", 400, 500) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) \ No newline at end of file + return data diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 74a32ebfe19..6078f855b61 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -108,6 +108,13 @@ var/global/list/default_medbay_channels = list( return ui_interact(user) /obj/item/device/radio/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 400, 550) + ui.open() + ui.set_auto_update(1) + +/obj/item/device/radio/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["mic_status"] = broadcasting @@ -126,12 +133,7 @@ var/global/list/default_medbay_channels = list( if(syndie) data["useSyndMode"] = 1 - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 400, 550) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/item/device/radio/proc/list_channels(var/mob/user) @@ -749,6 +751,13 @@ var/global/list/default_medbay_channels = list( . = ..() /obj/item/device/radio/borg/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 430, 500) + ui.open() + ui.set_auto_update(1) + +/obj/item/device/radio/borg/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["mic_status"] = broadcasting @@ -769,12 +778,7 @@ var/global/list/default_medbay_channels = list( data["has_subspace"] = 1 data["subspace"] = subspace_transmission - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 430, 500) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/item/device/radio/proc/config(op) if(radio_controller) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 9cd39c7a7d9..84b397780dc 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -90,26 +90,26 @@ ui_interact(user) /obj/item/device/transfer_valve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "transfer_valve.tmpl", "Tank Transfer Valve", 460, 280) + // open the new ui window + ui.open() + // auto update every Master Controller tick + //ui.set_auto_update(1) - // this is the data which will be sent to the ui +/obj/item/device/transfer_valve/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] + data["attachmentOne"] = tank_one ? tank_one.name : null data["attachmentTwo"] = tank_two ? tank_two.name : null data["valveAttachment"] = attached_device ? attached_device.name : null data["valveOpen"] = valve_open ? 1 : 0 - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "transfer_valve.tmpl", "Tank Transfer Valve", 460, 280) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - //ui.set_auto_update(1) + return data /obj/item/device/transfer_valve/Topic(href, href_list) ..() @@ -219,4 +219,4 @@ // this doesn't do anything but the timer etc. expects it to be here // eventually maybe have it update icon to show state (timer, prox etc.) like old bombs /obj/item/device/transfer_valve/proc/c_state() - return \ No newline at end of file + return diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index b019e2a9d95..d29e5e5ede4 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -187,8 +187,18 @@ var/list/world_uplinks = list() /* NANO UI FOR UPLINK WOOP WOOP */ -/obj/item/device/uplink/hidden/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/item/device/uplink/hidden/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = inventory_state) var/title = "Remote Uplink" + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "uplink.tmpl", title, 700, 600, state = state) + // open the new ui window + ui.open() + +/obj/item/device/uplink/hidden/ui_data(mob/user, datum/topic_state/state = inventory_state) var/data[0] data["welcome"] = welcome @@ -200,17 +210,7 @@ var/list/world_uplinks = list() data["nano_items"] = nanoui_items data += nanoui_data - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "uplink.tmpl", title, 700, 600, state = inventory_state) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - + return data // Interaction code. Gathers a list of items purchasable from the paren't uplink and displays it. It also adds a lock button. /obj/item/device/uplink/hidden/interact(mob/user) diff --git a/code/game/objects/items/devices/violin.dm b/code/game/objects/items/devices/violin.dm index 7a3d304309d..7802e832fde 100644 --- a/code/game/objects/items/devices/violin.dm +++ b/code/game/objects/items/devices/violin.dm @@ -38,5 +38,8 @@ song.ui_interact(user, ui_key, ui, force_open) +/obj/item/device/violin/ui_data(mob/user, datum/topic_state/state = default_state) + return song.ui_data(user, state) + /obj/item/device/violin/Topic(href, href_list) song.Topic(href, href_list) diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 8eb92562b7f..0a503aa7cb9 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -83,7 +83,14 @@ RCD ui_interact(user) /obj/item/weapon/rcd/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = inventory_state) - var/list/data = list() + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "rcd.tmpl", "[name]", 400, 400, state = state) + ui.open() + ui.set_auto_update(1) + +/obj/item/weapon/rcd/ui_data(mob/user, datum/topic_state/state = inventory_state) + var/data[0] data["mode"] = mode data["door_type"] = door_type data["menu"] = menu @@ -100,12 +107,7 @@ RCD data["door_accesses"] = door_accesses_list - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "rcd.tmpl", "[name]", 400, 400, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/item/weapon/rcd/Topic(href, href_list, nowindow, state) if(..()) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index ae28bd61d17..5dbcc68ab2b 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -80,11 +80,11 @@ /obj/item/weapon/tank/examine(mob/user) if(!..(user, 0)) return - + var/obj/icon = src if(istype(loc, /obj/item/assembly)) icon = loc - + if(!in_range(src, user)) if(icon == src) to_chat(user, "It's \a [bicon(icon)][src]! If you want any more information you'll need to get closer.") @@ -141,14 +141,24 @@ ui_interact(user) /obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "tanks.tmpl", "Tank", 500, 300) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) +/obj/item/weapon/tank/ui_data(mob/user, datum/topic_state/state = default_state) var/using_internal - if(istype(loc,/mob/living/carbon)) - var/mob/living/carbon/location = loc - if(location.internal==src) + if(iscarbon(loc)) + var/mob/living/carbon/C = loc + if(C.internal == src) using_internal = 1 - // this is the data which will be sent to the ui var/data[0] data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) @@ -170,18 +180,7 @@ if(H.head && (H.head.flags & AIRTIGHT)) data["maskConnected"] = 1 - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "tanks.tmpl", "Tank", 500, 300) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) + return data /obj/item/weapon/tank/Topic(href, href_list) if(..()) diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index 563f9c5faa9..c28ebe05c55 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -113,6 +113,16 @@ repeat = 0 /datum/song/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + if(!instrumentObj) + return + + ui = nanomanager.try_update_ui(user, instrumentObj, ui_key, ui, force_open) + if(!ui) + ui = new(user, instrumentObj, ui_key, "song.tmpl", instrumentObj.name, 700, 500) + ui.open() + ui.set_auto_update(1) + +/datum/song/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["lines"] = lines @@ -125,15 +135,7 @@ data["minTempo"] = world.tick_lag data["maxTempo"] = 600 - if(!instrumentObj) - return - - ui = nanomanager.try_update_ui(user, instrumentObj, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, instrumentObj, ui_key, "song.tmpl", instrumentObj.name, 700, 500) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /datum/song/Topic(href, href_list) if(!in_range(instrumentObj, usr) || (issilicon(usr) && instrumentObj.loc != usr) || !isliving(usr) || !usr.canmove || usr.restrained()) @@ -294,6 +296,9 @@ song.ui_interact(user, ui_key, ui, force_open) +/obj/structure/piano/ui_data(mob/user, datum/topic_state/state = default_state) + return song.ui_data(user, state) + /obj/structure/piano/Topic(href, href_list) song.Topic(href, href_list) diff --git a/code/modules/awaymissions/bluespaceartillery.dm b/code/modules/awaymissions/bluespaceartillery.dm index 00263352325..9eb71904de5 100644 --- a/code/modules/awaymissions/bluespaceartillery.dm +++ b/code/modules/awaymissions/bluespaceartillery.dm @@ -7,18 +7,26 @@ var/last_fire = 0 var/reload_cooldown = 180 // 3 minute cooldown var/area/targetarea - + light_color = LIGHT_COLOR_LIGHTBLUE /obj/machinery/computer/artillerycontrol/attack_ai(user as mob) to_chat(user, "Access denied.") return - + /obj/machinery/computer/artillerycontrol/attack_hand(user as mob) ui_interact(user) - + /obj/machinery/computer/artillerycontrol/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "bluespace_artillery.tmpl", "Bluespace Control", 400, 260) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/computer/artillerycontrol/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] + var/time_to_wait = round(reload_cooldown - ((world.time / 10) - last_fire), 1) var/mins = round(time_to_wait / 60) var/seconds = time_to_wait - (60*mins) @@ -30,32 +38,26 @@ else data["target"] = "No Lock" - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + return data - if(!ui) - ui = new(user, src, ui_key, "bluespace_artillery.tmpl", "Bluespace Control", 400, 260) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - /obj/machinery/computer/artillerycontrol/Topic(href, href_list) if(..()) return 1 - - if(href_list["area"]) + + if(href_list["area"]) var/A A = input("Select the target area.", "Select Area", A) in ghostteleportlocs|null var/area/thearea = ghostteleportlocs[A] if(..() || !istype(thearea)) return - + targetarea = thearea - + if(href_list["fire"]) var/delta = (world.time / 10) - last_fire if(reload_cooldown > delta) return 1 - + command_announcement.Announce("Bluespace artillery fire detected. Brace for impact.") message_admins("[key_name_admin(usr)] has launched an artillery strike.", 1) var/list/L = list() @@ -64,7 +66,7 @@ var/loc = pick(L) explosion(loc,2,5,11) last_fire = world.time / 10 - + nanomanager.update_uis(src) /obj/structure/artilleryplaceholder diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 085e57eb25b..7e5dfcad115 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -504,11 +504,18 @@ cell.use(cost*10) return 1 -/obj/item/weapon/rig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/nano_state = inventory_state) +/obj/item/weapon/rig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = inventory_state) if(!user) return - var/list/data = list() + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550, state = state) + ui.open() + ui.set_auto_update(1) + +/obj/item/weapon/rig/ui_data(mob/user, datum/topic_state/state = inventory_state) + var/data[0] data["primarysystem"] = null if(selected_module) @@ -575,12 +582,7 @@ if(module_list.len) data["modules"] = module_list - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550, state = nano_state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/item/weapon/rig/update_icon(var/update_mob_icon) diff --git a/code/modules/economy/Accounts_DB.dm b/code/modules/economy/Accounts_DB.dm index 5a3a5814a70..1b238acea6e 100644 --- a/code/modules/economy/Accounts_DB.dm +++ b/code/modules/economy/Accounts_DB.dm @@ -76,10 +76,16 @@ /obj/machinery/computer/account_database/attack_hand(mob/user as mob) ui_interact(user) -/obj/machinery/computer/account_database/ui_interact(mob/user, ui_key="main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/machinery/computer/account_database/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) user.set_machine(src) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "accounts_terminal.tmpl", src.name, 400, 640) + ui.open() +/obj/machinery/computer/account_database/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] + data["src"] = UID() data["id_inserted"] = !!held_card data["id_card"] = held_card ? text("[held_card.registered_name], [held_card.assignment]") : "-----" @@ -122,11 +128,7 @@ if(accounts.len > 0) data["accounts"] = accounts - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "accounts_terminal.tmpl", src.name, 400, 640) - ui.set_initial_data(data) - ui.open() + return data /obj/machinery/computer/account_database/Topic(href, href_list) if(..()) diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 2446b74ad22..4c487d05afb 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -317,7 +317,14 @@ /obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) user.set_machine(src) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "smartfridge.tmpl", name, 400, 500) + ui.open() + +/obj/machinery/smartfridge/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] + data["contents"] = null data["electrified"] = seconds_electrified > 0 data["shoot_inventory"] = shoot_inventory @@ -334,11 +341,7 @@ if(items.len > 0) data["contents"] = items - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "smartfridge.tmpl", name, 400, 500) - ui.set_initial_data(data) - ui.open() + return data /obj/machinery/smartfridge/Topic(href, href_list) if(..()) return 0 @@ -410,4 +413,4 @@ to_chat(usr, "Access denied.") nanomanager.update_uis(src) return 0 - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index 42323841094..c50503d7aa5 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -157,11 +157,17 @@ degrade_upper = 70 - (tier * 10) //Tier 1: 60, Tier 4: 30 /obj/machinery/botany/extractor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(!user) return - var/list/data = list() + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "botany_isolator.tmpl", "Lysis-isolation Centrifuge UI", 470, 450) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/botany/extractor/ui_data(mob/user, datum/topic_state/state = default_state) + var/data[0] var/list/geneMasks[0] for(var/gene_tag in plant_controller.gene_tag_list) @@ -190,12 +196,7 @@ data["hasGenetics"] = 0 data["sourceName"] = 0 - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "botany_isolator.tmpl", "Lysis-isolation Centrifuge UI", 470, 450) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/botany/Topic(href, href_list) @@ -308,11 +309,17 @@ degrade_upper = 11 - tier //Tier 1: 10, Tier 4: 6 /obj/machinery/botany/editor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(!user) return - var/list/data = list() + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "botany_editor.tmpl", "Bioballistic Delivery UI", 470, 450) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/botany/editor/ui_data(mob/user, datum/topic_state/state = default_state) + var/data[0] data["activity"] = active @@ -340,12 +347,7 @@ else data["loaded"] = 0 - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "botany_editor.tmpl", "Bioballistic Delivery UI", 470, 450) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/botany/editor/Topic(href, href_list) diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 539832d9c08..ed5ba8ce49a 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -37,19 +37,23 @@ var/global/list/default_pai_software = list() ui_interact(src) -/mob/living/silicon/pai/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) - if(user != src) - if(ui) ui.set_status(STATUS_CLOSE, 0) - return - +/mob/living/silicon/pai/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = self_state) if(ui_key != "main") var/datum/pai_software/S = software[ui_key] if(S && !S.toggle) S.on_ui_interact(src, ui, force_open) else - if(ui) ui.set_status(STATUS_CLOSE, 0) + if(ui) + ui.set_status(STATUS_CLOSE, 0) return + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "pai_interface.tmpl", "pAI Software Interface", 450, 600, state = state) + ui.open() + ui.set_auto_update(1) + +/mob/living/silicon/pai/ui_data(mob/user, datum/topic_state/state = self_state) var/data[0] // Software we have bought @@ -84,12 +88,7 @@ var/global/list/default_pai_software = list() data["emotions"] = emotions data["current_emotion"] = card.current_emotion - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "pai_interface.tmpl", "pAI Software Interface", 450, 600) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /mob/living/silicon/pai/Topic(href, href_list) if(..()) @@ -122,4 +121,4 @@ var/global/list/default_pai_software = list() var/img = text2num(href_list["image"]) if(1 <= img && img <= 9) card.setEmotion(img) - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/nano/modules/alarm_monitor.dm b/code/modules/nano/modules/alarm_monitor.dm index b6a8a70780d..cf90b61bf29 100644 --- a/code/modules/nano/modules/alarm_monitor.dm +++ b/code/modules/nano/modules/alarm_monitor.dm @@ -56,6 +56,13 @@ return 1 /datum/nano_module/alarm_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "alarm_monitor.tmpl", "Alarm Monitoring Console", 800, 800, state = state) + ui.open() + ui.set_auto_update(1) + +/datum/nano_module/alarm_monitor/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] var/categories[0] @@ -80,9 +87,4 @@ "lost_sources" = lost_sources.len ? sanitize(english_list(lost_sources, nothing_text = "", and_text = ", ")) : "")) data["categories"] = categories - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "alarm_monitor.tmpl", "Alarm Monitoring Console", 800, 800, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data diff --git a/code/modules/nano/modules/atmos_control.dm b/code/modules/nano/modules/atmos_control.dm index e43585243ae..ee776ba4467 100644 --- a/code/modules/nano/modules/atmos_control.dm +++ b/code/modules/nano/modules/atmos_control.dm @@ -29,20 +29,21 @@ alarm.ui_interact(usr, master_ui = ui_ref, state = TS) /datum/nano_module/atmos_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/master_ui = null, var/datum/topic_state/state = default_state) - var/data[0] - data["alarms"] = air_alarm_repository.air_alarm_data(monitored_alarms) - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "atmos_control.tmpl", src.name, 900, 800, state = state) ui.add_template("mapContent", "atmos_control_map_content.tmpl") ui.add_template("mapHeader", "atmos_control_map_header.tmpl") ui.set_show_map(1) - ui.set_initial_data(data) ui.open() ui.set_auto_update(1) ui_ref = ui +/datum/nano_module/atmos_control/ui_data(mob/user, datum/topic_state/state = default_state) + var/data[0] + data["alarms"] = air_alarm_repository.air_alarm_data(monitored_alarms) + return data + /datum/nano_module/atmos_control/proc/generate_state(air_alarm) var/datum/topic_state/air_alarm/state = new() state.atmos_control = src diff --git a/code/modules/nano/modules/crew_monitor.dm b/code/modules/nano/modules/crew_monitor.dm index ce89f59947b..c5f8f6ecfb8 100644 --- a/code/modules/nano/modules/crew_monitor.dm +++ b/code/modules/nano/modules/crew_monitor.dm @@ -17,14 +17,7 @@ return 1 /datum/nano_module/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) - - var/data[0] - var/turf/T = get_turf(nano_host()) - - data["isAI"] = isAI(user) - data["crewmembers"] = crew_repository.health_data(T) - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "crew_monitor.tmpl", "Crew Monitoring Computer", 900, 800) @@ -33,8 +26,16 @@ // adding a template with the key "mapHeader" replaces the map header content ui.add_template("mapHeader", "crew_monitor_map_header.tmpl") - ui.set_initial_data(data) ui.open() // should make the UI auto-update; doesn't seem to? ui.set_auto_update(1) + +/datum/nano_module/crew_monitor/ui_data(mob/user, datum/topic_state/state = default_state) + var/data[0] + var/turf/T = get_turf(nano_host()) + + data["isAI"] = isAI(user) + data["crewmembers"] = crew_repository.health_data(T) + + return data diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm index 21c14077886..8bc9058db37 100644 --- a/code/modules/nano/modules/human_appearance.dm +++ b/code/modules/nano/modules/human_appearance.dm @@ -211,6 +211,13 @@ return 0 /datum/nano_module/appearance_changer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "appearance_changer.tmpl", "[src]", 800, 450, state = state) + ui.open() + ui.set_auto_update(1) + +/datum/nano_module/appearance_changer/ui_data(mob/user, datum/topic_state/state = default_state) generate_data(check_whitelist, whitelist, blacklist) var/data[0] @@ -302,12 +309,8 @@ data["change_head_marking_color"] = can_change_markings("head") data["change_body_marking_color"] = can_change_markings("body") data["change_tail_marking_color"] = can_change_markings("tail") - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "appearance_changer.tmpl", "[src]", 800, 450, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + + return data /datum/nano_module/appearance_changer/proc/update_dna() if(owner && (flags & APPEARANCE_UPDATE_DNA)) diff --git a/code/modules/nano/modules/law_manager.dm b/code/modules/nano/modules/law_manager.dm index 9f10759dbe5..0d79f719677 100644 --- a/code/modules/nano/modules/law_manager.dm +++ b/code/modules/nano/modules/law_manager.dm @@ -148,6 +148,13 @@ return 0 /datum/nano_module/law_manager/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "law_manager.tmpl", sanitize("[src] - [owner.name]"), 800, is_malf(user) ? 600 : 400, state = state) + ui.open() + ui.set_auto_update(1) + +/datum/nano_module/law_manager/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] owner.lawsync() @@ -176,12 +183,7 @@ data["channels"] = channels data["law_sets"] = package_multiple_laws(data["isAdmin"] ? admin_laws : player_laws) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "law_manager.tmpl", sanitize("[src] - [owner.name]"), 800, is_malf(user) ? 600 : 400, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /datum/nano_module/law_manager/proc/package_laws(var/list/data, var/field, var/list/datum/ai_law/laws) var/packaged_laws[0] diff --git a/code/modules/nano/modules/power_monitor.dm b/code/modules/nano/modules/power_monitor.dm index 9b9ccc8a060..1ebe6e99c9f 100644 --- a/code/modules/nano/modules/power_monitor.dm +++ b/code/modules/nano/modules/power_monitor.dm @@ -12,6 +12,13 @@ powermonitor = nano_host() /datum/nano_module/power_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "power_monitor.tmpl", "Power Monitoring Console", 800, 700, state = state) + ui.open() + ui.set_auto_update(1) + +/datum/nano_module/power_monitor/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["powermonitor"] = powermonitor @@ -28,12 +35,7 @@ data["powerdemand"] = powermonitor.powernet.load data["apcs"] = apc_repository.apc_data(powermonitor) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "power_monitor.tmpl", "Power Monitoring Console", 800, 700, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /datum/nano_module/power_monitor/Topic(href, href_list) if(..()) diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm index c463f895158..288a9df2255 100644 --- a/code/modules/nano/nanoexternal.dm +++ b/code/modules/nano/nanoexternal.dm @@ -28,7 +28,7 @@ /** * The ui_interact proc is used to open and update Nano UIs * If ui_interact is not used then the UI will not update correctly - * ui_interact is currently defined for /atom/movable + * ui_interact is currently defined for /datum * * @param user /mob The mob who is interacting with this ui * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") @@ -40,5 +40,16 @@ /datum/proc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nano_ui/master_ui = null, var/datum/topic_state/state = default_state) return +/** + * The ui_data proc is used to get data for the interface + * + * @param user /mob The mob who is viewing this ui + * @param state /datum/topic_state Current topic state of the UI + * + * @return list() + */ +/datum/proc/ui_data(mob/user, datum/topic_state/state = default_state) + return list() + // Used by the Nano UI Manager (/datum/nanomanager) to track UIs opened by this mob /mob/var/list/open_uis = list() diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm index 355397ef6cf..2d0fe09c887 100644 --- a/code/modules/nano/nanomanager.dm +++ b/code/modules/nano/nanomanager.dm @@ -10,7 +10,7 @@ * Get an open /nanoui ui for the current user, src_object and ui_key and try to update it with data * * @param user /mob The mob who opened/owns the ui - * @param src_object /obj|/mob The obj or mob which the ui belongs to + * @param src_object /datum The datum which the ui belongs to * @param ui_key string A string key used for the ui * @param ui /datum/nanoui An existing instance of the ui (can be null) * @param data list The data to be passed to the ui, if it exists @@ -18,19 +18,17 @@ * * @return /nanoui Returns the found ui, for null if none exists */ -/datum/nanomanager/proc/try_update_ui(var/mob/user, src_object, ui_key, var/datum/nanoui/ui, data, var/force_open = 0) +/datum/nanomanager/proc/try_update_ui(var/mob/user, var/datum/src_object, ui_key, var/datum/nanoui/ui, var/force_open = 0) if(isnull(ui)) // no ui has been passed, so we'll search for one - { ui = get_open_ui(user, src_object, ui_key) - } + if(!isnull(ui)) - // The UI is already open + var/data = src_object.ui_data(user, ui.state) // Get data from src_object. if(!force_open) ui.push_data(data) - return ui else - //testing("nanomanager/try_update_ui mob [user.name] [src_object:name] [ui_key] [force_open] - forcing opening of ui") - ui.close() + ui.reinitialize(null, data) + return ui return null /** @@ -227,4 +225,4 @@ oldMob.open_uis.Cut() - return 1 // success \ No newline at end of file + return 1 // success diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index cd381a786de..be5ad871a36 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -46,7 +46,7 @@ nanoui is used to open and update nano browser uis // the map z level to display var/map_z_level = 1 // initial data, containing the full data structure, must be sent to the ui (the data structure cannot be extended later on) - var/list/initial_data[0] + var/list/initial_data = null // Initialize as null for proper ! usage in initial set up // set to 1 to update the ui automatically every master_controller tick var/is_auto_updating = 0 // the current status/visibility of the ui @@ -405,19 +405,34 @@ nanoui is used to open and update nano browser uis /datum/nanoui/proc/open() if(!user.client) return + var/window_size = "" if(width && height) window_size = "size=[width]x[height];" + update_status(0) if(status == STATUS_CLOSE) return + if(!initial_data) + set_initial_data(src_object.ui_data(user, state)) // Get the UI data. + user << browse(get_html(), "window=[window_id];[window_size][window_options]") winset(user, "mapwindow.map", "focus=true") // return keyboard focus to map on_close_winset() //onclose(user, window_id) nanomanager.ui_opened(src) +/** + * Reinitialize the UI with + */ +/datum/nanoui/proc/reinitialize(template, list/data) + if(template) + add_template("main", template) + if(data) + set_initial_data(data) + open() + /** * Close this UI * diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index 9aff6687f6e..27a671590db 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -57,7 +57,14 @@ var/list/alldepartments = list() to_chat(user, "You swipe the card through [src], but nothing happens.") /obj/machinery/photocopier/faxmachine/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "faxmachine.tmpl", "Fax Machine UI", 540, 450) + ui.open() + +/obj/machinery/photocopier/faxmachine/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] + if(scan) data["scan_name"] = scan.name else @@ -82,11 +89,7 @@ var/list/alldepartments = list() else data["respectcooldown"] = 0 - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "faxmachine.tmpl", "Fax Machine UI", 540, 450) - ui.set_initial_data(data) - ui.open() + return data /obj/machinery/photocopier/faxmachine/Topic(href, href_list) if(..()) @@ -128,7 +131,7 @@ var/list/alldepartments = list() var/list/combineddepartments = alldepartments if(long_range_enabled) combineddepartments += admin_departments - + if(emagged) combineddepartments += hidden_admin_departments diff --git a/code/modules/pda/PDA.dm b/code/modules/pda/PDA.dm index fafa27a24f7..ed7c380c426 100755 --- a/code/modules/pda/PDA.dm +++ b/code/modules/pda/PDA.dm @@ -99,7 +99,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if((!istype(over_object, /obj/screen)) && can_use()) return attack_self(M) -/obj/item/device/pda/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/item/device/pda/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = inventory_state) ui_tick++ var/datum/nanoui/old_ui = nanomanager.get_open_ui(user, src, "main") var/auto_update = 1 @@ -115,8 +115,22 @@ var/global/list/obj/item/device/pda/PDAs = list() var/title = "Personal Data Assistant" - var/data[0] // This is the data that will be sent to the PDA + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "pda.tmpl", title, 630, 600, state = state) + ui.set_state_key("pda") + // open the new ui window + ui.open() + + // auto update every Master Controller tick + ui.set_auto_update(auto_update) + +/obj/item/device/pda/ui_data(mob/user, datum/topic_state/state = inventory_state) + var/data[0] data["owner"] = owner // Who is your daddy... data["ownjob"] = ownjob // ...and what does he do? @@ -164,21 +178,7 @@ var/global/list/obj/item/device/pda/PDAs = list() "template" = current_app.template, "has_back" = current_app.has_back) - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "pda.tmpl", title, 630, 600, state = inventory_state) - ui.set_state_key("pda") - - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - - // auto update every Master Controller tick - ui.set_auto_update(auto_update) + return data /obj/item/device/pda/attack_self(mob/user as mob) user.set_machine(src) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index b8ee00a9a5d..c91127d7f54 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -778,63 +778,64 @@ if(!user) return - var/list/data = list( - "locked" = is_locked(user), - "isOperating" = operating, - "externalPower" = main_status, - "powerCellStatus" = cell ? cell.percent() : null, - "chargeMode" = chargemode, - "chargingStatus" = charging, - "totalLoad" = round(lastused_equip + lastused_light + lastused_environ), - "coverLocked" = coverlocked, - "siliconUser" = istype(user, /mob/living/silicon), - "malfStatus" = get_malf_status(user), - - "powerChannels" = list( - list( - "title" = "Equipment", - "powerLoad" = round(lastused_equip), - "status" = equipment, - "topicParams" = list( - "auto" = list("eqp" = 3), - "on" = list("eqp" = 2), - "off" = list("eqp" = 1) - ) - ), - list( - "title" = "Lighting", - "powerLoad" = round(lastused_light), - "status" = lighting, - "topicParams" = list( - "auto" = list("lgt" = 3), - "on" = list("lgt" = 2), - "off" = list("lgt" = 1) - ) - ), - list( - "title" = "Environment", - "powerLoad" = round(lastused_environ), - "status" = environ, - "topicParams" = list( - "auto" = list("env" = 3), - "on" = list("env" = 2), - "off" = list("env" = 1) - ) - ) - ) - ) - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) // the ui does not exist, so we'll create a new one - ui = new(user, src, ui_key, "apc.tmpl", "[area.name] - APC", 510, data["siliconUser"] ? 535 : 460) - // When the UI is first opened this is the data it will use - ui.set_initial_data(data) + ui = new(user, src, ui_key, "apc.tmpl", "[area.name] - APC", 510, issilicon(user) ? 535 : 460) ui.open() // Auto update every Master Controller tick ui.set_auto_update(1) +/obj/machinery/power/apc/ui_data(mob/user, datum/topic_state/state = default_state) + var/data[0] + data["locked"] = is_locked(user) + data["isOperating"] = operating + data["externalPower"] = main_status + data["powerCellStatus"] = cell ? cell.percent() : null + data["chargeMode"] = chargemode + data["chargingStatus"] = charging + data["totalLoad"] = round(lastused_equip + lastused_light + lastused_environ) + data["coverLocked"] = coverlocked + data["siliconUser"] = istype(user, /mob/living/silicon) + data["malfStatus"] = get_malf_status(user) + + var/powerChannels[0] + powerChannels[++powerChannels.len] = list( + "title" = "Equipment", + "powerLoad" = round(lastused_equip), + "status" = equipment, + "topicParams" = list( + "auto" = list("eqp" = 3), + "on" = list("eqp" = 2), + "off" = list("eqp" = 1) + ) + ) + powerChannels[++powerChannels.len] = list( + "title" = "Lighting", + "powerLoad" = round(lastused_light), + "status" = lighting, + "topicParams" = list( + "auto" = list("lgt" = 3), + "on" = list("lgt" = 2), + "off" = list("lgt" = 1) + ) + ) + powerChannels[++powerChannels.len] = list( + "title" = "Environment", + "powerLoad" = round(lastused_environ), + "status" = environ, + "topicParams" = list( + "auto" = list("env" = 3), + "on" = list("env" = 2), + "off" = list("env" = 1) + ) + ) + + data["powerChannels"] = powerChannels + + return data + /obj/machinery/power/apc/proc/report() return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_equip+lastused_light+lastused_environ]) : [cell? cell.percent() : "N/C"] ([charging])" diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index fdb9fe34ae1..4a35e57764c 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -321,7 +321,15 @@ if(IsBroken()) return + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "pacman.tmpl", src.name, 500, 560) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/power/port_gen/pacman/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] + data["active"] = active if(istype(user, /mob/living/silicon/ai)) data["is_ai"] = 1 @@ -329,6 +337,7 @@ data["is_ai"] = 1 else data["is_ai"] = 0 + data["output_set"] = power_output data["output_max"] = max_power_output data["output_safe"] = max_safe_output @@ -342,12 +351,7 @@ data["fuel_usage"] = active ? round((power_output / time_per_sheet) * 1000) : 0 data["fuel_type"] = sheet_name - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "pacman.tmpl", src.name, 500, 560) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/power/port_gen/pacman/Topic(href, href_list) if(..()) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 4af4ccaeee4..62557e85384 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -363,8 +363,21 @@ if(stat & BROKEN) return - // this is the data which will be sent to the ui + + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "smes.tmpl", "SMES Power Storage Unit", 540, 380) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) + +/obj/machinery/power/smes/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] + data["nameTag"] = name_tag data["storedCapacity"] = round(100.0*charge/capacity, 0.1) data["charging"] = inputting @@ -383,18 +396,7 @@ else data["outputting"] = 0 // smes is not outputting - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "smes.tmpl", "SMES Power Storage Unit", 540, 380) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) + return data /obj/machinery/power/smes/Topic(href, href_list) if(..()) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index a6a54c75feb..98d899cdbca 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -389,8 +389,14 @@ ui_interact(user) /obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "solar_control.tmpl", name, 490, 420) + ui.open() + ui.set_auto_update(1) - var/data = list() +/obj/machinery/power/solar_control/ui_data(mob/user, datum/topic_state/state = default_state) + var/data[0] data["generated"] = round(lastgen) data["angle"] = cdir @@ -403,12 +409,7 @@ data["connected_panels"] = connected_panels.len data["connected_tracker"] = (connected_tracker ? 1 : 0) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "solar_control.tmpl", name, 490, 420) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/power/solar_control/attackby(I as obj, user as mob, params) if(istype(I, /obj/item/weapon/screwdriver)) @@ -535,4 +536,4 @@ /obj/item/weapon/paper/solar name = "paper- 'Going green! Setup your own solar array instructions.'" - info = "

                Welcome

                At greencorps we love the environment, and space. With this package you are able to help mother nature and produce energy without any usage of fossil fuel or plasma! Singularity energy is dangerous while solar energy is safe, which is why it's better. Now here is how you setup your own solar array.

                You can make a solar panel by wrenching the solar assembly onto a cable node. Adding a glass panel, reinforced or regular glass will do, will finish the construction of your solar panel. It is that easy!

                Now after setting up 19 more of these solar panels you will want to create a solar tracker to keep track of our mother nature's gift, the sun. These are the same steps as before except you insert the tracker equipment circuit into the assembly before performing the final step of adding the glass. You now have a tracker! Now the last step is to add a computer to calculate the sun's movements and to send commands to the solar panels to change direction with the sun. Setting up the solar computer is the same as setting up any computer, so you should have no trouble in doing that. You do need to put a wire node under the computer, and the wire needs to be connected to the tracker.

                Congratulations, you should have a working solar array. If you are having trouble, here are some tips. Make sure all solar equipment are on a cable node, even the computer. You can always deconstruct your creations if you make a mistake.

                That's all to it, be safe, be green!

                " \ No newline at end of file + info = "

                Welcome

                At greencorps we love the environment, and space. With this package you are able to help mother nature and produce energy without any usage of fossil fuel or plasma! Singularity energy is dangerous while solar energy is safe, which is why it's better. Now here is how you setup your own solar array.

                You can make a solar panel by wrenching the solar assembly onto a cable node. Adding a glass panel, reinforced or regular glass will do, will finish the construction of your solar panel. It is that easy!

                Now after setting up 19 more of these solar panels you will want to create a solar tracker to keep track of our mother nature's gift, the sun. These are the same steps as before except you insert the tracker equipment circuit into the assembly before performing the final step of adding the glass. You now have a tracker! Now the last step is to add a computer to calculate the sun's movements and to send commands to the solar panels to change direction with the sun. Setting up the solar computer is the same as setting up any computer, so you should have no trouble in doing that. You do need to put a wire node under the computer, and the wire needs to be connected to the tracker.

                Congratulations, you should have a working solar array. If you are having trouble, here are some tips. Make sure all solar equipment are on a cable node, even the computer. You can always deconstruct your creations if you make a mistake.

                That's all to it, be safe, be green!

                " diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 420733f7c76..e0be4e3c0a0 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -259,6 +259,13 @@ // This is purely informational UI that may be accessed by AIs or robots /obj/machinery/power/supermatter_shard/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "supermatter_crystal.tmpl", "Supermatter Crystal", 500, 300) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/power/supermatter_shard/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["integrity_percentage"] = round(get_integrity()) @@ -277,12 +284,7 @@ else data["detonating"] = 0 - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "supermatter_crystal.tmpl", "Supermatter Crystal", 500, 300) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/power/supermatter_shard/proc/transfer_energy() for(var/obj/machinery/power/rad_collector/R in rad_collectors) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 5103f246a27..acbdc19b659 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -107,22 +107,30 @@ * * @return nothing */ - /obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) if(broken_requirements.len) to_chat(user, "[src] is broken. [broken_requirements[broken_requirements[1]]]") return + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "chem_dispenser.tmpl", ui_title, 390, 655) + // open the new ui window + ui.open() - // this is the data which will be sent to the ui +/obj/machinery/chem_dispenser/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] + data["amount"] = amount data["energy"] = round(energy) data["maxEnergy"] = round(max_energy) data["isBeakerLoaded"] = beaker ? 1 : 0 - var beakerContents[0] - var beakerCurrentVolume = 0 + var/beakerContents[0] + var/beakerCurrentVolume = 0 if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) for(var/datum/reagent/R in beaker.reagents.reagent_list) beakerContents.Add(list(list("name" = R.name, "id"=R.id, "volume" = R.volume))) // list in a list because Byond merges the first list... @@ -136,23 +144,14 @@ data["beakerCurrentVolume"] = null data["beakerMaxVolume"] = null - var chemicals[0] + var/chemicals[0] for(var/re in dispensable_reagents) var/datum/reagent/temp = chemical_reagents_list[re] if(temp) chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("dispense" = temp.id)))) // list in a list because Byond merges the first list... data["chemicals"] = chemicals - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "chem_dispenser.tmpl", ui_title, 390, 655) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() + return data /obj/machinery/chem_dispenser/Topic(href, href_list) if(..()) diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 28d1f4c2afa..bd32fcee6cd 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -130,7 +130,15 @@ if(user.stat || user.restrained()) return + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui) + if(!ui) + ui = new(user, src, ui_key, "chem_heater.tmpl", "ChemHeater", 350, 270) + ui.open() + +/obj/machinery/chem_heater/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] + data["targetTemp"] = desired_temp data["isActive"] = on data["isBeakerLoaded"] = beaker ? 1 : 0 @@ -140,15 +148,10 @@ data["beakerMaxVolume"] = beaker ? beaker.volume : null //copy-pasted from chem dispenser - var beakerContents[0] + var/beakerContents[0] if(beaker) for(var/datum/reagent/R in beaker.reagents.reagent_list) beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list... data["beakerContents"] = beakerContents - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) - if(!ui) - ui = new(user, src, ui_key, "chem_heater.tmpl", "ChemHeater", 350, 270) - ui.set_initial_data(data) - ui.open() \ No newline at end of file + return data \ No newline at end of file diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index b6b0de6e0a0..3ef20cff9b3 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -319,12 +319,17 @@ ui_interact(user) return -/obj/machinery/chem_master/ui_interact(mob/user, ui_key="main", datum/nanoui/ui = null, force_open = 1) - +/obj/machinery/chem_master/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) var/datum/asset/chem_master/assets = get_asset_datum(/datum/asset/chem_master) assets.send(user) - var/data = list() + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "chem_master.tmpl", name, 575, 400) + ui.open() + +/obj/machinery/chem_master/ui_data(mob/user, datum/topic_state/state = default_state) + var/data[0] data["condi"] = condi data["loaded_pill_bottle"] = (loaded_pill_bottle ? 1 : 0) @@ -347,11 +352,7 @@ data["bottlesprite"] = bottlesprite data["mode"] = mode - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "chem_master.tmpl", name, 575, 400) - ui.set_initial_data(data) - ui.open() + return data /obj/machinery/chem_master/proc/isgoodnumber(num) if(isnum(num)) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 232d2a9b3c5..98468d9df59 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -253,6 +253,13 @@ return /obj/machinery/disposal/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "disposal_bin.tmpl", "Waste Disposal Unit", 395, 250) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/disposal/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] var/pressure = Clamp(100* air_contents.return_pressure() / (SEND_PRESSURE), 0, 100) @@ -271,13 +278,7 @@ data["pumpstatus"] = "Idle" data["pressure"] = pressure_round - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - - if(!ui) - ui = new(user, src, ui_key, "disposal_bin.tmpl", "Waste Disposal Unit", 395, 250) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data /obj/machinery/disposal/Topic(href, href_list) if(usr.loc == src) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 84fc3573bae..a39c6485fc7 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -647,7 +647,13 @@ won't update every console in existence) but it's more of a hassle to do. Also, /obj/machinery/computer/rdconsole/ui_interact(mob/user, ui_key="main", var/datum/nanoui/ui = null, var/force_open = 1) user.set_machine(src) - var/data = list() + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "r_n_d.tmpl", src.name, 800, 550) + ui.open() + +/obj/machinery/computer/rdconsole/ui_data(mob/user, datum/topic_state/state = default_state) + var/data[0] files.RefreshResearch() @@ -857,11 +863,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, loaded_chemical["volume"] = R.volume loaded_chemical["id"] = R.id - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "r_n_d.tmpl", src.name, 800, 550) - ui.set_initial_data(data) - ui.open() + return data //helper proc that guarantees the wait message will not freeze the UI /obj/machinery/computer/rdconsole/proc/add_wait_message(message, delay) diff --git a/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm b/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm index 8bb917d3df4..c231912484b 100644 --- a/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm +++ b/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm @@ -112,11 +112,21 @@ coolant_purity = total_purity / fresh_coolant /obj/machinery/radiocarbon_spectrometer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(user.stat) return - // this is the data which will be sent to the ui + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "geoscanner.tmpl", "High Res Radiocarbon Spectrometer", 900, 825) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) + +/obj/machinery/radiocarbon_spectrometer/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["scanned_item"] = (scanned_item ? scanned_item.name : "") data["scanned_item_desc"] = (scanned_item ? (scanned_item.desc ? scanned_item.desc : "No information on record.") : "") @@ -141,19 +151,7 @@ data["radiation"] = round(radiation) data["t_left_radspike"] = round(t_left_radspike) data["rad_shield_on"] = rad_shield - - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "geoscanner.tmpl", "High Res Radiocarbon Spectrometer", 900, 825) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) + return data /obj/machinery/radiocarbon_spectrometer/process() if(scanning) diff --git a/code/modules/security_levels/keycard authentication.dm b/code/modules/security_levels/keycard authentication.dm index 8ff0ed6eb64..f2d36842504 100644 --- a/code/modules/security_levels/keycard authentication.dm +++ b/code/modules/security_levels/keycard authentication.dm @@ -3,7 +3,7 @@ desc = "This device is used to trigger station functions, which require more than one ID card to authenticate." icon = 'icons/obj/monitors.dmi' icon_state = "auth_off" - + var/active = 0 //This gets set to 1 on all devices except the one where the initial request was made. var/event = "" var/screen = 1 @@ -15,13 +15,13 @@ var/mob/event_triggered_by var/mob/event_confirmed_by var/ert_reason = "Reason for ERT" - + anchored = 1 use_power = 1 idle_power_usage = 2 active_power_usage = 6 power_channel = ENVIRON - + req_access = list(access_keycard_auth) /obj/machinery/keycard_auth/attack_ai(mob/user as mob) @@ -54,7 +54,7 @@ icon_state = "auth_off" else stat |= NOPOWER - + /obj/machinery/keycard_auth/attack_ghost(mob/user) ui_interact(user) @@ -70,25 +70,26 @@ user.set_machine(src) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "keycard_auth.tmpl", "Keycard Authentication Device UI", 540, 320) + ui.open() + +/obj/machinery/keycard_auth/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["screen"] = screen data["event"] = event data["ertreason"] = ert_reason - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "keycard_auth.tmpl", "Keycard Authentication Device UI", 540, 320) - ui.set_initial_data(data) - ui.open() + return data /obj/machinery/keycard_auth/Topic(href, href_list) if(..()) return 1 - + if(busy) to_chat(usr, "This device is busy.") return - + if(href_list["triggerevent"]) event = href_list["triggerevent"] screen = 2 diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 05240d477f3..474cbd91915 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -425,6 +425,12 @@ ui_interact(user) /obj/machinery/computer/ordercomp/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) + ui = nanomanager.try_update_ui(user, src, ui_key, ui) + if(!ui) + ui = new(user, src, ui_key, "order_console.tmpl", name, ORDER_SCREEN_WIDTH, ORDER_SCREEN_HEIGHT) + ui.open() + +/obj/machinery/computer/ordercomp/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["last_viewed_group"] = last_viewed_group @@ -474,11 +480,7 @@ data["at_station"] = shuttle_master.supply.getDockedId() == "supply_home" data["timeleft"] = shuttle_master.supply.timeLeft(600) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) - if(!ui) - ui = new(user, src, ui_key, "order_console.tmpl", name, ORDER_SCREEN_WIDTH, ORDER_SCREEN_HEIGHT) - ui.set_initial_data(data) - ui.open() + return data /obj/machinery/computer/ordercomp/Topic(href, href_list) if(..()) @@ -572,7 +574,12 @@ return /obj/machinery/computer/supplycomp/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) - // data to send to ui + ui = nanomanager.try_update_ui(user, src, ui_key, ui) + if(!ui) + ui = new(user, src, ui_key, "supply_console.tmpl", name, SUPPLY_SCREEN_WIDTH, SUPPLY_SCREEN_HEIGHT) + ui.open() + +/obj/machinery/computer/supplycomp/ui_data(mob/user, datum/topic_state/state = default_state) var/data[0] data["last_viewed_group"] = last_viewed_group @@ -622,12 +629,7 @@ data["at_station"] = shuttle_master.supply.getDockedId() == "supply_home" data["timeleft"] = shuttle_master.supply.timeLeft(600) data["can_launch"] = !shuttle_master.supply.canMove() - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) - if(!ui) - ui = new(user, src, ui_key, "supply_console.tmpl", name, SUPPLY_SCREEN_WIDTH, SUPPLY_SCREEN_HEIGHT) - ui.set_initial_data(data) - ui.open() + return data /obj/machinery/computer/supplycomp/proc/is_authorized(user) if(allowed(user)) diff --git a/nano/assets/libraries.min.js b/nano/assets/libraries.min.js index 6e3405a7be4..9cb2d2f24f6 100644 --- a/nano/assets/libraries.min.js +++ b/nano/assets/libraries.min.js @@ -1,5 +1,5 @@ -!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t="length"in e&&e.length,n=oe.type(e);return"function"===n||oe.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e}function i(e,t,n){if(oe.isFunction(t))return oe.grep(e,function(e,i){return!!t.call(e,i,e)!==n});if(t.nodeType)return oe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(pe.test(t))return oe.filter(t,e,n);t=oe.filter(t,e)}return oe.grep(e,function(e){return oe.inArray(e,t)>=0!==n})}function o(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function r(e){var t=xe[e]={};return oe.each(e.match(be)||[],function(e,n){t[n]=!0}),t}function s(){he.addEventListener?(he.removeEventListener("DOMContentLoaded",a,!1),e.removeEventListener("load",a,!1)):(he.detachEvent("onreadystatechange",a),e.detachEvent("onload",a))}function a(){(he.addEventListener||"load"===event.type||"complete"===he.readyState)&&(s(),oe.ready())}function l(e,t,n){if(void 0===n&&1===e.nodeType){var i="data-"+t.replace(Ne,"-$1").toLowerCase();if(n=e.getAttribute(i),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:_e.test(n)?oe.parseJSON(n):n}catch(o){}oe.data(e,t,n)}else n=void 0}return n}function u(e){var t;for(t in e)if(("data"!==t||!oe.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function c(e,t,n,i){if(oe.acceptData(e)){var o,r,s=oe.expando,a=e.nodeType,l=a?oe.cache:e,u=a?e[s]:e[s]&&s;if(u&&l[u]&&(i||l[u].data)||void 0!==n||"string"!=typeof t)return u||(u=a?e[s]=Y.pop()||oe.guid++:s),l[u]||(l[u]=a?{}:{toJSON:oe.noop}),"object"!=typeof t&&"function"!=typeof t||(i?l[u]=oe.extend(l[u],t):l[u].data=oe.extend(l[u].data,t)),r=l[u],i||(r.data||(r.data={}),r=r.data),void 0!==n&&(r[oe.camelCase(t)]=n),"string"==typeof t?(o=r[t],null==o&&(o=r[oe.camelCase(t)])):o=r,o}}function f(e,t,n){if(oe.acceptData(e)){var i,o,r=e.nodeType,s=r?oe.cache:e,a=r?e[oe.expando]:oe.expando;if(s[a]){if(t&&(i=n?s[a]:s[a].data)){oe.isArray(t)?t=t.concat(oe.map(t,oe.camelCase)):t in i?t=[t]:(t=oe.camelCase(t),t=t in i?[t]:t.split(" ")),o=t.length;for(;o--;)delete i[t[o]];if(n?!u(i):!oe.isEmptyObject(i))return}(n||(delete s[a].data,u(s[a])))&&(r?oe.cleanData([e],!0):ne.deleteExpando||s!=s.window?delete s[a]:s[a]=null)}}}function p(){return!0}function d(){return!1}function h(){try{return he.activeElement}catch(e){}}function g(e){var t=We.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function m(e,t){var n,i,o=0,r=typeof e.getElementsByTagName!==Ce?e.getElementsByTagName(t||"*"):typeof e.querySelectorAll!==Ce?e.querySelectorAll(t||"*"):void 0;if(!r)for(r=[],n=e.childNodes||e;null!=(i=n[o]);o++)!t||oe.nodeName(i,t)?r.push(i):oe.merge(r,m(i,t));return void 0===t||t&&oe.nodeName(e,t)?oe.merge([e],r):r}function v(e){He.test(e.type)&&(e.defaultChecked=e.checked)}function y(e,t){return oe.nodeName(e,"table")&&oe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function b(e){return e.type=(null!==oe.find.attr(e,"type"))+"/"+e.type,e}function x(e){var t=Qe.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function w(e,t){for(var n,i=0;null!=(n=e[i]);i++)oe._data(n,"globalEval",!t||oe._data(t[i],"globalEval"))}function T(e,t){if(1===t.nodeType&&oe.hasData(e)){var n,i,o,r=oe._data(e),s=oe._data(t,r),a=r.events;if(a){delete s.handle,s.events={};for(n in a)for(i=0,o=a[n].length;o>i;i++)oe.event.add(t,n,a[n][i])}s.data&&(s.data=oe.extend({},s.data))}}function C(e,t){var n,i,o;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!ne.noCloneEvent&&t[oe.expando]){o=oe._data(t);for(i in o.events)oe.removeEvent(t,i,o.handle);t.removeAttribute(oe.expando)}"script"===n&&t.text!==e.text?(b(t).text=e.text,x(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),ne.html5Clone&&e.innerHTML&&!oe.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&He.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}}function _(t,n){var i,o=oe(n.createElement(t)).appendTo(n.body),r=e.getDefaultComputedStyle&&(i=e.getDefaultComputedStyle(o[0]))?i.display:oe.css(o[0],"display");return o.detach(),r}function N(e){var t=he,n=Ze[e];return n||(n=_(e,t),"none"!==n&&n||(Je=(Je||oe("