diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 641dcfd1bb5..d6c14a4709d 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1185,10 +1185,17 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /datum/supply_packs/misc/watertank name = "Water Tank Crate" contains = list(/obj/structure/reagent_dispensers/watertank) - cost = 8 + cost = 6 containertype = /obj/structure/largecrate containername = "water tank crate" +/datum/supply_packs/misc/hightank + name = "High-Capacity Water Tank Crate" + contains = list(/obj/structure/reagent_dispensers/watertank/high) + cost = 12 + containertype = /obj/structure/largecrate + containername = "high-capacity water tank crate" + /datum/supply_packs/misc/lasertag name = "Laser Tag Crate" contains = list(/obj/item/weapon/gun/energy/laser/redtag, diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 69f03730ce2..feb681e47c2 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -43,14 +43,20 @@ /obj/item/toy/balloon/attack(mob/living/carbon/human/M as mob, mob/user as mob) return -/obj/item/toy/balloon/afterattack(atom/A as mob|obj, mob/user as mob, proximity) - if(!proximity) return - if(istype(A, /obj/structure/reagent_dispensers) && get_dist(src,A) <= 1) - A.reagents.trans_to(src, 10) - to_chat(user, "You fill the balloon with the contents of [A].") - desc = "A translucent balloon with some form of liquid sloshing around in it." - update_icon() - return +/obj/item/toy/balloon/afterattack(atom/A, mob/user, proximity) + if(!proximity) + return + if(istype(A, /obj/structure/reagent_dispensers)) + var/obj/structure/reagent_dispensers/RD = A + if(RD.reagents.total_volume <= 0) + to_chat(user, "[RD] is empty.") + else if(reagents.total_volume >= 10) + to_chat(user, "[src] is full.") + else + A.reagents.trans_to(src, 10) + to_chat(user, "You fill the balloon with the contents of [A].") + desc = "A translucent balloon with some form of liquid sloshing around in it." + update_icon() /obj/item/toy/balloon/wash(mob/user, atom/source) if(reagents.total_volume < 10) @@ -877,7 +883,7 @@ obj/item/toy/cards/deck/syndicate/black /obj/item/toy/minimeteor name = "Mini-Meteor" - desc = "Relive the excitement of a meteor shower! SweetMeat-eor. Co is not responsible for any injuries, headaches or hearing loss caused by Mini-Meteor™" + desc = "Relive the excitement of a meteor shower! SweetMeat-eor. Co is not responsible for any injuries, headaches or hearing loss caused by Mini-Meteor." icon = 'icons/obj/toy.dmi' icon_state = "minimeteor" w_class = 2 diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 176108b8f08..b7f5e370b95 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -266,22 +266,9 @@ else return ..() -/obj/item/weapon/weldingtool/afterattack(obj/O as obj, mob/user as mob, proximity) - if(!proximity) return - if(istype(O, /obj/structure/reagent_dispensers/fueltank) && in_range(src, O)) - if(!welding) - O.reagents.trans_to(src, max_fuel) - to_chat(user, "[src] refueled.") - playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) - update_icon() - return - else - message_admins("[key_name_admin(user)] triggered a fueltank explosion.") - log_game("[key_name(user)] triggered a fueltank explosion.") - to_chat(user, "That was stupid of you.") - O.ex_act() - return - +/obj/item/weapon/weldingtool/afterattack(atom/O, mob/user, proximity) + if(!proximity) + return if(welding) remove_fuel(1) var/turf/location = get_turf(user) @@ -289,7 +276,9 @@ if(isliving(O)) var/mob/living/L = O - L.IgniteMob() + if(L.IgniteMob()) + message_admins("[key_name_admin(user)] set [key_name_admin(L)] on fire") + log_game("[key_name(user)] set [key_name(L)] on fire") /obj/item/weapon/weldingtool/attack_self(mob/user) toggle(user) diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index eedae606007..ee1d2821fa1 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -61,7 +61,7 @@ to_chat(user, " [src] is full.") return - var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this) + var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) to_chat(user, " 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. @@ -332,7 +332,7 @@ desc = "A cup with the british flag emblazoned on it." icon_state = "britcup" volume = 30 - + /obj/item/weapon/reagent_containers/food/drinks/mushroom_bowl name = "mushroom bowl" desc = "A bowl made out of mushrooms. Not food, though it might have contained some at some point." diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index 6079bd3392b..b170f6b0867 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -39,7 +39,8 @@ /obj/machinery/smartfridge/, /obj/machinery/biogenerator, /obj/machinery/hydroponics, - /obj/machinery/constructable_frame) + /obj/machinery/constructable_frame, + /obj/machinery/icemachine) /obj/item/weapon/reagent_containers/glass/New() ..() @@ -62,7 +63,8 @@ update_icon() /obj/item/weapon/reagent_containers/glass/afterattack(obj/target, mob/user, proximity) - if(!proximity) return + if(!proximity) + return if(!is_open_container()) return @@ -94,16 +96,16 @@ return else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. - if(!target.reagents.total_volume && target.reagents) - to_chat(user, "[target] is empty.") + if(target.reagents && !target.reagents.total_volume) + to_chat(user, "[target] is empty and can't be refilled!") return if(reagents.total_volume >= reagents.maximum_volume) - to_chat(user, "[src] is full.") + to_chat(user, "[src] is full.") return - var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this) - to_chat(user, "You fill [src] with [trans] units of the contents of [target].") + var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) + to_chat(user, "You fill [src] with [trans] unit\s 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) diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 274c3efd623..cc4bf75ea45 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -34,7 +34,7 @@ to_chat(user, "[src] is full.") return - var/trans = A.reagents.trans_to(src, A:amount_per_transfer_from_this) + var/trans = A.reagents.trans_to(src, 50) //This is a static amount, otherwise, it'll take forever to fill. to_chat(user, "You fill [src] with [trans] units of the contents of [A].") return diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 4c2d2caa6b8..f050f6708e7 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -1,5 +1,3 @@ -#define AUTOIGNITION_WELDERFUEL 561.15 - /obj/structure/reagent_dispensers name = "Dispenser" desc = "..." @@ -9,109 +7,97 @@ anchored = 0 pressure_resistance = 2*ONE_ATMOSPHERE - var/amount_per_transfer_from_this = 10 - var/possible_transfer_amounts = list(10,25,50,100) + var/tank_volume = 1000 //In units, how much the dispenser can hold + var/reagent_id = "water" //The ID of the reagent that the dispenser uses /obj/structure/reagent_dispensers/attackby(obj/item/weapon/W, mob/user, params) return /obj/structure/reagent_dispensers/New() - create_reagents(1000) - if(!possible_transfer_amounts) - verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT + create_reagents(tank_volume) + reagents.add_reagent(reagent_id, tank_volume) ..() /obj/structure/reagent_dispensers/examine(mob/user) if(!..(user, 2)) return - to_chat(user, "It contains:") - if(reagents && reagents.reagent_list.len) - for(var/datum/reagent/R in reagents.reagent_list) - to_chat(user, "[R.volume] units of [R.name]") + if(reagents.total_volume) + to_chat(user, "It has [reagents.total_volume] units left.") else - to_chat(user, "Nothing.") + to_chat(user, "It's empty.") -/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this - set name = "Set transfer amount" - set category = "Object" - set src in view(1) - if(usr.stat || !usr.canmove || usr.restrained()) - return - var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts - if(N) - amount_per_transfer_from_this = N + +/obj/structure/reagent_dispensers/proc/boom() + visible_message("[src] ruptures!") + qdel(src) /obj/structure/reagent_dispensers/ex_act(severity) switch(severity) - if(1.0) - qdel(src) - return - if(2.0) + if(1) + boom() + if(2) if(prob(50)) - new /obj/effect/effect/water(loc) - qdel(src) - return - if(3.0) + boom() + if(3) if(prob(5)) - new /obj/effect/effect/water(loc) - qdel(src) - return - else - return + boom() /obj/structure/reagent_dispensers/blob_act() if(prob(50)) - new /obj/effect/effect/water(loc) - qdel(src) - - - - - + boom() //Dispensers /obj/structure/reagent_dispensers/watertank - name = "watertank" - desc = "A watertank" - icon = 'icons/obj/objects.dmi' - icon_state = "watertank" - amount_per_transfer_from_this = 10 + name = "water tank" + desc = "A water tank." + icon_state = "water" -/obj/structure/reagent_dispensers/watertank/New() +/obj/structure/reagent_dispensers/watertank/boom() + playsound(loc, 'sound/effects/spray2.ogg', 50, 1, -6) + new /obj/effect/effect/water(loc) + for(var/turf/simulated/T in view(5, loc)) + T.MakeSlippery() + for(var/mob/living/L in T) + L.adjust_fire_stacks(-20) ..() - reagents.add_reagent("water",1000) + +/obj/structure/reagent_dispensers/watertank/high + name = "high-capacity water tank" + desc = "A highly-pressurized water tank made to hold gargantuan amounts of water.." + icon_state = "water_high" //I was gonna clean my room... + tank_volume = 100000 /obj/structure/reagent_dispensers/fueltank - name = "fueltank" - desc = "A fueltank" - icon = 'icons/obj/objects.dmi' - icon_state = "weldtank" - amount_per_transfer_from_this = 10 + name = "fuel tank" + desc = "A tank full of industrial welding fuel. Do not consume." + icon_state = "fuel" + reagent_id = "fuel" var/obj/item/device/assembly_holder/rig = null var/accepts_rig = 1 -/obj/structure/reagent_dispensers/fueltank/New() +/obj/structure/reagent_dispensers/fueltank/Destroy() + if(rig) + qdel(rig) + rig = null + return ..() + +/obj/structure/reagent_dispensers/fueltank/bullet_act(obj/item/projectile/P) ..() - reagents.add_reagent("fuel",1000) + if(!qdeleted(src)) //wasn't deleted by the projectile's effects. + if(!P.nodamage && ((P.damage_type == BURN) || (P.damage_type == BRUTE))) + message_admins("[key_name_admin(P.firer)] triggered a fueltank explosion.") + log_game("[key_name(P.firer)] triggered a fueltank explosion.") + boom() -/obj/structure/reagent_dispensers/fueltank/bullet_act(obj/item/projectile/Proj) - ..() - if(istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))) - message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.") - log_game("[key_name(Proj.firer)] triggered a fueltank explosion.") - boom() +/obj/structure/reagent_dispensers/fueltank/boom() + explosion(loc, 0, 1, 5, 7, 10, flame_range = 5) + qdel(src) -/obj/structure/reagent_dispensers/fueltank/proc/boom() - explosion(loc,0,1,5,7,10, flame_range = 5) - if(src) - qdel(src) - -/obj/structure/reagent_dispensers/fueltank/blob_act(obj/effect/blob/B) +/obj/structure/reagent_dispensers/fueltank/blob_act() boom() - /obj/structure/reagent_dispensers/fueltank/ex_act() boom() @@ -133,34 +119,53 @@ usr.visible_message("[usr] begins to detach [rig] from [src].", "You begin to detach [rig] from [src].") if(do_after(usr, 20, target = src)) usr.visible_message("[usr] detaches [rig] from [src].", "You detach [rig] from [src].") - rig.loc = get_turf(usr) + rig.forceMove(get_turf(usr)) rig = null - overlays = new/list() + overlays.Cut() -/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W,/obj/item/device/assembly_holder) && accepts_rig) +/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/device/assembly_holder) && accepts_rig) if(rig) to_chat(user, "There is another device in the way.") return ..() - user.visible_message("[user] begins rigging [W] to [src].", "You begin rigging [W] to [src]") + user.visible_message("[user] begins rigging [I] to [src].", "You begin rigging [I] to [src]") if(do_after(user, 20, target = src)) - user.visible_message("[user] rigs [W] to [src].", "You rig [W] to [src].") + user.visible_message("[user] rigs [I] to [src].", "You rig [I] to [src].") - var/obj/item/device/assembly_holder/H = W - if(istype(H.a_left,/obj/item/device/assembly/igniter) || istype(H.a_right,/obj/item/device/assembly/igniter)) + var/obj/item/device/assembly_holder/H = I + if(istype(H.a_left, /obj/item/device/assembly/igniter) || istype(H.a_right, /obj/item/device/assembly/igniter)) msg_admin_attack("[key_name_admin(user)] rigged a fueltank for explosion (JMP)") log_game("[key_name(user)] rigged fueltank a fueltank for explosion at [loc.x], [loc.y], [loc.z]") - rig = W + rig = H user.drop_item() - W.loc = src + H.forceMove(src) - var/icon/test = getFlatIcon(W) - test.Shift(NORTH,1) - test.Shift(EAST,6) + var/icon/test = getFlatIcon(H) + test.Shift(NORTH, 1) + test.Shift(EAST, 6) overlays += test - return ..() + if(istype(I, /obj/item/weapon/weldingtool)) + if(!reagents.has_reagent("fuel")) + to_chat(user, "[src] is out of fuel!") + return + var/obj/item/weapon/weldingtool/W = I + if(!W.welding) + if(W.reagents.has_reagent("fuel", W.max_fuel)) + to_chat(user, "Your [W] is already full!") + return + reagents.trans_to(W, W.max_fuel) + user.visible_message("[user] refills \his [W].", "You refill [W].") + playsound(src, 'sound/effects/refill.ogg', 50, 1) + W.update_icon() + else + user.visible_message("[user] catastrophically fails at refilling \his [W]!", "That was stupid of you.") + message_admins("[key_name_admin(user)] triggered a fueltank explosion.") + log_game("[key_name(user)] triggered a fueltank explosion.") + boom() + else + ..() /obj/structure/reagent_dispensers/fueltank/Move() ..() @@ -190,76 +195,65 @@ /obj/structure/reagent_dispensers/peppertank - name = "Pepper Spray Refiller" - desc = "Refill pepper spray canisters." - icon = 'icons/obj/objects.dmi' - icon_state = "peppertank" + name = "pepper spray refiller" + desc = "Contains condensed capsaicin for use in law \"enforcement.\"" + icon_state = "pepper" anchored = 1 density = 0 - amount_per_transfer_from_this = 45 - -/obj/structure/reagent_dispensers/peppertank/New() - ..() - reagents.add_reagent("condensedcapsaicin",1000) - + reagent_id = "condensedcapsaicin" /obj/structure/reagent_dispensers/water_cooler - name = "Water-Cooler" - desc = "A machine that dispenses water to drink" - amount_per_transfer_from_this = 5 + name = "liquid cooler" + desc = "A machine that dispenses liquid to drink." icon = 'icons/obj/vending.dmi' icon_state = "water_cooler" - possible_transfer_amounts = null anchored = 1 + tank_volume = 500 + var/paper_cups = 25 //Paper cups left from the cooler -/obj/structure/reagent_dispensers/water_cooler/New() - ..() - reagents.add_reagent("water",500) +/obj/structure/reagent_dispensers/water_cooler/examine(mob/user) + if(!..(user, 2)) + return + to_chat(user, "There are [paper_cups ? paper_cups : "no"] paper cups left.") +/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/living/user) + if(!paper_cups) + to_chat(user, "There aren't any cups left!") + return + user.visible_message("[user] takes a cup from [src].", "You take a paper cup from [src].") + var/obj/item/weapon/reagent_containers/food/drinks/sillycup/S = new(get_turf(src)) + user.put_in_hands(S) + paper_cups-- /obj/structure/reagent_dispensers/beerkeg name = "beer keg" - desc = "A beer keg" - icon = 'icons/obj/objects.dmi' - icon_state = "beertankTEMP" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/beerkeg/New() - ..() - reagents.add_reagent("beer",1000) + desc = "Beer is liquid bread, it's good for you..." + icon_state = "beer" + reagent_id = "beer" /obj/structure/reagent_dispensers/beerkeg/blob_act() - explosion(loc,0,3,5,7,10) + explosion(loc, 0, 3, 5, 7, 10) qdel(src) /obj/structure/reagent_dispensers/virusfood - name = "Virus Food Dispenser" - desc = "A dispenser of virus food." - icon = 'icons/obj/objects.dmi' - icon_state = "virusfoodtank" - amount_per_transfer_from_this = 10 + name = "virus food dispenser" + desc = "A dispenser of low-potency virus mutagenic." + icon_state = "virus_food" anchored = 1 density = 0 - -/obj/structure/reagent_dispensers/virusfood/New() - ..() - reagents.add_reagent("virusfood", 1000) + reagent_id = "virusfood" /obj/structure/reagent_dispensers/spacecleanertank name = "space cleaner refiller" desc = "Refills space cleaner bottles." - icon = 'icons/obj/objects.dmi' - icon_state = "spacecleanertank" + icon_state = "cleaner" anchored = 1 density = 0 - amount_per_transfer_from_this = 250 - -/obj/structure/reagent_dispensers/spacecleanertank/New() - ..() - reagents.add_reagent("cleaner",5000) + tank_volume = 5000 + reagent_id = "cleaner" /obj/structure/reagent_dispensers/fueltank/chem - icon_state = "weldingtank_chem" + icon_state = "fuel_chem" anchored = 1 density = 0 accepts_rig = 0 \ No newline at end of file diff --git a/code/modules/research/xenoarchaeology/machinery/coolant.dm b/code/modules/research/xenoarchaeology/machinery/coolant.dm index f0750f6388e..ffbf02c23bc 100644 --- a/code/modules/research/xenoarchaeology/machinery/coolant.dm +++ b/code/modules/research/xenoarchaeology/machinery/coolant.dm @@ -9,43 +9,5 @@ /obj/structure/reagent_dispensers/coolanttank name = "coolant tank" desc = "A tank of industrial coolant" - icon = 'icons/obj/objects.dmi' icon_state = "coolanttank" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/coolanttank/New() - ..() - reagents.add_reagent("coolant",1000) - -/obj/structure/reagent_dispensers/coolanttank/bullet_act(var/obj/item/projectile/Proj) - if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet)) - if(!Proj.damage) - explode() - -/obj/structure/reagent_dispensers/coolanttank/blob_act() - explode() - -/obj/structure/reagent_dispensers/coolanttank/ex_act() - explode() - -/obj/structure/reagent_dispensers/coolanttank/proc/explode() - var/datum/effect/system/harmless_smoke_spread/S = new /datum/effect/system/harmless_smoke_spread - //S.attach(src) - S.set_up(5, 0, src.loc) - - playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3) - spawn(0) - S.start() - - var/datum/gas_mixture/env = src.loc.return_air() - if(env) - if(reagents.total_volume > 750) - env.temperature = 0 - else if(reagents.total_volume > 500) - env.temperature -= 100 - else - env.temperature -= 50 - - sleep(10) - if(src) - qdel(src) + reagent_id = "coolant" \ No newline at end of file diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index ea68e3dbdbd..53d3954ec06 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ