// Bottles transfer 50 units // Beakers transfer 30 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. ///////////////////////////////Grenades /obj/item/weapon/chem_grenade name = "metal casing" icon_state = "chemg1" icon = 'chemical.dmi' item_state = "flashbang" w_class = 2.0 force = 2.0 var/stage = 0 var/state = 0 var/list/beakers = new/list() throw_speed = 4 throw_range = 20 flags = FPRINT | TABLEPASS | CONDUCT | ONBELT | USEDELAY New() var/datum/reagents/R = new/datum/reagents(1000) reagents = R R.my_atom = src attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W,/obj/item/assembly/time_ignite) && !stage) user << "\blue You add [W] to the metal casing." playsound(src.loc, 'Screwdriver2.ogg', 25, -3) del(W) //Okay so we're not really adding anything here. cheating. icon_state = "chemg2" name = "unsecured grenade" stage = 1 else if(istype(W,/obj/item/weapon/screwdriver) && stage == 1) if(beakers.len) user << "\blue You lock the assembly." playsound(src.loc, 'Screwdriver.ogg', 25, -3) name = "grenade" icon_state = "chemg3" stage = 2 else user << "\red You need to add at least one beaker before locking the assembly." else if (istype(W,/obj/item/weapon/reagent_containers/glass) && stage == 1) if(beakers.len == 2) user << "\red The grenade can not hold more containers." return else if(W.reagents.total_volume) user << "\blue You add \the [W] to the assembly." user.drop_item() W.loc = src beakers += W else user << "\red \the [W] is empty." afterattack(atom/target as mob|obj|turf|area, mob/user as mob) if (istype(target, /obj/item/weapon/storage)) return ..() if (!src.state && stage == 2) user << "\red You prime the grenade! 3 seconds!" src.state = 1 src.icon_state = "chemg4" playsound(src.loc, 'armbomb.ogg', 75, 1, -3) spawn(30) explode() user.drop_item() var/t = (isturf(target) ? target : target.loc) walk_towards(src, t, 3) attack_self(mob/user as mob) if (!src.state && stage == 2) user << "\red You prime the grenade! 3 seconds!" src.state = 1 src.icon_state = "chemg4" playsound(src.loc, 'armbomb.ogg', 75, 1, -3) spawn(30) explode() attack_hand() walk(src,0) return ..() attack_paw() return attack_hand() proc explode() var/has_reagents = 0 for(var/obj/item/weapon/reagent_containers/glass/G in beakers) if(G.reagents.total_volume) has_reagents = 1 if(!has_reagents) playsound(src.loc, 'Screwdriver2.ogg', 50, 1) state = 0 return playsound(src.loc, 'bamf.ogg', 50, 1) for(var/obj/item/weapon/reagent_containers/glass/G in beakers) G.reagents.trans_to(src, G.reagents.total_volume) if(src.reagents.total_volume) //The possible reactions didnt use up all reagents. var/datum/effects/system/steam_spread/steam = new /datum/effects/system/steam_spread() steam.set_up(10, 0, get_turf(src)) steam.attach(src) steam.start() for(var/atom/A in view(3, src.loc)) if( A == src ) continue src.reagents.reaction(A, 1, 10) invisibility = 100 //Why am i doing this? spawn(50) //To make sure all reagents can work del(src) //correctly before deleting the grenade. /obj/item/weapon/chem_grenade/metalfoam name = "metal foam grenade" desc = "Used for emergency sealing of air breaches." icon_state = "chemg3" stage = 2 New() ..() var/obj/item/weapon/reagent_containers/glass/B1 = new(src) var/obj/item/weapon/reagent_containers/glass/B2 = new(src) B1.reagents.add_reagent("aluminium", 30) B2.reagents.add_reagent("foaming_agent", 10) B2.reagents.add_reagent("pacid", 10) beakers += B1 beakers += B2 /obj/item/weapon/chem_grenade/cleaner name = "cleaner grenade" desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas." icon_state = "chemg3" stage = 2 New() ..() var/obj/item/weapon/reagent_containers/glass/B1 = new(src) var/obj/item/weapon/reagent_containers/glass/B2 = new(src) B1.reagents.add_reagent("fluorosurfactant", 30) B2.reagents.add_reagent("water", 10) B2.reagents.add_reagent("cleaner", 10) beakers += B1 beakers += B2 /* /obj/item/weapon/chem_grenade/poo name = "poo grenade" desc = "A ShiTastic! brand biological warfare charge. Not very effective unless the target is squeamish." icon_state = "chemg3" stage = 2 New() ..() var/obj/item/weapon/reagent_containers/glass/B1 = new(src) var/obj/item/weapon/reagent_containers/glass/B2 = new(src) B1.reagents.add_reagent("poo", 30) B2.reagents.add_reagent("poo", 30) beakers += B1 beakers += B2 */ ///////////////////////////////Grenades /obj/syringe_gun_dummy name = "" desc = "" icon = 'chemical.dmi' icon_state = "null" anchored = 1 density = 0 New() var/datum/reagents/R = new/datum/reagents(15) reagents = R R.my_atom = src /obj/item/weapon/gun/syringe name = "syringe gun" icon = 'gun.dmi' icon_state = "syringegun" item_state = "syringegun" w_class = 3.0 throw_speed = 2 throw_range = 10 force = 4.0 var/list/syringes = new/list() var/max_syringes = 1 m_amt = 2000 examine() set src in view(2) ..() usr << "\icon [src] Syringe gun:" usr << "\blue [syringes] / [max_syringes] Syringes." attackby(obj/item/I as obj, mob/user as mob) if(istype(I, /obj/item/weapon/reagent_containers/syringe)) if(syringes.len < max_syringes) user.drop_item() I.loc = src syringes += I user << "\blue You put the syringe in the syringe gun." user << "\blue [syringes.len] / [max_syringes] Syringes." else usr << "\red The syringe gun cannot hold more syringes." afterattack(obj/target, mob/user , flag) if(!isturf(target.loc) || target == user) return if(syringes.len) spawn(0) fire_syringe(target,user) else usr << "\red The syringe gun is empty." proc fire_syringe(atom/target, mob/user) if (locate (/obj/table, src.loc)) return else var/turf/trg = get_turf(target) var/obj/syringe_gun_dummy/D = new/obj/syringe_gun_dummy(get_turf(src)) var/obj/item/weapon/reagent_containers/syringe/S = syringes[1] S.reagents.trans_to(D, S.reagents.total_volume) syringes -= S del(S) D.icon_state = "syringeproj" D.name = "syringe" playsound(user.loc, 'syringeproj.ogg', 50, 1) for(var/i=0, i<6, i++) if(D.loc == trg) break step_towards(D,trg) for(var/mob/living/carbon/M in D.loc) if(!istype(M,/mob/living/carbon)) continue if(M == user) continue D.reagents.trans_to(M, 15) M.bruteloss += 5 for(var/mob/O in viewers(world.view, D)) O.show_message(text("\red [] was hit by the syringe!", M), 1) del(D) for(var/atom/A in D.loc) if(A == user) continue if(A.density) del(D) sleep(1) spawn(10) del(D) return /obj/reagent_dispensers name = "Dispenser" desc = "..." icon = 'objects.dmi' icon_state = "watertank" density = 1 anchored = 0 flags = FPRINT pressure_resistance = 2*ONE_ATMOSPHERE var/amount_per_transfer_from_this = 10 attackby(obj/item/weapon/W as obj, mob/user as mob) return New() var/datum/reagents/R = new/datum/reagents(1000) reagents = R R.my_atom = src examine() set src in view(2) ..() usr << "\blue It contains:" if(!reagents) return if(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." ex_act(severity) switch(severity) if(1.0) del(src) return if(2.0) if (prob(50)) new /obj/effects/water(src.loc) del(src) return if(3.0) if (prob(5)) new /obj/effects/water(src.loc) del(src) return else return blob_act() if(prob(25)) new /obj/effects/water(src.loc) del(src) /obj/item/weapon/reagent_containers name = "Container" desc = "..." icon = 'chemical.dmi' icon_state = null w_class = 1 var/amount_per_transfer_from_this = 5 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) return attackby(obj/item/I as obj, mob/user as mob) return afterattack(obj/target, mob/user , flag) return //////////////////////////////////////////////////////////////////////////////// /// (Mixing)Glass. //////////////////////////////////////////////////////////////////////////////// /obj/item/weapon/reagent_containers/glass/ name = " " desc = " " icon = 'chemical.dmi' icon_state = "null" item_state = "null" amount_per_transfer_from_this = 10 flags = FPRINT | TABLEPASS | OPENCONTAINER examine() set src in view(2) ..() usr << "\blue It contains:" if(!reagents) return if(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) if(ismob(target) && target.reagents && reagents.total_volume) user << "\blue You splash the solution onto [target]." for(var/mob/O in viewers(world.view, user)) O.show_message(text("\red [] has been splashed with something by []!", target, user), 1) src.reagents.reaction(target, TOUCH) spawn(5) src.reagents.clear_reagents() return else if(istype(target, /obj/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 var/trans = target.reagents.trans_to(src, 10) 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 var/trans = src.reagents.trans_to(target, 10) user << "\blue You transfer [trans] units of the solution to [target]." else if(reagents.total_volume && !istype(target,/obj/machinery/chem_master/) && !istype(target,/obj/table) && !istype(target,/obj/secure_closet) && !istype(target,/obj/closet) && !istype(target,/obj/item/weapon/storage) && !istype(target, /obj/machinery/atmospherics/unary/cryo_cell) && !istype(target, /obj/item/weapon/chem_grenade) && !istype(target, /obj/machinery/bot/medbot)) user << "\blue You splash the solution onto [target]." src.reagents.reaction(target, TOUCH) spawn(5) src.reagents.clear_reagents() return //////////////////////////////////////////////////////////////////////////////// /// (Mixing)Glass. END //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /// Droppers. //////////////////////////////////////////////////////////////////////////////// /obj/item/weapon/reagent_containers/dropper name = "Dropper" desc = "A dropper. Transfers 5 units." icon = 'chemical.dmi' icon_state = "dropper0" amount_per_transfer_from_this = 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 if(filled) 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)) //You can inject humans and food but you cant remove the shit. user << "\red You cannot directly fill this object." return if(ismob(target)) for(var/mob/O in viewers(world.view, user)) 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]" else if(!target.is_open_container() && !istype(target,/obj/reagent_dispensers)) user << "\red You cannot directly remove reagents from [target]." return if(!target.reagents.total_volume) user << "\red [target] is empty." return target.reagents.trans_to(src, 5) user << "\blue You fill the dropper with 5 units of the solution." filled = 1 icon_state = "dropper[filled]" return //////////////////////////////////////////////////////////////////////////////// /// Droppers. END //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /// Syringes. //////////////////////////////////////////////////////////////////////////////// /obj/item/weapon/reagent_containers/syringe name = "Syringe" desc = "A syringe." icon = 'syringe.dmi' item_state = "syringe_0" icon_state = "0" amount_per_transfer_from_this = 5 var/mode = "d" New() var/datum/reagents/R = new/datum/reagents(15) reagents = R R.maximum_volume = 15 R.my_atom = src on_reagent_change() update_icon() pickup(mob/user) ..() update_icon() dropped(mob/user) ..() update_icon() attack_self(mob/user as mob) switch(mode) if("d") mode = "i" if("i") mode = "d" update_icon() attack_hand() ..() update_icon() attack_paw() return attack_hand() attackby(obj/item/I as obj, mob/user as mob) return afterattack(obj/target, mob/user , flag) if(!target.reagents) return switch(mode) if("d") if(ismob(target)) return //Blood? if(!target.reagents.total_volume) user << "\red [target] is empty." return if(reagents.total_volume >= reagents.maximum_volume) user << "\red The syringe is full." return if(!target.is_open_container() && !istype(target,/obj/reagent_dispensers)) user << "\red You cannot directly remove reagents from this object." return target.reagents.trans_to(src, 5) user << "\blue You fill the syringe with 5 units of the solution." if("i") if(!reagents.total_volume) user << "\red The Syringe is empty." 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(ismob(target) && target != user) for(var/mob/O in viewers(world.view, user)) O.show_message(text("\red [] is trying to inject []!", user, target), 1) if(!do_mob(user, target)) return for(var/mob/O in viewers(world.view, user)) O.show_message(text("\red [] injects [] with the syringe!", user, target), 1) src.reagents.reaction(target, INGEST) 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." return proc update_icon() var/rounded_vol = round(reagents.total_volume,5) if(ismob(loc)) icon_state = "[mode][rounded_vol]" else icon_state = "[rounded_vol]" item_state = "syringe_[rounded_vol]" //////////////////////////////////////////////////////////////////////////////// /// Syringes. END //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /// Food. //////////////////////////////////////////////////////////////////////////////// /obj/item/weapon/reagent_containers/food var/heal_amt = 0 // -- Skie - Mushrooms & poisoned foor // 0 = no poison, 25 = some poison, >50 = LOTS of poison var/poison_amt = 0 // -- Skie - Psilocybin // 0 = no trip, 25 = medium trip, 50 large trip, >75 = WTF var/drug_amt = 0 // -- Skie - Hot foods // 0 = no heat, 25 = cayenne, 50 = habanero, >75 = jolokia var/heat_amt = 0 proc heal(var/mob/M) if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M for(var/A in H.organs) var/datum/organ/external/affecting = null if(!H.organs[A]) continue affecting = H.organs[A] if(!istype(affecting, /datum/organ/external)) continue if(affecting.heal_damage(src.heal_amt/2.0, src.heal_amt/2.0)) H.UpdateDamageIcon() else H.UpdateDamage() else M.bruteloss = max(0, M.bruteloss - src.heal_amt/2.0) M.fireloss = max(0, M.fireloss - src.heal_amt/2.0) M.updatehealth() proc poison(var/mob/M) var/poison_temp = src.poison_amt src = null spawn(200) if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/C = M if(poison_temp > 0) C.toxloss += rand(0,poison_temp/2) // Some initial damage C.fireloss += rand(0,poison_temp/4) // Some initial damage C.UpdateDamageIcon() C.weakened += poison_temp/(rand(1,4)) if(poison_temp > 20 && poison_temp < 50) C << "\red You feel absolutely horrible." C.emote(pick("blink", "blink_r", "twitch_s", "frown", "blush", "shrug", "pale", "sniff", "whimper", "flap", "drool", "moan", "twitch")) else if(poison_temp > 49) C << "\red You feel like your liver is being disintegrated by an infernal poison." C.emote(pick("groan", "frown", "moan", "whimper", "drool", "pale")) C.eye_blurry += poison_temp C.make_dizzy(5*poison_temp) spawn() for(poison_temp, poison_temp>0, 1) // Poison does 10 damage per tick sleep(100) // Every 10 seconds C.toxloss += min(poison_temp, 10) poison_temp -= 10 // Until poison amount is depleted proc drug(var/mob/M) var/drug_temp = src.drug_amt src = null // Detach proc spawn(200) // In 20 seconds... if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/C = M C.druggy += (drug_temp*(drug_temp/15)+10) // Have a trip if(drug_temp > 25) C.make_dizzy(5*drug_temp) // Dizzify C.stuttering = drug_temp // Speech impediments spawn(3000) // 5 minutes C << "\red You feel a craving for a trip..." if(drug_temp > 50) C.make_jittery(5*drug_temp) // Jitter spawn(-1) for(var/i=1, i == 1, 1) C.see_invisible = 15 sleep(300) C.emote(pick("blink", "blink_r", "twitch_s", "frown", "blush", "shrug", "pale", "sniff", "whimper", "flap", "drool", "moan", "twitch")) if(prob(15)) C.see_invisible = 0 i = 0 C.client.view = world.view // Return view range back to normal if(drug_temp > 75) C.confused += drug_temp // Hard to move where you want C.weakened += rand(0, drug_temp/4) // Fall on your back // Add cool stuff here later, like everything starting to look different etc. C.client.view = min(C.client.view + rand(0,4), 14) // FUCK YE proc burn(var/mob/M) var/temp_heat = src.heat_amt var/temp_name = src.name src = null spawn(50) if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/C = M // BRING ON THE HEAT/FROST spawn() while(temp_heat > 5) // Until chili pepper's potency is depleted sleep(20) // Every 2 seconds C.fireloss += 3 // Do some burn damage because body temperature itself doesn't do anything :( if (temp_heat > 0 && temp_name == "Chili") C.bodytemperature += min(temp_heat*5, 25) temp_heat -= 5 // Until heat amount is depleted else if (temp_heat > 0 && temp_name == "Icepepper") // Herp derp, bad way to do it but herp derp C.bodytemperature -= min(temp_heat*5, 25) temp_heat -= 5 // Until heat amount is depleted /obj/item/weapon/reagent_containers/food/snacks name = "snack" desc = "yummy" icon = 'food.dmi' icon_state = null var/amount = 3 heal_amt = 1 New() var/datum/reagents/R = new/datum/reagents(10) 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) if(!src.amount) user << "\red None of [src] left, oh no!" del(src) return 0 if(istype(M, /mob/living/carbon/human)) if(M == user) M << "\blue You take a bite of [src]." if(reagents.total_volume) reagents.reaction(M, INGEST) spawn(5) reagents.trans_to(M, reagents.total_volume) src.amount-- playsound(M.loc,'eatfood.ogg', rand(10,50), 1) M.nutrition += src.heal_amt * 10 M.poo += 0.1 if(src.heal_amt > 0) src.heal(M) if(src.poison_amt > 0) src.poison(M) if(src.drug_amt > 0) src.drug(M) if(src.heat_amt > 0) src.burn(M) if(!src.amount) user << "\red You finish eating [src]." del(src) return 1 else 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, reagents.total_volume) src.amount-- playsound(M.loc, 'eatfood.ogg', rand(10,50), 1) M.nutrition += src.heal_amt * 10 M.poo += 0.1 if(src.heal_amt > 0) src.heal(M) if(src.poison_amt > 0) src.poison(M) if(src.drug_amt > 0) src.drug(M) if(src.heat_amt > 0) src.burn(M) if(!src.amount) user << "\red [M] finishes eating [src]." del(src) return 1 return 0 attackby(obj/item/I as obj, mob/user as mob) return afterattack(obj/target, mob/user , flag) return //////////////////////////////////////////////////////////////////////////////// /// FOOD END //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /// Drinks. //////////////////////////////////////////////////////////////////////////////// /obj/item/weapon/reagent_containers/food/drinks name = "drink" desc = "yummy" icon = 'food.dmi' 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. New() var/datum/reagents/R = new/datum/reagents(50) reagents = R R.my_atom = src update_gulp_size() proc update_gulp_size() gulp_size = round(reagents.total_volume / 5) if (gulp_size < 5) gulp_size = 5 on_reagent_change() update_gulp_size() 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.total_volume || !R) user << "\red None of [src] left, oh no!" return 0 if(M == user) M << "\blue You swallow a gulp of [src]." if(reagents.total_volume) reagents.reaction(M, INGEST) spawn(5) reagents.trans_to(M, gulp_size) playsound(M.loc,'drink.ogg', rand(10,50), 1) M.urine += 0.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, gulp_size) playsound(M.loc,'drink.ogg', rand(10,50), 1) M.urine += 0.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, 10) 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. 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 var/trans = src.reagents.trans_to(target, 10) user << "\blue You transfer [trans] units of the solution to [target]." return //////////////////////////////////////////////////////////////////////////////// /// Drinks. END //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /// Pills. //////////////////////////////////////////////////////////////////////////////// /obj/item/weapon/reagent_containers/pill name = "pill" desc = "a pill." icon = 'chemical.dmi' icon_state = null item_state = "pill" New() var/datum/reagents/R = new/datum/reagents(100) reagents = R R.my_atom = src icon_state = "pill[rand(1,20)]" 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) if(M == user) M << "\blue You swallow [src]." if(reagents.total_volume) reagents.reaction(M, INGEST) spawn(5) reagents.trans_to(M, reagents.total_volume) del(src) else del(src) 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 force [M] to swallow [src].", 1) if(!do_mob(user, M)) return for(var/mob/O in viewers(world.view, user)) O.show_message("\red [user] forces [M] to swallow [src].", 1) if(reagents.total_volume) reagents.reaction(M, INGEST) spawn(5) reagents.trans_to(M, reagents.total_volume) del(src) else del(src) return 1 return 0 attackby(obj/item/I as obj, mob/user as mob) return afterattack(obj/target, mob/user , flag) if(target.is_open_container() == 1 && target.reagents) if(!target.reagents.total_volume) user << "\red [target] is empty. Cant dissolve pill." return user << "\blue You dissolve the pill in [target]" reagents.trans_to(target, reagents.total_volume) for(var/mob/O in viewers(2, user)) O.show_message("\red [user] puts something in [target].", 1) spawn(5) del(src) return //////////////////////////////////////////////////////////////////////////////// /// Pills. END //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /// Subtypes. //////////////////////////////////////////////////////////////////////////////// //Glasses /obj/item/weapon/reagent_containers/glass/bucket desc = "It's a bucket." name = "bucket" icon = 'janitor.dmi' icon_state = "bucket" item_state = "bucket" m_amt = 200 g_amt = 0 amount_per_transfer_from_this = 10 flags = FPRINT | OPENCONTAINER New() var/datum/reagents/R = new/datum/reagents(30) reagents = R R.my_atom = src attackby(var/obj/D, mob/user as mob) if(istype(D, /obj/item/device/prox_sensor)) var/obj/item/weapon/bucket_sensor/B = new /obj/item/weapon/bucket_sensor B.loc = user if (user.r_hand == D) user.u_equip(D) user.r_hand = B else user.u_equip(D) user.l_hand = B B.layer = 20 user << "You add the sensor to the bucket" del(D) del(src) /obj/item/weapon/reagent_containers/glass/dispenser name = "reagent glass" desc = "A reagent glass." icon = 'chemical.dmi' icon_state = "beaker" amount_per_transfer_from_this = 10 flags = FPRINT | TABLEPASS | OPENCONTAINER /obj/item/weapon/reagent_containers/glass/dispenser/surfactant name = "reagent glass (surfactant)" icon_state = "liquid" New() ..() reagents.add_reagent("fluorosurfactant", 20) /obj/item/weapon/reagent_containers/glass/large name = "large reagent glass" desc = "A large reagent glass." icon = 'chemical.dmi' icon_state = "beakerlarge" item_state = "beaker" amount_per_transfer_from_this = 10 flags = FPRINT | TABLEPASS | OPENCONTAINER New() var/datum/reagents/R = new/datum/reagents(50) reagents = R R.my_atom = src /obj/item/weapon/reagent_containers/glass/bottle/ name = "bottle" desc = "A small bottle." icon = 'chemical.dmi' icon_state = "bottle16" item_state = "atoxinbottle" amount_per_transfer_from_this = 10 flags = FPRINT | TABLEPASS | OPENCONTAINER New() var/datum/reagents/R = new/datum/reagents(30) reagents = R R.my_atom = src icon_state = "bottle[rand(1,20)]" /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline name = "inaprovaline bottle" desc = "A small bottle. Contains inaprovaline - used to stabilize patients." icon = 'chemical.dmi' icon_state = "bottle16" amount_per_transfer_from_this = 10 New() var/datum/reagents/R = new/datum/reagents(30) reagents = R R.my_atom = src R.add_reagent("inaprovaline", 30) /obj/item/weapon/reagent_containers/glass/bottle/toxin name = "toxin bottle" desc = "A small bottle." icon = 'chemical.dmi' icon_state = "bottle12" amount_per_transfer_from_this = 5 New() var/datum/reagents/R = new/datum/reagents(30) reagents = R R.my_atom = src R.add_reagent("toxin", 30) /obj/item/weapon/reagent_containers/glass/bottle/stoxin name = "sleep-toxin bottle" desc = "A small bottle." icon = 'chemical.dmi' icon_state = "bottle20" amount_per_transfer_from_this = 5 New() var/datum/reagents/R = new/datum/reagents(30) reagents = R R.my_atom = src R.add_reagent("stoxin", 30) /obj/item/weapon/reagent_containers/glass/bottle/antitoxin name = "anti-toxin bottle" desc = "A small bottle." icon = 'chemical.dmi' icon_state = "bottle17" amount_per_transfer_from_this = 5 New() var/datum/reagents/R = new/datum/reagents(30) reagents = R R.my_atom = src R.add_reagent("anti_toxin", 30) /obj/item/weapon/reagent_containers/glass/beaker name = "beaker" desc = "A beaker. Can hold up to 30 units." icon = 'chemical.dmi' icon_state = "beaker0" item_state = "beaker" on_reagent_change() if(reagents.total_volume) icon_state = "beaker1" else icon_state = "beaker0" /obj/item/weapon/reagent_containers/glass/beaker/cryoxadone name = "beaker" desc = "A beaker. Can hold up to 30 units." icon = 'chemical.dmi' icon_state = "beaker0" item_state = "beaker" New() var/datum/reagents/R = new/datum/reagents(30) reagents = R R.my_atom = src R.add_reagent("cryoxadone", 30) //Syringes /obj/item/weapon/reagent_containers/syringe/robot name = "Syringe (mixed)" desc = "Contains inaprovaline & anti-toxins." New() var/datum/reagents/R = new/datum/reagents(15) reagents = R R.maximum_volume = 15 R.my_atom = src R.add_reagent("inaprovaline", 7) R.add_reagent("anti_toxin", 8) mode = "i" update_icon() /obj/item/weapon/reagent_containers/syringe/inaprovaline name = "Syringe (inaprovaline)" desc = "Contains inaprovaline - used to stabilize patients." New() var/datum/reagents/R = new/datum/reagents(15) reagents = R R.maximum_volume = 15 R.my_atom = src R.add_reagent("inaprovaline", 15) update_icon() /obj/item/weapon/reagent_containers/syringe/antitoxin name = "Syringe (anti-toxin)" desc = "Contains anti-toxins." New() var/datum/reagents/R = new/datum/reagents(15) reagents = R R.maximum_volume = 15 R.my_atom = src R.add_reagent("anti_toxin", 15) update_icon() /obj/item/weapon/reagent_containers/syringe/antiviral name = "Syringe (spaceacillin)" desc = "Contains antiviral agents." New() var/datum/reagents/R = new/datum/reagents(15) reagents = R R.maximum_volume = 15 R.my_atom = src R.add_reagent("spaceacillin", 15) update_icon() //Snacks /obj/item/weapon/reagent_containers/food/snacks/candy name = "candy" desc = "Man, that shit looks good. I bet it's got nougat. Fuck." icon_state = "candy" heal_amt = 1 /obj/item/weapon/reagent_containers/food/snacks/chips name = "chips" desc = "Commander Riker's What-The-Crisps" icon_state = "chips" heal_amt = 1 /obj/item/weapon/reagent_containers/food/snacks/donut name = "donut" desc = "Goes great with Robust Coffee." icon_state = "donut1" heal_amt = 1 New() ..() if(rand(1,3) == 1) src.icon_state = "donut2" src.name = "frosted donut" src.heal_amt = 2 heal(var/mob/M) if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective")) src.heal_amt *= 2 ..() src.heal_amt /= 2 /obj/item/weapon/reagent_containers/food/snacks/egg name = "egg" desc = "An egg!" icon_state = "egg" amount = 1 heal_amt = 1 /obj/item/weapon/reagent_containers/food/snacks/flour name = "flour" desc = "Some flour" icon_state = "flour" amount = 1 /obj/item/weapon/reagent_containers/food/snacks/humanmeat name = "-meat" desc = "A slab of meat" icon_state = "meat" var/subjectname = "" var/subjectjob = null amount = 1 /obj/item/weapon/reagent_containers/food/snacks/assburger name = "assburger" desc = "This burger gives off an air of awkwardness." icon_state = "assburger" amount = 5 heal_amt = 2 /obj/item/weapon/reagent_containers/food/snacks/brainburger name = "brainburger" desc = "A strange looking burger. It looks almost sentient." icon_state = "brainburger" amount = 5 heal_amt = 2 /obj/item/weapon/reagent_containers/food/snacks/faggot name = "faggot" desc = "A great meal all round." icon_state = "faggot" amount = 1 heal_amt = 2 heal(var/mob/M) ..() /obj/item/weapon/reagent_containers/food/snacks/donkpocket name = "donk-pocket" desc = "The food of choice for the seasoned traitor." icon_state = "donkpocket" heal_amt = 1 amount = 1 var/warm = 0 heal(var/mob/M) if(src.warm && M.reagents) M.reagents.add_reagent("tricordrazine",15) else M << "\red It's just not good enough cold.." ..() proc/cooltime() if (src.warm) spawn( 4200 ) src.warm = 0 src.name = "donk-pocket" return /obj/item/weapon/reagent_containers/food/snacks/humanburger name = "-burger" var/hname = "" var/job = null desc = "A bloody burger." icon_state = "hburger" amount = 5 heal_amt = 2 heal(var/mob/M) ..() /obj/item/weapon/reagent_containers/food/snacks/monkeyburger name = "monkeyburger" desc = "The cornerstone of every nutritious breakfast." icon_state = "mburger" amount = 5 heal_amt = 2 /obj/item/weapon/reagent_containers/food/snacks/meatbread name = "meatbread loaf" desc = "The culinary base of every self-respecting eloquen/tg/entleman." icon_state = "meatbread" amount = 30 heal_amt = 5 /* New() var/datum/reagents/R = new/datum/reagents(20) reagents = R R.my_atom = src R.add_reagent("cholesterol", 20)*/ heal(var/mob/M) ..() /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice name = "meatbread slice" desc = "A slice of delicious meatbread." icon_state = "meatbreadslice" amount = 5 heal_amt = 6 New() /* var/datum/reagents/R = new/datum/reagents(10) reagents = R R.my_atom = src R.add_reagent("cholesterol", 10)*/ heal(var/mob/M) ..() /obj/item/weapon/reagent_containers/food/snacks/cheesewheel name = "Cheese wheel" desc = "A big wheel of delcious Cheddar." icon_state = "cheesewheel" amount = 25 heal_amt = 3 heal(var/mob/M) ..() /obj/item/weapon/reagent_containers/food/snacks/cheesewedge name = "Cheese wedge" desc = "A wedge of delicious Cheddar. The cheese wheel it was cut from can't have gone far." icon_state = "cheesewedge" amount = 4 heal_amt = 4 heal(var/mob/M) ..() /obj/item/weapon/reagent_containers/food/snacks/omelette name = "Omelette Du Fromage" desc = "That's all you can say!" icon_state = "omelette" amount = 15 heal_amt = 3 heal(var/mob/M) ..() attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W,/obj/item/weapon/kitchen/utensil/fork)) W.icon = 'kitchen.dmi' W.icon_state = "forkloaded" world << "[user] takes a piece of omelette with his fork!" /obj/item/weapon/reagent_containers/food/snacks/omeletteforkload name = "Omelette Du Fromage" desc = "That's all you can say!" amount = 1 heal_amt = 4 heal(var/mob/M) ..() /obj/item/weapon/reagent_containers/food/snacks/muffin name = "Muffin" desc = "A delicious and spongy little cake" icon_state = "muffin" amount = 4 heal_amt = 6 heal(var/mob/M) ..() /obj/item/weapon/reagent_containers/food/snacks/roburger name = "roburger" desc = "The lettuce is the only organic component. Beep." icon_state = "roburger" New() var/datum/reagents/R = new/datum/reagents(5) reagents = R R.my_atom = src R.add_reagent("nanites", 5) /obj/item/weapon/reagent_containers/food/snacks/xenoburger name = "xenoburger" desc = "Smells caustic. Tastes like heresy." icon_state = "xburger" New() var/datum/reagents/R = new/datum/reagents(5) reagents = R R.my_atom = src R.add_reagent("xenomicrobes", 5) /obj/item/weapon/reagent_containers/food/snacks/monkeymeat name = "meat" desc = "A slab of meat" icon_state = "meat" amount = 1 /obj/item/weapon/reagent_containers/food/snacks/xenomeat name = "meat" desc = "A slab of meat" icon_state = "xenomeat" amount = 1 /obj/item/weapon/reagent_containers/food/snacks/pie name = "custard pie" desc = "It smells delicious. You just want to plant your face in it." icon_state = "pie" amount = 3 /obj/item/weapon/reagent_containers/food/snacks/waffles name = "waffles" desc = "Mmm, waffles" icon_state = "waffles" amount = 5 heal_amt = 2 //Drinks /obj/item/weapon/reagent_containers/food/drinks/coffee name = "Robust Coffee" desc = "Careful, the beverage you're about to enjoy is extremely hot." icon_state = "coffee" heal_amt = 1 New() var/datum/reagents/R = new/datum/reagents(50) reagents = R R.my_atom = src R.add_reagent("coffee", 30) /obj/item/weapon/reagent_containers/food/drinks/cola name = "space cola" desc = "Cola. in space." icon_state = "cola" heal_amt = 1 New() var/datum/reagents/R = new/datum/reagents(50) reagents = R R.my_atom = src R.add_reagent("cola", 30) /obj/item/weapon/reagent_containers/food/drinks/beer name = "Space Beer" desc = "Beer. in space." icon_state = "beer" heal_amt = 1 New() var/datum/reagents/R = new/datum/reagents(50) reagents = R R.my_atom = src R.add_reagent("beer", 30) /obj/item/weapon/reagent_containers/food/drinks/milk name = "Space Milk" desc = "It's milk. White and nutritious goodness!" icon_state = "milk" heal_amt = 2 //Pills /obj/item/weapon/reagent_containers/pill/antitox name = "Anti-toxins pill" desc = "Neutralizes many common toxins." icon_state = "pill17" New() var/datum/reagents/R = new/datum/reagents(100) reagents = R R.my_atom = src R.add_reagent("anti_toxin", 50) /obj/item/weapon/reagent_containers/pill/tox name = "Toxins pill" desc = "Highly toxic." icon_state = "pill5" New() var/datum/reagents/R = new/datum/reagents(100) reagents = R R.my_atom = src R.add_reagent("toxin", 50) /obj/item/weapon/reagent_containers/pill/stox name = "Sleeping pill" desc = "Commonly used to treat insomnia." icon_state = "pill8" New() var/datum/reagents/R = new/datum/reagents(100) reagents = R R.my_atom = src R.add_reagent("stoxin", 30) /obj/item/weapon/reagent_containers/pill/kelotane name = "Kelotane pill" desc = "Used to treat burns." icon_state = "pill11" New() var/datum/reagents/R = new/datum/reagents(100) reagents = R R.my_atom = src R.add_reagent("kelotane", 30) /obj/item/weapon/reagent_containers/pill/inaprovaline name = "Inaprovaline pill" desc = "Used to stabilize patients." icon_state = "pill20" New() var/datum/reagents/R = new/datum/reagents(100) reagents = R R.my_atom = src R.add_reagent("inaprovaline", 30) //Dispensers /obj/reagent_dispensers/watertank name = "watertank" desc = "A watertank" icon = 'objects.dmi' icon_state = "watertank" amount_per_transfer_from_this = 10 New() ..() reagents.add_reagent("water",1000) /obj/reagent_dispensers/fueltank name = "fueltank" desc = "A fueltank" icon = 'objects.dmi' icon_state = "weldtank" amount_per_transfer_from_this = 10 New() ..() reagents.add_reagent("fuel",1000) /obj/reagent_dispensers/beerkeg name = "beer keg" desc = "A beer keg" icon = 'objects.dmi' icon_state = "beertankTEMP" amount_per_transfer_from_this = 10 New() ..() reagents.add_reagent("beer",1000)