From 33bf34e94c5958c024095a8079e7375a463749b1 Mon Sep 17 00:00:00 2001 From: "rastaf.zero@gmail.com" Date: Sun, 16 Jan 2011 13:28:29 +0000 Subject: [PATCH] Almost all reagent containers now have verb to change how many contents will be transferred from. Syringes and hypospray haven't such feature, that is intentional. Rephrased some of APC repairing messages to be more clear. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@873 316c924e-a436-60f5-8080-3fe189b3f50e --- code/WorkInProgress/Chemistry-Tools.dm | 149 +++++++++++++++---------- code/modules/power/apc.dm | 4 +- 2 files changed, 90 insertions(+), 63 deletions(-) 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)