diff --git a/code/WorkInProgress/Chemistry-Tools.dm b/code/WorkInProgress/Chemistry-Tools.dm index 61970d92547..ab79ef5b03e 100644 --- a/code/WorkInProgress/Chemistry-Tools.dm +++ b/code/WorkInProgress/Chemistry-Tools.dm @@ -214,8 +214,8 @@ m_amt = 2000 examine() - set src in view(2) ..() + if (!(usr in view(2)) && usr!=src.loc) return usr << "\icon [src] Syringe gun:" usr << "\blue [syringes] / [max_syringes] Syringes." @@ -306,11 +306,10 @@ ..() examine() - set src in view(2) ..() + if (!(usr in view(2)) && usr!=src.loc) return usr << "\blue It contains:" - if(!reagents) return - if(reagents.reagent_list.len) + if(reagents && reagents.reagent_list.len) for(var/datum/reagent/R in reagents.reagent_list) usr << "\blue [R.volume] units of [R.name]" else @@ -356,6 +355,7 @@ w_class = 1 var/amount_per_transfer_from_this = 5 var/possible_transfer_amounts = list(5,10,25) + var/volume = 30 verb/set_APTFT() //set amount_per_transfer_from_this set name = "Set transfer amount" @@ -365,12 +365,12 @@ amount_per_transfer_from_this = N New() + ..() if (!possible_transfer_amounts) src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT - ..() -/* var/datum/reagents/R = new/datum/reagents(50) + var/datum/reagents/R = new/datum/reagents(volume) reagents = R - R.my_atom = src */ + R.my_atom = src attackby(obj/item/weapon/W as obj, mob/user as mob) return @@ -386,7 +386,7 @@ //////////////////////////////////////////////////////////////////////////////// /// (Mixing)Glass. //////////////////////////////////////////////////////////////////////////////// -/obj/item/weapon/reagent_containers/glass/ +/obj/item/weapon/reagent_containers/glass name = " " desc = " " icon = 'chemical.dmi' @@ -394,6 +394,7 @@ item_state = "null" amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,25) + volume = 50 flags = FPRINT | TABLEPASS | OPENCONTAINER var/list/can_be_placed_into = list( @@ -410,23 +411,15 @@ ) examine() - set src in view(2) ..() + if (!(usr in view(2)) && usr!=src.loc) return usr << "\blue It contains:" - if(!reagents) return - if(reagents.reagent_list.len) + if(reagents && reagents.reagent_list.len) for(var/datum/reagent/R in reagents.reagent_list) usr << "\blue [R.volume] units of [R.name]" else usr << "\blue Nothing." - New() - var/datum/reagents/R = new/datum/reagents(50) - reagents = R - R.my_atom = src - ..() - - afterattack(obj/target, mob/user , flag) for(var/type in src.can_be_placed_into) if(istype(target, type)) @@ -484,14 +477,9 @@ icon_state = "dropper0" amount_per_transfer_from_this = 5 possible_transfer_amounts = list(1,2,3,4,5) + volume = 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 @@ -541,6 +529,9 @@ //////////////////////////////////////////////////////////////////////////////// /// Syringes. //////////////////////////////////////////////////////////////////////////////// +#define SYRINGE_DRAW 0 +#define SYRINGE_INJECT 1 + /obj/item/weapon/reagent_containers/syringe name = "Syringe" desc = "A syringe." @@ -549,14 +540,8 @@ icon_state = "0" amount_per_transfer_from_this = 5 possible_transfer_amounts = null //list(5,10,15) - var/mode = "d" - - New() - var/datum/reagents/R = new/datum/reagents(15) - reagents = R - R.maximum_volume = 15 - R.my_atom = src - ..() + volume = 15 + var/mode = SYRINGE_DRAW on_reagent_change() update_icon() @@ -570,11 +555,14 @@ update_icon() attack_self(mob/user as mob) +/* switch(mode) - if("d") - mode = "i" - if("i") - mode = "d" + if(SYRINGE_DRAW) + mode = SYRINGE_INJECT + if(SYRINGE_INJECT) + mode = SYRINGE_DRAW +*/ + mode = !mode update_icon() attack_hand() @@ -591,7 +579,7 @@ if(!target.reagents) return switch(mode) - if("d") + if(SYRINGE_DRAW) if(reagents.total_volume >= reagents.maximum_volume) user << "\red The syringe is full." @@ -633,34 +621,35 @@ user << "\blue You take a blood sample from [target]" for(var/mob/O in viewers(4, user)) O.show_message("\red [user] takes a blood sample from [target].", 1) - return + + else //if not mob + if(!target.reagents.total_volume) + user << "\red [target] is empty." + return + if(!target.is_open_container() && !istype(target,/obj/reagent_dispensers)) + user << "\red You cannot directly remove reagents from this object." + return - if(!target.reagents.total_volume) - user << "\red [target] is empty." - return + var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this) - - if(!target.is_open_container() && !istype(target,/obj/reagent_dispensers)) - user << "\red You cannot directly remove reagents from this object." - return - - var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this) - - user << "\blue You fill the syringe with [trans] units of the solution." - - if("i") + user << "\blue You fill the syringe with [trans] units of the solution." + if (reagents.total_volume >= reagents.maximum_volume) + mode=!mode + update_icon() + + if(SYRINGE_INJECT) if(!reagents.total_volume) user << "\red The Syringe is empty." return if(istype(target, /obj/item/weapon/implantcase/chem)) return - if(target.reagents.total_volume >= target.reagents.maximum_volume) - user << "\red [target] is full." - return if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food)) user << "\red You cannot directly fill this object." return + if(target.reagents.total_volume >= target.reagents.maximum_volume) + user << "\red [target] is full." + return if(ismob(target) && target != user) for(var/mob/O in viewers(world.view, user)) @@ -674,12 +663,22 @@ spawn(5) 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." + if (reagents.total_volume >= reagents.maximum_volume && mode==SYRINGE_INJECT) + mode = SYRINGE_DRAW + update_icon() + return update_icon() var/rounded_vol = round(reagents.total_volume,5) if(ismob(loc)) - icon_state = "[mode][rounded_vol]" + var/mode_t + switch(mode) + if (SYRINGE_DRAW) + mode_t = "d" + if (SYRINGE_INJECT) + mode_t = "i" + icon_state = "[mode_t][rounded_vol]" else icon_state = "[rounded_vol]" item_state = "syringe_[rounded_vol]" @@ -699,19 +698,19 @@ item_state = "hypo" icon_state = "hypo" amount_per_transfer_from_this = 10 + volume = 30 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) +/* /obj/item/weapon/reagent_containers/hypospray/New() - var/datum/reagents/R = new/datum/reagents(30) - reagents = R - R.my_atom = src - //R.add_reagent("tricordrazine", 30) //uncomment this to make it start with stuff in ..() + reagents.add_reagent("tricordrazine", 30) //uncomment this to make it start with stuff in return +*/ /obj/item/weapon/reagent_containers/hypospray/attack(mob/M as mob, mob/user as mob) if (!( istype(M, /mob) )) @@ -731,89 +730,12 @@ //////////////////////////////////////////////////////////////////////////////// /obj/item/weapon/reagent_containers/food possible_transfer_amounts = null + volume = 50 //Sets the default container amount for all food items. - 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 - reagents = R // then just redefine it in the code for the specific food item. - R.my_atom = src + New() + ..() 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" - desc = "Just your average condiment container." - 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 - attack_self(mob/user as mob) - return - attack(mob/M as mob, mob/user as mob, def_zone) - var/datum/reagents/R = src.reagents - - if(!R || !R.total_volume) - user << "\red None of [src] left, oh no!" - return 0 - - if(M == user) - M << "\blue You swallow some of contents of the [src]." - if(reagents.total_volume) - reagents.reaction(M, INGEST) - spawn(5) - reagents.trans_to(M, 10) - - playsound(M.loc,'drink.ogg', rand(10,50), 1) - return 1 - else if( istype(M, /mob/living/carbon/human) ) - - for(var/mob/O in viewers(world.view, user)) - O.show_message("\red [user] attempts to feed [M] [src].", 1) - if(!do_mob(user, M)) return - for(var/mob/O in viewers(world.view, user)) - O.show_message("\red [user] feeds [M] [src].", 1) - - if(reagents.total_volume) - reagents.reaction(M, INGEST) - spawn(5) - reagents.trans_to(M, 10) - - playsound(M.loc,'drink.ogg', rand(10,50), 1) - return 1 - return 0 - - attackby(obj/item/I as obj, mob/user as mob) - return - - afterattack(obj/target, mob/user , flag) - if(istype(target, /obj/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. - - if(!target.reagents.total_volume) - user << "\red [target] is empty." - return - - if(reagents.total_volume >= reagents.maximum_volume) - user << "\red [src] is full." - 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]." - - //Something like a glass or a food item. Player probably wants to transfer TO it. - else if(target.is_open_container() || istype(target, /obj/item/weapon/reagent_containers/food/snacks)) - if(!reagents.total_volume) - user << "\red [src] is empty." - return - 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, amount_per_transfer_from_this) - user << "\blue You transfer [trans] units of the condiment to [target]." - - /obj/item/weapon/reagent_containers/food/snacks //Food items that are eaten normally and don't leave anything behind. name = "snack" @@ -821,6 +743,7 @@ icon = 'food.dmi' icon_state = null var/bitesize = 1 + var/bitecount = 0 proc/On_Consume() return @@ -874,6 +797,7 @@ reagents.trans_to(M, temp_bitesize) else reagents.trans_to(M, reagents.total_volume) + bitecount++ if(!reagents.total_volume) if(M == user) user << "\red You finish eating [src]." else user << "\red [M] finishes eating [src]." @@ -889,6 +813,17 @@ afterattack(obj/target, mob/user , flag) return + examine() + ..() + if (!(usr in range(0)) && usr!=src.loc) return + if (bitecount==0) + return + else if (bitecount==1) + usr << "\blue \The [src] was bitten by someone!" + else if (bitecount<=3) + usr << "\blue \The [src] was bitten [bitecount] times!" + else + usr << "\blue \The [src] was bitten multiple times!" //////////////////////////////////////////////////////////////////////////////// @@ -906,12 +841,7 @@ 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) - reagents = R - R.my_atom = src - ..() + volume = 50 on_reagent_change() if (gulp_size < 5) gulp_size = 5 @@ -1003,6 +933,20 @@ reagents.add_reagent(refill, trans) return + + examine() + ..() + if (!(usr in range(0)) && usr!=src.loc) return + if(!reagents || reagents.total_volume==0) + usr << "\blue \The [src] is empty!" + else if (reagents.total_volumeYou inaccurate slice the meatbread with your [W]! ", 1) + for(var/i=0,i<3,i++) + new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc) + del(src) + return /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice name = "meatbread slice" @@ -1978,6 +1921,12 @@ new /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice (src.loc) del(src) return + if(istype(W, /obj/item/weapon/circular_saw)) + W.visible_message(" \red You inaccurate slice the xenomeatbread with your [W]! ", 1) + for(var/i=0,i<3,i++) + new /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice (src.loc) + del(src) + return /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice name = "xenomeatbread slice" @@ -2005,6 +1954,12 @@ new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc) del(src) return + if(istype(W, /obj/item/weapon/circular_saw)) + W.visible_message(" \red You inaccurate slice the tofubread with your [W]! ", 1) + for(var/i=0,i<3,i++) + new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc) + del(src) + return /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice name = "Tofubread slice" @@ -2032,6 +1987,12 @@ new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc) del(src) return + if(istype(W, /obj/item/weapon/circular_saw)) + W.visible_message(" \red You inaccurate slice the cheese with your [W]! ", 1) + for(var/i=0,i<3,i++) + new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc) + del(src) + return /obj/item/weapon/reagent_containers/food/snacks/cheesewedge name = "Cheese wedge" @@ -2066,13 +2027,79 @@ // leave empty containers when used up and can be filled/re-filled with other items. Formatting for first section is identical // to mixed-drinks code. If you want an object that starts pre-loaded, you need to make it in addition to the other code. -/obj/item/weapon/reagent_containers/food/condiment +/obj/item/weapon/reagent_containers/food/condiment //Food items that aren't eaten normally and leave an empty container behind. + name = "Condiment Container" + desc = "Just your average condiment container." + icon = 'food.dmi' + icon_state = "emptycondiment" + flags = FPRINT | TABLEPASS | OPENCONTAINER + possible_transfer_amounts = list(1,5,10) + volume = 50 - New() - var/datum/reagents/R = new/datum/reagents(50) - reagents = R - R.my_atom = src - ..() + attackby(obj/item/weapon/W as obj, mob/user as mob) + return + attack_self(mob/user as mob) + return + attack(mob/M as mob, mob/user as mob, def_zone) + var/datum/reagents/R = src.reagents + + if(!R || !R.total_volume) + user << "\red None of [src] left, oh no!" + return 0 + + if(M == user) + M << "\blue You swallow some of contents of the [src]." + if(reagents.total_volume) + reagents.reaction(M, INGEST) + spawn(5) + reagents.trans_to(M, 10) + + playsound(M.loc,'drink.ogg', rand(10,50), 1) + return 1 + else if( istype(M, /mob/living/carbon/human) ) + + for(var/mob/O in viewers(world.view, user)) + O.show_message("\red [user] attempts to feed [M] [src].", 1) + if(!do_mob(user, M)) return + for(var/mob/O in viewers(world.view, user)) + O.show_message("\red [user] feeds [M] [src].", 1) + + if(reagents.total_volume) + reagents.reaction(M, INGEST) + spawn(5) + reagents.trans_to(M, 10) + + playsound(M.loc,'drink.ogg', rand(10,50), 1) + return 1 + return 0 + + attackby(obj/item/I as obj, mob/user as mob) + return + + afterattack(obj/target, mob/user , flag) + if(istype(target, /obj/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. + + if(!target.reagents.total_volume) + user << "\red [target] is empty." + return + + if(reagents.total_volume >= reagents.maximum_volume) + user << "\red [src] is full." + 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]." + + //Something like a glass or a food item. Player probably wants to transfer TO it. + else if(target.is_open_container() || istype(target, /obj/item/weapon/reagent_containers/food/snacks)) + if(!reagents.total_volume) + user << "\red [src] is empty." + return + 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, amount_per_transfer_from_this) + user << "\blue You transfer [trans] units of the condiment to [target]." on_reagent_change() if(icon_state == "saltshakersmall" || icon_state == "peppermillsmall") @@ -2136,24 +2163,22 @@ name = "Salt Shaker" // a large one. desc = "Salt. From space oceans, presumably." icon_state = "saltshakersmall" + possible_transfer_amounts = list(1,20) //for clown turning the lid off + amount_per_transfer_from_this = 1 + volume = 20 New() ..() - del(reagents) - var/datum/reagents/R = new/datum/reagents(20) - reagents = R - R.my_atom = src reagents.add_reagent("sodiumchloride", 20) /obj/item/weapon/reagent_containers/food/condiment/peppermill name = "Pepper Mill" desc = "Often used to flavor food or make people sneeze." icon_state = "peppermillsmall" + possible_transfer_amounts = list(1,20) //for clown turning the lid off + amount_per_transfer_from_this = 1 + volume = 20 New() ..() - del(reagents) - var/datum/reagents/R = new/datum/reagents(20) - reagents = R - R.my_atom = src reagents.add_reagent("blackpepper", 20) @@ -2277,11 +2302,10 @@ name = "Paper Cup" desc = "A paper water cup." icon_state = "water_cup_e" + possible_transfer_amounts = null + volume = 10 New() - src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT - var/datum/reagents/R = new/datum/reagents(10) - reagents = R - R.my_atom = src + ..() src.pixel_x = rand(-10.0, 10) src.pixel_y = rand(-10.0, 10) on_reagent_change() @@ -2294,10 +2318,7 @@ //Notes by Darem: Functionally identical to regular drinks. The only difference is that the default bottle size is 100. /obj/item/weapon/reagent_containers/food/drinks/bottle amount_per_transfer_from_this = 10 - New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + volume = 100 /obj/item/weapon/reagent_containers/food/drinks/bottle/gin name = "Griffeater Gin" @@ -2523,9 +2544,9 @@ icon = 'vending.dmi' icon_state = "water_cooler" possible_transfer_amounts = null + anchored = 1 New() ..() - anchored = 1 reagents.add_reagent("water",500) @@ -2555,29 +2576,20 @@ desc = "A metal shaker to mix drinks in." icon_state = "shaker" amount_per_transfer_from_this = 10 - New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + volume = 100 /obj/item/weapon/reagent_containers/food/drinks/flask name = "Captain's Flask" desc = "A metal flask belonging to the captain" icon_state = "flask" - New() - var/datum/reagents/R = new/datum/reagents(30) - reagents = R - R.my_atom = src + volume = 60 /obj/item/weapon/reagent_containers/food/drinks/drinkingglass name = "glass" desc = "Your standard drinking glass." icon_state = "glass_empty" amount_per_transfer_from_this = 10 - New() - var/datum/reagents/R = new/datum/reagents(50) - reagents = R - R.my_atom = src + volume = 50 on_reagent_change() /* if(reagents.reagent_list.len > 1 ) diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index d9acc2dc73c..fbe8231c94e 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -113,17 +113,17 @@ dat += text({" Automatic Security Unit v1.3

-/obj/machinery/bot/secbot/Status: []
-/obj/machinery/bot/secbot/Behaviour controls are [src.locked ? "locked" : "unlocked"]"}, +Status: []
+Behaviour controls are [src.locked ? "locked" : "unlocked"]"}, "[src.on ? "On" : "Off"]" ) if(!src.locked) dat += text({"
-/obj/machinery/bot/secbot/Check for Weapon Authorization: []
-/obj/machinery/bot/secbot/Check Security Records: []
-/obj/machinery/bot/secbot/Operating Mode: []
-/obj/machinery/bot/secbot/Auto Patrol: []"}, +Check for Weapon Authorization: []
+Check Security Records: []
+Operating Mode: []
+Auto Patrol: []"}, "[src.idcheck ? "Yes" : "No"]", "[src.check_records ? "Yes" : "No"]",