diff --git a/baystation12.dme b/baystation12.dme index f902bfd9608..66e8497e79f 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1315,6 +1315,7 @@ #include "code\modules\reagents\reagent_containers\blood_pack.dm" #include "code\modules\reagents\reagent_containers\borghydro.dm" #include "code\modules\reagents\reagent_containers\dropper.dm" +#include "code\modules\reagents\reagent_containers\drugs.dm" #include "code\modules\reagents\reagent_containers\food.dm" #include "code\modules\reagents\reagent_containers\glass.dm" #include "code\modules\reagents\reagent_containers\hypospray.dm" diff --git a/code/modules/reagents/reagent_containers/drugs.dm b/code/modules/reagents/reagent_containers/drugs.dm new file mode 100644 index 00000000000..f717929c9f9 --- /dev/null +++ b/code/modules/reagents/reagent_containers/drugs.dm @@ -0,0 +1,145 @@ +/obj/item/weapon/reagent_containers/drugs + name = " " + var/base_name = " " + desc = " " + icon = 'icons/obj/chemical.dmi' + icon_state = "baggie" + item_state = "beaker" + amount_per_transfer_from_this = 2 + possible_transfer_amounts = 2 + volume = 10 + flags = FPRINT | TABLEPASS | OPENCONTAINER + + var/label_text = "" + + New() + ..() + src.pixel_x = rand(-10.0, 10) //Randomizes postion + src.pixel_y = rand(-10.0, 10) + base_name = name + + + examine() + set src in view() + ..() + if (!(usr in view(2)) && usr!=src.loc) return + usr << "\blue It contains:" + if(reagents && reagents.reagent_list.len) + usr << "\blue [src.reagents.total_volume] units of powder." + else + usr << "\blue Nothing." + + afterattack(obj/target, mob/user, proximity) + if(!proximity) return + + if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. + + if(!target.reagents.total_volume && target.reagents) + user << "\red [target] is empty." + return + + if(reagents.total_volume >= reagents.maximum_volume) + user << "\red [src] is full." + return + + for(var/datum/reagent/A in target.reagents.reagent_list) + if(A.reagent_state != 1) + user << "\red You can only put powders in [src]." + return + + var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this) + user << "\blue You fill [src] with [trans] units of the contents of [target]." + + else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it. + if(!reagents.total_volume) + user << "\red [src] is empty." + return + + if(target.reagents.total_volume >= target.reagents.maximum_volume) + user << "\red [target] is full." + return + + // /vg/: Logging transfers of bad things + if(target.reagents_to_log.len) + var/list/badshit=list() + for(var/bad_reagent in target.reagents_to_log) + if(reagents.has_reagent(bad_reagent)) + badshit += reagents_to_log[bad_reagent] + if(badshit.len) + var/hl="\red ([english_list(badshit)]) \black" + message_admins("[user.name] ([user.ckey]) added [reagents.get_reagent_ids(1)] to \a [target] with [src].[hl] (JMP)") + log_game("[user.name] ([user.ckey]) added [reagents.get_reagent_ids(1)] to \a [target] with [src].") + + var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) + user << "\blue You transfer [trans] units of the solution to [target]." + + //Safety for dumping stuff into a ninja suit. It handles everything through attackby() and this is unnecessary. + else if(istype(target, /obj/item/clothing/suit/space/space_ninja)) + return + + else if(istype(target, /obj/machinery/bunsen_burner)) + return + + else if(istype(target, /obj/machinery/radiocarbon_spectrometer)) + return + + + attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen)) + var/tmp_label = sanitize(input(user, "Enter a label for [src.name]","Label",src.label_text)) + if(length(tmp_label) > 10) + user << "\red The label can be at most 10 characters long." + else + user << "\blue You set the label to \"[tmp_label]\"." + src.label_text = tmp_label + src.update_name_label() + + proc/update_name_label() + if(src.label_text == "") + src.name = src.base_name + else + src.name = "[src.base_name] ([src.label_text])" + +/obj/item/weapon/reagent_containers/drugs/baggie + name = "baggie" + desc = "A baggie. Can hold up to 10 units." + icon = 'icons/obj/chemical.dmi' + icon_state = "baggie" + item_state = "beaker" + + on_reagent_change() + update_icon() + + pickup(mob/user) + ..() + update_icon() + + dropped(mob/user) + ..() + update_icon() + + attack_hand() + ..() + update_icon() + + update_icon() + overlays.Cut() + + if(reagents.total_volume) + var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]2") + + switch(reagents.total_volume) + if(0 to 2) filling.icon_state = "[icon_state]2" + if(3 to 4) filling.icon_state = "[icon_state]4" + if(5 to 6) filling.icon_state = "[icon_state]6" + if(7 to 8) filling.icon_state = "[icon_state]8" + if(9 to 10) filling.icon_state = "[icon_state]10" + + + filling.icon += mix_color_from_reagents(reagents.reagent_list) + overlays += filling + +/obj/item/weapon/reagent_containers/drugs/baggie/meth + New() + ..() + reagents.add_reagent("hyperzine", 10) \ No newline at end of file diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 4105aaaf759..3568d900c8c 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -781,6 +781,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(linked_lathe.plasteel_amount >= 2000) dat += "(1 Sheet) " if(linked_lathe.plasteel_amount >= 10000) dat += "(5 Sheets) " if(linked_lathe.plasteel_amount >= 2000) dat += "(Max Sheets)" + dat += "
" //Gold dat += "* [linked_lathe.gold_amount] cm3 of Gold || " dat += "Eject: " diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index 5621243d0d1..55aac381619 100644 Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ diff --git a/icons/obj/reagentfillings.dmi b/icons/obj/reagentfillings.dmi index 2d6eb81ba92..123788be042 100644 Binary files a/icons/obj/reagentfillings.dmi and b/icons/obj/reagentfillings.dmi differ