diff --git a/code/WorkInProgress/Chemistry-Tools.dm b/code/WorkInProgress/Chemistry-Tools.dm index ba00e361dc..d2613991bb 100644 --- a/code/WorkInProgress/Chemistry-Tools.dm +++ b/code/WorkInProgress/Chemistry-Tools.dm @@ -1,7 +1,3 @@ -// Bottles transfer 50 units -// Beakers transfer 50 units -// Syringes transfer 15 units -// Droppers transfer 5 units //BUG!!!: reactions on splashing etc cause errors because stuff gets deleted before it executes. // Bandaid fix using spawn - very ugly, need to fix this. @@ -295,6 +291,7 @@ pressure_resistance = 2*ONE_ATMOSPHERE var/amount_per_transfer_from_this = 10 + var/possible_transfer_amounts = list(10,25,50,100) attackby(obj/item/weapon/W as obj, mob/user as mob) return @@ -303,6 +300,9 @@ var/datum/reagents/R = new/datum/reagents(1000) reagents = R R.my_atom = src + if (!possible_transfer_amounts) + src.verbs -= /obj/reagent_dispensers/verb/set_APTFT + ..() examine() set src in view(2) @@ -315,6 +315,13 @@ else usr << "\blue Nothing." + verb/set_APTFT() //set amount_per_transfer_from_this + set name = "Set transfer amount" + set src in range(1) + var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts + if (N) + amount_per_transfer_from_this = N + ex_act(severity) switch(severity) if(1.0) @@ -347,9 +354,20 @@ icon_state = null w_class = 1 var/amount_per_transfer_from_this = 5 + var/possible_transfer_amounts = list(5,10,25) + + verb/set_APTFT() //set amount_per_transfer_from_this + set name = "Set transfer amount" + set src in range(0) + var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts + if (N) + amount_per_transfer_from_this = N -/* New() - var/datum/reagents/R = new/datum/reagents(50) + New() + if (!possible_transfer_amounts) + src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT + ..() +/* var/datum/reagents/R = new/datum/reagents(50) reagents = R R.my_atom = src */ @@ -374,19 +392,21 @@ icon_state = "null" item_state = "null" amount_per_transfer_from_this = 10 + possible_transfer_amounts = list(5,10,25) flags = FPRINT | TABLEPASS | OPENCONTAINER var/list/can_be_placed_into = list( - /obj/machinery/chem_master/, - /obj/table, - /obj/secure_closet, - /obj/closet, - /obj/item/weapon/storage, - /obj/machinery/atmospherics/unary/cryo_cell, - /obj/item/weapon/chem_grenade, - /obj/machinery/bot/medbot, - /obj/machinery/computer/pandemic, - /obj/item/weapon/secstorage/ssafe) + /obj/machinery/chem_master/, + /obj/table, + /obj/secure_closet, + /obj/closet, + /obj/item/weapon/storage, + /obj/machinery/atmospherics/unary/cryo_cell, + /obj/item/weapon/chem_grenade, + /obj/machinery/bot/medbot, + /obj/machinery/computer/pandemic, + /obj/item/weapon/secstorage/ssafe + ) examine() set src in view(2) @@ -403,6 +423,7 @@ var/datum/reagents/R = new/datum/reagents(50) reagents = R R.my_atom = src + ..() afterattack(obj/target, mob/user , flag) @@ -427,7 +448,7 @@ user << "\red [src] is full." return - var/trans = target.reagents.trans_to(src, 10) + 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. @@ -439,7 +460,7 @@ user << "\red [target] is full." return - var/trans = src.reagents.trans_to(target, 10) + var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) user << "\blue You transfer [trans] units of the solution to [target]." else if(reagents.total_volume) @@ -461,12 +482,14 @@ icon = 'chemical.dmi' icon_state = "dropper0" amount_per_transfer_from_this = 5 + possible_transfer_amounts = list(1,2,3,4,5) var/filled = 0 New() var/datum/reagents/R = new/datum/reagents(5) reagents = R R.my_atom = src + ..() afterattack(obj/target, mob/user , flag) if(!target.reagents) return @@ -486,10 +509,11 @@ O.show_message(text("\red [] drips something onto []!", user, target), 1) src.reagents.reaction(target, TOUCH) - spawn(5) src.reagents.trans_to(target, 5) - user << "\blue You transfer 5 units of the solution." - filled = 0 - icon_state = "dropper[filled]" + var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) + user << "\blue You transfer [trans] units of the solution." + if (src.reagents.total_volume<=0) + filled = 0 + icon_state = "dropper[filled]" else @@ -501,9 +525,9 @@ user << "\red [target] is empty." return - target.reagents.trans_to(src, 5) + var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) - user << "\blue You fill the dropper with 5 units of the solution." + user << "\blue You fill the dropper with [trans] units of the solution." filled = 1 icon_state = "dropper[filled]" @@ -523,6 +547,7 @@ item_state = "syringe_0" icon_state = "0" amount_per_transfer_from_this = 5 + possible_transfer_amounts = null //list(5,10,15) var/mode = "d" New() @@ -530,6 +555,7 @@ reagents = R R.maximum_volume = 15 R.my_atom = src + ..() on_reagent_change() update_icon() @@ -613,9 +639,9 @@ user << "\red You cannot directly remove reagents from this object." return - target.reagents.trans_to(src, 5) + var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this) - user << "\blue You fill the syringe with 5 units of the solution." + user << "\blue You fill the syringe with [trans] units of the solution." if("i") if(!reagents.total_volume) @@ -640,8 +666,8 @@ if(ismob(target) && target == user) src.reagents.reaction(target, INGEST) spawn(5) - src.reagents.trans_to(target, 5) - user << "\blue You inject 5 units of the solution. The syringe now contains [src.reagents.total_volume] units." + var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) + user << "\blue You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units." return update_icon() @@ -667,11 +693,11 @@ item_state = "hypo" icon_state = "hypo" amount_per_transfer_from_this = 10 + possible_transfer_amounts = null flags = FPRINT | ONBELT | TABLEPASS | OPENCONTAINER /obj/item/weapon/reagent_containers/hypospray/attack_paw(mob/user as mob) return src.attack_hand(user) - return /obj/item/weapon/reagent_containers/hypospray/New() var/datum/reagents/R = new/datum/reagents(30) @@ -685,11 +711,12 @@ if (!( istype(M, /mob) )) return if (reagents.total_volume) - user << "\red You inject [M] with the hypospray." + user << "\blue You inject [M] with the hypospray." M << "\red You feel a tiny prick!" src.reagents.reaction(M, INGEST) - if(M.reagents) reagents.trans_to(M, 10) - user << "\red 10 units injected. [reagents.total_volume] units remaining in the hypospray." + if(M.reagents) + var/trans = reagents.trans_to(M, amount_per_transfer_from_this) + user << "\blue [trans] units injected. [reagents.total_volume] units remaining in the hypospray." return @@ -697,6 +724,7 @@ /// Food. //////////////////////////////////////////////////////////////////////////////// /obj/item/weapon/reagent_containers/food + possible_transfer_amounts = null New() //Sets the default container amount for all food items. var/datum/reagents/R = new/datum/reagents(50) // if you want a food item with a different capacity @@ -704,6 +732,7 @@ R.my_atom = src src.pixel_x = rand(-5.0, 5) //Randomizes postion slightly. src.pixel_y = rand(-5.0, 5) + ..() /obj/item/weapon/reagent_containers/food/condiment //Food items that aren't eaten normally and leave an empty container behind. name = "Condiment Container" @@ -711,6 +740,7 @@ icon = 'food.dmi' icon_state = "emptycondiment" flags = FPRINT | TABLEPASS | OPENCONTAINER + possible_transfer_amounts = list(1,5,10) attackby(obj/item/weapon/W as obj, mob/user as mob) return @@ -719,7 +749,7 @@ attack(mob/M as mob, mob/user as mob, def_zone) var/datum/reagents/R = src.reagents - if(!R.total_volume || !R) + if(!R || !R.total_volume) user << "\red None of [src] left, oh no!" return 0 @@ -763,7 +793,7 @@ user << "\red [src] is full." return - var/trans = target.reagents.trans_to(src, 5) + 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]." //Something like a glass or a food item. Player probably wants to transfer TO it. @@ -774,7 +804,7 @@ if(target.reagents.total_volume >= target.reagents.maximum_volume) user << "\red you can't add anymore to [target]." return - var/trans = src.reagents.trans_to(target, 5) + var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) user << "\blue You transfer [trans] units of the condiment to [target]." @@ -869,6 +899,7 @@ icon_state = null flags = FPRINT | TABLEPASS | OPENCONTAINER var/gulp_size = 5 //This is now officially broken ... need to think of a nice way to fix it. + possible_transfer_amounts = list(5,10,25) New() var/datum/reagents/R = new/datum/reagents(50) @@ -916,7 +947,7 @@ if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell var/mob/living/silicon/robot/bro = user - bro.cell.charge -= 30 + bro.cell.use(30) var/refill = R.get_master_reagent_id() spawn(600) R.add_reagent(refill, fillevel) @@ -942,7 +973,7 @@ user << "\red [src] is full." return - var/trans = target.reagents.trans_to(src, 10) + 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()) //Something like a glass. Player probably wants to transfer TO it. @@ -954,12 +985,12 @@ user << "\red [target] is full." return - var/trans = src.reagents.trans_to(target, 10) + var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) user << "\blue You transfer [trans] units of the solution to [target]." if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell var/mob/living/silicon/robot/bro = user - bro.cell.charge -= 30 + bro.cell.use(30) var/refill = reagents.get_master_reagent_id() spawn(600) reagents.add_reagent(refill, trans) @@ -978,6 +1009,7 @@ icon = 'chemical.dmi' icon_state = null item_state = "pill" + possible_transfer_amounts = null New() var/datum/reagents/R = new/datum/reagents(50) @@ -1060,9 +1092,10 @@ m_amt = 200 g_amt = 0 w_class = 3.0 - amount_per_transfer_from_this = 20 + possible_transfer_amounts = list(10,20,30,50,70) flags = FPRINT | OPENCONTAINER + New() var/datum/reagents/R = new/datum/reagents(70) reagents = R @@ -1094,6 +1127,7 @@ w_class = 4.0 amount_per_transfer_from_this = 20 + possible_transfer_amounts = list(10,20,30,60) flags = FPRINT New() var/datum/reagents/R = new/datum/reagents(120) @@ -1165,6 +1199,7 @@ icon_state = null item_state = "atoxinbottle" amount_per_transfer_from_this = 10 + possible_transfer_amounts = list(5,10,15) flags = FPRINT | TABLEPASS | OPENCONTAINER New() @@ -1906,11 +1941,8 @@ attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/kitchenknife /*|| /obj/item/weapon/scalpel*/)) W.visible_message(" \red You slice the meatbread! ", 1) - new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc) + for(var/i=0,i<5,i++) + new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc) del(src) return @@ -1936,11 +1968,8 @@ attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/kitchenknife /*|| /obj/item/weapon/scalpel*/)) W.visible_message(" \red You slice the xenomeatbread! ", 1) - new /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice (src.loc) + for(var/i=0,i<5,i++) + new /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice (src.loc) del(src) return @@ -1966,11 +1995,8 @@ attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/kitchenknife /*|| /obj/item/weapon/scalpel*/)) W.visible_message(" \red You slice the tofubread! ", 1) - new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc) + for(var/i=0,i<5,i++) + new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc) del(src) return @@ -1996,11 +2022,8 @@ attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/kitchenknife /* || /obj/item/weapon/scalpel*/)) W.visible_message(" \red You slice the cheese! ", 1) - new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc) + for(var/i=0,i<5,i++) + new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc) del(src) return @@ -2081,7 +2104,10 @@ icon_state = "oliveoil" else name = "Misc Condiment Bottle" - desc = "A mixture of various condiments" + if (reagents.reagent_list.len==1) + desc = "Looks like it is [reagents.get_master_reagent_name()], but you are not sure." + else + desc = "A mixture of various condiments. [reagents.get_master_reagent_name()] is one of them." icon_state = "mixedcondiments" else icon_state = "emptycondiment" @@ -2473,6 +2499,7 @@ amount_per_transfer_from_this = 5 icon = 'vending.dmi' icon_state = "water_cooler" + possible_transfer_amounts = null New() ..() anchored = 1 diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 02444afe54..0ac6d248d7 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -327,7 +327,7 @@ user << "You fail to [ locked ? "unlock" : "lock"] the APC interface." else if (istype(W, /obj/item/weapon/cable_coil) && !terminal && opened && has_electronics!=2) if (src.loc:intact) - user << "\red You must remove the plating first." + user << "\red You must remove the floor plating first." return var/obj/item/weapon/cable_coil/C = W if(C.amount < 10) @@ -348,7 +348,7 @@ terminal.connect_to_network() else if (istype(W, /obj/item/weapon/wirecutters) && terminal && opened && has_electronics!=2) if (src.loc:intact) - user << "\red You must remove the plating first." + user << "\red You must remove the floor plating first." return user << "You begin to cut cables..." playsound(src.loc, 'Deconstruct.ogg', 50, 1)