Merge pull request #5074 from Fox-McCloud/adminbus-reagent

Tweaks Adminordrazine, Cleans up Reagents, Fixes body temperature adjustments, and makes a few tweaks
This commit is contained in:
TheDZD
2016-07-18 14:41:45 -04:00
committed by GitHub
50 changed files with 1112 additions and 1953 deletions
+20 -22
View File
@@ -49,7 +49,7 @@ var/const/INGEST = 2
chemical_reactions_list[id] += D
break // Don't bother adding ourselves to other reagent ids, it is redundant.
/datum/reagents/proc/remove_any(var/amount=1)
/datum/reagents/proc/remove_any(amount=1)
var/total_transfered = 0
var/current_list_element = 1
@@ -91,7 +91,7 @@ var/const/INGEST = 2
return the_id
/datum/reagents/proc/trans_to(var/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred.
/datum/reagents/proc/trans_to(target, amount=1, multiplier=1, preserve_data=1)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred.
if(!target)
return
if(src.total_volume <= 0)
@@ -135,7 +135,7 @@ var/const/INGEST = 2
src.handle_reactions()
return amount
/datum/reagents/proc/copy_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1, var/safety = 0)
/datum/reagents/proc/copy_to(obj/target, amount=1, multiplier=1, preserve_data=1, safety = 0)
if(!target)
return
if(!target.reagents || src.total_volume<=0)
@@ -156,7 +156,7 @@ var/const/INGEST = 2
src.handle_reactions()
return amount
/datum/reagents/proc/trans_id_to(var/obj/target, var/reagent, var/amount=1, var/preserve_data=1)//Not sure why this proc didn't exist before. It does now! /N
/datum/reagents/proc/trans_id_to(obj/target, reagent, amount=1, preserve_data=1)//Not sure why this proc didn't exist before. It does now! /N
if(!target)
return
if(!target.reagents || src.total_volume<=0 || !src.get_reagent_amount(reagent))
@@ -214,12 +214,12 @@ var/const/INGEST = 2
*/
/datum/reagents/proc/conditional_update_move(var/atom/A, var/Running = 0)
/datum/reagents/proc/conditional_update_move(atom/A, Running = 0)
for(var/datum/reagent/R in reagent_list)
R.on_move (A, Running)
update_total()
/datum/reagents/proc/conditional_update(var/atom/A, )
/datum/reagents/proc/conditional_update(atom/A, )
for(var/datum/reagent/R in reagent_list)
R.on_update (A)
update_total()
@@ -323,14 +323,14 @@ var/const/INGEST = 2
update_total()
return 0
/datum/reagents/proc/isolate_reagent(var/reagent)
/datum/reagents/proc/isolate_reagent(reagent)
for(var/A in reagent_list)
var/datum/reagent/R = A
if(R.id != reagent)
del_reagent(R.id)
update_total()
/datum/reagents/proc/del_reagent(var/reagent)
/datum/reagents/proc/del_reagent(reagent)
for(var/A in reagent_list)
var/datum/reagent/R = A
if(R.id == reagent)
@@ -341,8 +341,6 @@ var/const/INGEST = 2
qdel(A)
update_total()
my_atom.on_reagent_change()
check_gofast(my_atom)
check_goreallyfast(my_atom)
return 0
@@ -363,7 +361,7 @@ var/const/INGEST = 2
del_reagent(R.id)
return 0
/datum/reagents/proc/reaction_check(var/mob/M, var/datum/reagent/R)
/datum/reagents/proc/reaction_check(mob/M, datum/reagent/R)
var/can_process = 0
if(!istype(M, /mob/living)) //Non-living mobs can't metabolize reagents, so don't bother trying (runtime safety check)
return can_process
@@ -436,7 +434,7 @@ var/const/INGEST = 2
var/amt = list_reagents[r_id]
add_reagent(r_id, amt, data)
/datum/reagents/proc/add_reagent(var/reagent, var/amount, var/list/data=null, var/reagtemp = 300)
/datum/reagents/proc/add_reagent(reagent, amount, list/data=null, reagtemp = 300)
if(!isnum(amount)) return 1
update_total()
if(total_volume + amount > maximum_volume) amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen.
@@ -476,7 +474,7 @@ var/const/INGEST = 2
return 1
/datum/reagents/proc/remove_reagent(var/reagent, var/amount, var/safety)//Added a safety check for the trans_id_to
/datum/reagents/proc/remove_reagent(reagent, amount, safety)//Added a safety check for the trans_id_to
if(!isnum(amount)) return 1
@@ -492,7 +490,7 @@ var/const/INGEST = 2
return 1
/datum/reagents/proc/has_reagent(var/reagent, var/amount = -1)
/datum/reagents/proc/has_reagent(reagent, amount = -1)
for(var/A in reagent_list)
var/datum/reagent/R = A
@@ -504,7 +502,7 @@ var/const/INGEST = 2
return 0
/datum/reagents/proc/get_reagent_amount(var/reagent)
/datum/reagents/proc/get_reagent_amount(reagent)
for(var/A in reagent_list)
var/datum/reagent/R = A
if(R.id == reagent)
@@ -520,7 +518,7 @@ var/const/INGEST = 2
return res
/datum/reagents/proc/remove_all_type(var/reagent_type, var/amount, var/strict = 0, var/safety = 1) // Removes all reagent of X type. @strict set to 1 determines whether the childs of the type are included.
/datum/reagents/proc/remove_all_type(reagent_type, amount, strict = 0, safety = 1) // Removes all reagent of X type. @strict set to 1 determines whether the childs of the type are included.
if(!isnum(amount)) return 1
var/has_removed_reagent = 0
@@ -542,7 +540,7 @@ var/const/INGEST = 2
return has_removed_reagent
// Admin logging.
/datum/reagents/proc/get_reagent_ids(var/and_amount=0)
/datum/reagents/proc/get_reagent_ids(and_amount=0)
var/list/stuff = list()
for(var/datum/reagent/A in reagent_list)
if(and_amount)
@@ -552,19 +550,19 @@ var/const/INGEST = 2
return english_list(stuff)
//two helper functions to preserve data across reactions (needed for xenoarch)
/datum/reagents/proc/get_data(var/reagent_id)
/datum/reagents/proc/get_data(reagent_id)
for(var/datum/reagent/D in reagent_list)
if(D.id == reagent_id)
// to_chat(world, "proffering a data-carrying reagent ([reagent_id])")
return D.data
/datum/reagents/proc/set_data(var/reagent_id, var/new_data)
/datum/reagents/proc/set_data(reagent_id, new_data)
for(var/datum/reagent/D in reagent_list)
if(D.id == reagent_id)
// to_chat(world, "reagent data set ([reagent_id])")
D.data = new_data
/datum/reagents/proc/copy_data(var/datum/reagent/current_reagent)
/datum/reagents/proc/copy_data(datum/reagent/current_reagent)
if(!current_reagent || !current_reagent.data) return null
if(!istype(current_reagent.data, /list)) return current_reagent.data
@@ -588,11 +586,11 @@ var/const/INGEST = 2
// Convenience proc to create a reagents holder for an atom
// Max vol is maximum volume of holder
atom/proc/create_reagents(var/max_vol)
atom/proc/create_reagents(max_vol)
reagents = new/datum/reagents(max_vol)
reagents.my_atom = src
/datum/reagents/proc/get_reagent_from_id(var/id)
/datum/reagents/proc/get_reagent_from_id(id)
var/datum/reagent/result = null
for(var/datum/reagent/R in reagent_list)
if(R.id == id)
+34 -34
View File
@@ -19,7 +19,7 @@
var/hackedcheck = 0
var/list/dispensable_reagents = list("hydrogen", "lithium", "carbon", "nitrogen", "oxygen", "fluorine",
"sodium", "aluminum", "silicon", "phosphorus", "sulfur", "chlorine", "potassium", "iron",
"copper", "mercury", "plasma", "radium", "water", "ethanol", "sugar", "tungsten", "iodine", "bromine", "silver")
"copper", "mercury", "plasma", "radium", "water", "ethanol", "sugar", "iodine", "bromine", "silver")
var/list/hacked_reagents = list("toxin")
var/hack_message = "You disable the safety safeguards, enabling the \"Mad Scientist\" mode."
var/unhack_message = "You re-enable the safety safeguards, enabling the \"NT Standard\" mode."
@@ -108,7 +108,7 @@
* @return nothing
*/
/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main",var/datum/nanoui/ui = null, var/force_open = 1)
/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
if(broken_requirements.len)
to_chat(user, "<span class='warning'>[src] is broken. [broken_requirements[broken_requirements[1]]]</span>")
return
@@ -197,7 +197,7 @@
add_fingerprint(usr)
return 1 // update UIs attached to this object
/obj/machinery/chem_dispenser/attackby(var/obj/item/weapon/reagent_containers/B as obj, var/mob/user as mob, params)
/obj/machinery/chem_dispenser/attackby(obj/item/weapon/reagent_containers/B, mob/user, params)
if(isrobot(user))
return
@@ -232,7 +232,7 @@
overlays += icon_beaker
return
/obj/machinery/chem_dispenser/attackby(var/obj/item/weapon/B as obj, var/mob/user as mob, params)
/obj/machinery/chem_dispenser/attackby(obj/item/weapon/B, mob/user, params)
..()
if(istype(B, /obj/item/device/multitool))
if(hackedcheck == 0)
@@ -247,13 +247,13 @@
hackedcheck = 0
return
/obj/machinery/chem_dispenser/attack_ai(mob/user as mob)
/obj/machinery/chem_dispenser/attack_ai(mob/user)
return src.attack_hand(user)
/obj/machinery/chem_dispenser/attack_ghost(mob/user as mob)
/obj/machinery/chem_dispenser/attack_ghost(mob/user)
return src.attack_hand(user)
/obj/machinery/chem_dispenser/attack_hand(mob/user as mob)
/obj/machinery/chem_dispenser/attack_hand(mob/user)
if(stat & BROKEN)
return
@@ -297,7 +297,7 @@
amount = 5
recharge_delay = 10
dispensable_reagents = list()
var/list/special_reagents = list(list("hydrogen", "oxygen", "silicon", "phosphorus", "sulfur", "carbon", "nitrogen", "tungsten", "water"),
var/list/special_reagents = list(list("hydrogen", "oxygen", "silicon", "phosphorus", "sulfur", "carbon", "nitrogen", "water"),
list("lithium", "sugar", "copper", "mercury", "sodium","iodine","bromine"),
list("ethanol", "chlorine", "potassium", "aluminum","plasma", "radium", "fluorine", "iron", "silver"),
list("oil", "ash", "acetone", "saltpetre", "ammonia", "diethylamine", "fuel"))
@@ -343,7 +343,7 @@
for(i=1, i<=M.rating, i++)
dispensable_reagents = sortList(dispensable_reagents | special_reagents[i])
/obj/machinery/chem_dispenser/constructable/attackby(var/obj/item/I, var/mob/user, params)
/obj/machinery/chem_dispenser/constructable/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/reagent_containers/glass))
if(panel_open)
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
@@ -426,7 +426,7 @@
spawn(rand(0, 15))
stat |= NOPOWER
/obj/machinery/chem_master/attackby(var/obj/item/weapon/B as obj, var/mob/user as mob, params)
/obj/machinery/chem_master/attackby(obj/item/weapon/B, mob/user, params)
if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B, /obj/item/weapon/reagent_containers/food/drinks/drinkingglass))
@@ -692,31 +692,31 @@
nanomanager.update_uis(src)
return
/obj/machinery/chem_master/attack_ai(mob/user as mob)
/obj/machinery/chem_master/attack_ai(mob/user)
return src.attack_hand(user)
/obj/machinery/chem_master/attack_ghost(mob/user as mob)
/obj/machinery/chem_master/attack_ghost(mob/user)
return src.attack_hand(user)
/obj/machinery/chem_master/attack_hand(mob/user as mob)
/obj/machinery/chem_master/attack_hand(mob/user)
if(..())
return 1
ui_interact(user)
return
/obj/machinery/chem_master/ui_interact(mob/user, ui_key="main", var/datum/nanoui/ui = null, var/force_open = 1)
/obj/machinery/chem_master/ui_interact(mob/user, ui_key="main", datum/nanoui/ui = null, force_open = 1)
var/datum/asset/chem_master/assets = get_asset_datum(/datum/asset/chem_master)
assets.send(user)
var/data = list()
data["condi"] = condi
data["loaded_pill_bottle"] = (loaded_pill_bottle ? 1 : 0)
if(loaded_pill_bottle)
data["loaded_pill_bottle_contents_len"] = loaded_pill_bottle.contents.len
data["loaded_pill_bottle_storage_slots"] = loaded_pill_bottle.storage_slots
data["beaker"] = (beaker ? 1 : 0)
if(beaker)
var/list/beaker_reagents_list = list()
@@ -727,17 +727,17 @@
data["buffer_reagents"] = buffer_reagents_list
for(var/datum/reagent/R in reagents.reagent_list)
buffer_reagents_list[++buffer_reagents_list.len] = list("name" = R.name, "volume" = R.volume, "id" = R.id, "description" = R.description)
data["pillsprite"] = pillsprite
data["mode"] = mode
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
ui = new(user, src, ui_key, "chem_master.tmpl", src.name, 575, 400)
ui.set_initial_data(data)
ui.open()
/obj/machinery/chem_master/proc/isgoodnumber(var/num)
/obj/machinery/chem_master/proc/isgoodnumber(num)
if(isnum(num))
if(num > 200)
num = 200
@@ -874,7 +874,7 @@
icon_state = "juicer"+num2text(!isnull(beaker))
return
/obj/machinery/reagentgrinder/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
/obj/machinery/reagentgrinder/attackby(obj/item/O, mob/user, params)
if(istype(O,/obj/item/weapon/reagent_containers/glass) || \
istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \
@@ -924,14 +924,14 @@
src.updateUsrDialog()
return 0
/obj/machinery/reagentgrinder/attack_ai(mob/user as mob)
/obj/machinery/reagentgrinder/attack_ai(mob/user)
return 0
/obj/machinery/reagentgrinder/attack_hand(mob/user as mob)
/obj/machinery/reagentgrinder/attack_hand(mob/user)
user.set_machine(src)
interact(user)
/obj/machinery/reagentgrinder/interact(mob/user as mob) // The microwave Menu
/obj/machinery/reagentgrinder/interact(mob/user) // The microwave Menu
var/is_chamber_empty = 0
var/is_beaker_ready = 0
var/processing_chamber = ""
@@ -1014,38 +1014,38 @@
holdingitems -= O
holdingitems = list()
/obj/machinery/reagentgrinder/proc/is_allowed(var/obj/item/weapon/reagent_containers/O)
/obj/machinery/reagentgrinder/proc/is_allowed(obj/item/weapon/reagent_containers/O)
for(var/i in blend_items)
if(istype(O, i))
return 1
return 0
/obj/machinery/reagentgrinder/proc/get_allowed_by_id(var/obj/item/weapon/grown/O)
/obj/machinery/reagentgrinder/proc/get_allowed_by_id(obj/item/weapon/grown/O)
for(var/i in blend_items)
if(istype(O, i))
return blend_items[i]
/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_id(var/obj/item/weapon/reagent_containers/food/snacks/O)
/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_id(obj/item/weapon/reagent_containers/food/snacks/O)
for(var/i in blend_items)
if(istype(O, i))
return blend_items[i]
/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_id(var/obj/item/weapon/reagent_containers/food/snacks/O)
/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_id(obj/item/weapon/reagent_containers/food/snacks/O)
for(var/i in juice_items)
if(istype(O, i))
return juice_items[i]
/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_tag(var/obj/item/weapon/reagent_containers/food/snacks/grown/O)
/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_tag(obj/item/weapon/reagent_containers/food/snacks/grown/O)
for(var/i in blend_tags)
if(O.seed.kitchen_tag == i)
return blend_tags[i]
/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_tag(var/obj/item/weapon/reagent_containers/food/snacks/grown/O)
/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_tag(obj/item/weapon/reagent_containers/food/snacks/grown/O)
for(var/i in juice_tags)
if(O.seed.kitchen_tag == i)
return juice_tags[i]
/obj/machinery/reagentgrinder/proc/get_grownweapon_amount(var/obj/item/weapon/grown/O)
/obj/machinery/reagentgrinder/proc/get_grownweapon_amount(obj/item/weapon/grown/O)
if(!istype(O))
return 5
else if(O.potency == -1)
@@ -1053,7 +1053,7 @@
else
return round(O.potency)
/obj/machinery/reagentgrinder/proc/get_juice_amount(var/obj/item/weapon/reagent_containers/food/snacks/grown/O)
/obj/machinery/reagentgrinder/proc/get_juice_amount(obj/item/weapon/reagent_containers/food/snacks/grown/O)
if(!istype(O))
return 5
else if(O.potency == -1)
@@ -1061,7 +1061,7 @@
else
return round(5*sqrt(O.potency))
/obj/machinery/reagentgrinder/proc/remove_object(var/obj/item/O)
/obj/machinery/reagentgrinder/proc/remove_object(obj/item/O)
holdingitems -= O
qdel(O)
@@ -29,7 +29,7 @@
message = "The blob splashes you with burning oil"
message_living = ", and you feel your skin char and melt"
/datum/reagent/blob/boiling_oil/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
/datum/reagent/blob/boiling_oil/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == TOUCH)
M.adjust_fire_stacks(round(volume/12))
volume = ..()
@@ -97,7 +97,7 @@
color = "#61407E"
message = "You feel a thrum as the blob strikes you, and everything flies at you"
/datum/reagent/blob/dark_matter/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
/datum/reagent/blob/dark_matter/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == TOUCH)
reagent_vortex(M, 0, volume)
volume = ..()
@@ -110,7 +110,7 @@
color = "#808000"
message = "The blob slams into you, and sends you flying"
/datum/reagent/blob/b_sorium/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
/datum/reagent/blob/b_sorium/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == TOUCH)
reagent_vortex(M, 1, volume)
volume = ..()
@@ -145,7 +145,7 @@
if(!step_towards(X, pull))
break
/datum/reagent/blob/proc/send_message(var/mob/living/M as mob)
/datum/reagent/blob/proc/send_message(mob/living/M)
var/totalmessage = message
if(message_living && !issilicon(M))
totalmessage += message_living
+10 -20
View File
@@ -19,8 +19,7 @@
description = "Microscopic construction robots."
color = "#535E66" // rgb: 83, 94, 102
/datum/reagent/nanomachines/on_mob_life(var/mob/living/carbon/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/nanomachines/on_mob_life(mob/living/carbon/M)
if(volume > 1.5)
M.ForceContractDisease(new /datum/disease/transformation/robot(0))
..()
@@ -32,8 +31,7 @@
description = "Microbes with an entirely alien cellular structure."
color = "#535E66" // rgb: 83, 94, 102
/datum/reagent/xenomicrobes/on_mob_life(var/mob/living/carbon/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/xenomicrobes/on_mob_life(mob/living/carbon/M)
if(volume > 1.5)
M.ContractDisease(new /datum/disease/transformation/xeno(0))
..()
@@ -44,8 +42,7 @@
description = "Active fungal spores."
color = "#92D17D" // rgb: 146, 209, 125
/datum/reagent/fungalspores/on_mob_life(var/mob/living/carbon/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/fungalspores/on_mob_life(mob/living/carbon/M)
if(volume > 2.5)
M.ForceContractDisease(new /datum/disease/tuberculosis(0))
..()
@@ -57,8 +54,7 @@
reagent_state = SOLID
color = "#FA0000" // rgb: 250, 0, 0
/datum/reagent/jagged_crystals/on_mob_life(var/mob/living/carbon/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/jagged_crystals/on_mob_life(mob/living/carbon/M)
M.ForceContractDisease(new /datum/disease/berserker(0))
..()
@@ -69,8 +65,7 @@
reagent_state = LIQUID
color = "#1E4600"
/datum/reagent/salmonella/on_mob_life(var/mob/living/carbon/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/salmonella/on_mob_life(mob/living/carbon/M)
M.ForceContractDisease(new /datum/disease/food_poisoning(0))
..()
@@ -81,8 +76,7 @@
reagent_state = LIQUID
color = "#FF0000"
/datum/reagent/gibbis/on_mob_life(var/mob/living/carbon/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/gibbis/on_mob_life(mob/living/carbon/M)
if(volume > 2.5)
M.ForceContractDisease(new /datum/disease/gbs/curable(0))
..()
@@ -94,8 +88,7 @@
reagent_state = LIQUID
color = "#FFFFFF"
/datum/reagent/prions/on_mob_life(var/mob/living/carbon/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/prions/on_mob_life(mob/living/carbon/M)
if(volume > 4.5)
M.ForceContractDisease(new /datum/disease/kuru(0))
..()
@@ -107,8 +100,7 @@
reagent_state = LIQUID
color = "#465046"
/datum/reagent/grave_dust/on_mob_life(var/mob/living/carbon/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/grave_dust/on_mob_life(mob/living/carbon/M)
if(volume > 4.5)
M.ForceContractDisease(new /datum/disease/vampire(0))
..()
@@ -120,8 +112,7 @@
reagent_state = SOLID
color = "#925D6C"
/datum/reagent/heartworms/on_mob_life(var/mob/living/carbon/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/heartworms/on_mob_life(mob/living/carbon/M)
if(volume > 4.5)
if(ishuman(M))
var/mob/living/carbon/human/H = M
@@ -140,8 +131,7 @@
var/client/blob_client = null
var/blob_point_rate = 3
/datum/reagent/spore/on_mob_life(var/mob/living/M)
if(!M) M = holder.my_atom
/datum/reagent/spore/on_mob_life(mob/living/M)
if(holder.has_reagent("atrazine",45))
holder.del_reagent("spore") //apparently this never metabolizes and stays in forever unless you have 45 units of atrazine in you or some stupid thing like that.
if(prob(1))
+5 -8
View File
@@ -14,8 +14,7 @@
mix_message = "The drink turns electric blue and starts quivering violently."
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
/datum/reagent/ginsonic/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/ginsonic/on_mob_life(mob/living/M)
M.drowsyness = max(0, M.drowsyness-5)
if(prob(25))
M.AdjustParalysis(-1)
@@ -29,7 +28,6 @@
else
to_chat(M, "<span class='notice'>[sonic_message ]</span>")
..()
return
/datum/reagent/ethanol/applejack
name = "Applejack"
@@ -72,13 +70,12 @@
color = "#DC0000"
alcohol_perc = 1
/datum/reagent/ethanol/dragons_breath/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
/datum/reagent/ethanol/dragons_breath/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == INGEST && prob(20))
if(M.on_fire)
M.adjust_fire_stacks(3)
/datum/reagent/ethanol/dragons_breath/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/ethanol/dragons_breath/on_mob_life(mob/living/M)
if(M.reagents.has_reagent("milk"))
to_chat(M, "<span class='notice'>The milk stops the burning. Ahhh.</span>")
M.reagents.del_reagent("milk")
@@ -128,7 +125,7 @@
mix_message = "The chemicals mix to create shiny, blue substance."
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
/datum/reagent/ethanol/synthanol/on_mob_life(var/mob/living/M as mob, var/alien)
/datum/reagent/ethanol/synthanol/on_mob_life(mob/living/M)
if(!M.isSynthetic())
holder.remove_reagent(id, 3.6) //gets removed from organics very fast
if(prob(25))
@@ -136,7 +133,7 @@
M.fakevomit()
..()
datum/reagent/ethanol/synthanol/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
/datum/reagent/ethanol/synthanol/reaction_mob(mob/M, method=TOUCH, volume)
if(!istype(M, /mob/living))
return
if(M.isSynthetic())
+34 -47
View File
@@ -13,8 +13,7 @@
overdose_threshold = 35
addiction_chance = 70
/datum/reagent/nicotine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/nicotine/on_mob_life(mob/living/M)
var/smoke_message = pick("You feel relaxed.", "You feel calmed.", "You feel less stressed.", "You feel more placid.", "You feel more undivided.")
if(prob(5))
to_chat(M, "<span class='notice'>[smoke_message]</span>")
@@ -24,9 +23,8 @@
M.AdjustWeakened(-1)
M.adjustStaminaLoss(-1*REM)
..()
return
/datum/reagent/nicotine/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/nicotine/overdose_process(mob/living/M, severity)
var/effect = ..()
if(severity == 1)
if(effect <= 2)
@@ -75,8 +73,7 @@
overdose_threshold = 20
addiction_chance = 50
/datum/reagent/crank/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/crank/on_mob_life(mob/living/M)
M.AdjustParalysis(-2)
M.AdjustStunned(-2)
M.AdjustWeakened(-2)
@@ -95,9 +92,8 @@
M.jitteriness += 30
M.emote(pick("groan", "moan"))
..()
return
/datum/reagent/crank/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/crank/overdose_process(mob/living/M, severity)
var/effect = ..()
if(severity == 1)
if(effect <= 2)
@@ -146,12 +142,11 @@
mix_sound = 'sound/goonstation/effects/crystalshatter.ogg'
min_temp = 390
/datum/chemical_reaction/crank/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/crank/on_reaction(datum/reagents/holder, created_volume)
var/turf/T = get_turf(holder.my_atom)
for(var/turf/turf in range(1,T))
new /obj/effect/hotspot(turf)
explosion(T,0,0,2)
return
/datum/reagent/krokodil
name = "Krokodil"
@@ -163,8 +158,7 @@
addiction_chance = 50
/datum/reagent/krokodil/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/krokodil/on_mob_life(mob/living/M)
M.jitteriness -= 40
if(prob(25))
M.adjustBrainLoss(1)
@@ -185,9 +179,8 @@
to_chat(M, "<span class='warning'>Your skin feels all rough and dry.</span>")
M.adjustBruteLoss(2)
..()
return
/datum/reagent/krokodil/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/krokodil/overdose_process(mob/living/M, severity)
var/effect = ..()
if(severity == 1)
if(effect <= 2)
@@ -242,8 +235,7 @@
addiction_chance = 60
metabolization_rate = 0.6
/datum/reagent/methamphetamine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/methamphetamine/on_mob_life(mob/living/M)
if(prob(5))
M.emote(pick("twitch_s","blink_r","shiver"))
if(current_cycle >= 25)
@@ -258,9 +250,12 @@
if(prob(50))
M.adjustBrainLoss(1.0)
..()
return
/datum/reagent/methamphetamine/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/methamphetamine/reagent_deleted(mob/living/M)
M.status_flags &= ~GOTTAGOREALLYFAST
..()
/datum/reagent/methamphetamine/overdose_process(mob/living/M, severity)
var/effect = ..()
if(severity == 1)
if(effect <= 2)
@@ -293,7 +288,7 @@
result_amount = 4
min_temp = 374
/datum/chemical_reaction/methamphetamine/on_reaction(var/datum/reagents/holder)
/datum/chemical_reaction/methamphetamine/on_reaction(datum/reagents/holder)
var/turf/T = get_turf(holder.my_atom)
T.visible_message("<span class='warning'>The solution generates a strong vapor!</span>")
for(var/mob/living/carbon/C in range(T, 1))
@@ -328,8 +323,7 @@
addiction_chance = 80
metabolization_rate = 0.6
/datum/reagent/bath_salts/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/bath_salts/on_mob_life(mob/living/M)
var/check = rand(0,100)
if(ishuman(M))
var/mob/living/carbon/human/H = M
@@ -361,7 +355,7 @@
to_chat(M, "<span class='userdanger'>THEY'RE GONNA GET YOU!</span>")
..()
/datum/reagent/bath_salts/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
/datum/reagent/bath_salts/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == INGEST)
to_chat(M, "<span class = 'danger'><font face='[pick("Curlz MT", "Comic Sans MS")]' size='[rand(4,6)]'>You feel FUCKED UP!!!!!!</font></span>")
M << 'sound/effects/singlebeat.ogg'
@@ -372,7 +366,7 @@
else
to_chat(M, "<span class='notice'>You feel a bit more salty than usual.</span>")
/datum/reagent/bath_salts/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/bath_salts/overdose_process(mob/living/M, severity)
var/effect = ..()
if(severity == 1)
if(effect <= 2)
@@ -434,7 +428,7 @@
mix_message = "The mixture ferments into a filthy morass."
mix_sound = 'sound/effects/blobattack.ogg'
/datum/chemical_reaction/jenkem/on_reaction(var/datum/reagents/holder)
/datum/chemical_reaction/jenkem/on_reaction(datum/reagents/holder)
var/turf/T = get_turf(holder.my_atom)
T.visible_message("<span class='warning'>The solution generates a strong vapor!</span>")
for(var/mob/living/carbon/C in range(T, 1))
@@ -449,8 +443,7 @@
color = "#644600"
addiction_chance = 30
/datum/reagent/jenkem/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/jenkem/on_mob_life(mob/living/M)
M.Dizzy(5)
if(prob(10))
M.emote(pick("twitch_s","drool","moan"))
@@ -471,8 +464,7 @@
reagent_state = LIQUID
color = "#60A584" // rgb: 96, 165, 132
/datum/reagent/aranesp/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/aranesp/on_mob_life(mob/living/M)
M.adjustStaminaLoss(-40)
if(prob(90))
M.adjustToxLoss(1)
@@ -487,7 +479,6 @@
M.Stun(1)
M.losebreath++
..()
return
/datum/reagent/thc
name = "Tetrahydrocannabinol"
@@ -497,8 +488,7 @@
color = "#0FBE0F"
/datum/reagent/thc/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/thc/on_mob_life(mob/living/M)
M.stuttering += rand(0,2)
if(prob(5))
M.emote(pick("laugh","giggle","smile"))
@@ -510,7 +500,6 @@
if(prob(10))
M.drowsyness = max(M.drowsyness, 10)
..()
return
/datum/reagent/fliptonium
name = "Fliptonium"
@@ -531,15 +520,14 @@
result_amount = 4
mix_message = "The mixture swirls around excitedly!"
/datum/reagent/fliptonium/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
/datum/reagent/fliptonium/reaction_mob(mob/M, method=TOUCH, volume)
if(!istype(M, /mob/living))
return
if(method == INGEST || method == TOUCH)
M.SpinAnimation(speed = 12, loops = -1)
..()
/datum/reagent/fliptonium/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/fliptonium/on_mob_life(mob/living/M)
if(current_cycle == 5)
M.SpinAnimation(speed = 11, loops = -1)
if(current_cycle == 10)
@@ -564,12 +552,11 @@
M.adjustStaminaLoss(-1.5)
M.SetSleeping(0)
..()
return
/datum/reagent/fliptonium/reagent_deleted(var/mob/living/M as mob)
/datum/reagent/fliptonium/reagent_deleted(mob/living/M)
M.SpinAnimation(speed = 12, loops = -1)
/datum/reagent/fliptonium/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/fliptonium/overdose_process(mob/living/M, severity)
var/effect = ..()
if(severity == 1)
if(effect <= 2)
@@ -619,8 +606,7 @@
result_amount = 2
mix_message = "The mixture darkens and appears to partially vaporize into a chilling aerosol."
/datum/reagent/lube/ultra/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/lube/ultra/on_mob_life(mob/living/M)
var/high_message = pick("You feel your servos whir!", "You feel like you need to go faster.", "You feel like you were just overclocked!")
if(prob(1))
if(prob(1))
@@ -637,9 +623,12 @@
if(prob(5))
M.emote(pick("twitch", "shiver"))
..()
return
/datum/reagent/lube/ultra/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/lube/ultra/reagent_deleted(mob/living/M)
M.status_flags &= ~GOTTAGOREALLYFAST
..()
/datum/reagent/lube/ultra/overdose_process(mob/living/M, severity)
if(prob(20))
M.emote("ping")
if(prob(33))
@@ -647,10 +636,10 @@
var/obj/item/I = M.get_active_hand()
if(I)
M.drop_item()
..()
if(prob(50))
M.adjustFireLoss(10)
M.adjustBrainLoss(pick(0.5, 0.6, 0.7, 0.8, 0.9, 1))
..()
//Surge: Krokodil
/datum/reagent/surge
@@ -665,8 +654,7 @@
addiction_chance = 50
/datum/reagent/surge/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/surge/on_mob_life(mob/living/M)
M.druggy = max(M.druggy, 15)
var/high_message = pick("You feel calm.", "You feel collected.", "You feel like you need to relax.")
if(prob(1))
@@ -675,9 +663,8 @@
if(prob(5))
to_chat(M, "<span class='notice'>[high_message]</span>")
..()
return
/datum/reagent/surge/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/surge/overdose_process(mob/living/M, severity)
//Hit them with the same effects as an electrode!
M.Stun(5)
M.Weaken(5)
+42 -70
View File
@@ -6,7 +6,7 @@
color = "#63DE63"
metabolization_rate = 0.4
datum/reagent/questionmark/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
/datum/reagent/questionmark/reaction_mob(mob/M, method=TOUCH, volume)
if(!istype(M, /mob/living))
return
if(method == INGEST)
@@ -15,23 +15,21 @@ datum/reagent/questionmark/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
to_chat(M, "<span class='danger'>Ugh! Eating that was a terrible idea!</span>")
M.ForceContractDisease(new /datum/disease/food_poisoning(0))
datum/reagent/egg
/datum/reagent/egg
name = "Egg"
id = "egg"
description = "A runny and viscous mixture of clear and yellow fluids."
reagent_state = LIQUID
color = "#F0C814"
datum/reagent/egg/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/egg/on_mob_life(mob/living/M)
if(prob(8))
M.emote("fart")
if(prob(3))
M.reagents.add_reagent("cholesterol", rand(1,2))
..()
return
datum/reagent/triple_citrus
/datum/reagent/triple_citrus
name = "Triple Citrus"
id = "triple_citrus"
description = "A refreshing mixed drink of orange, lemon and lime juice."
@@ -47,13 +45,13 @@ datum/reagent/triple_citrus
mix_message = "The citrus juices begin to blend together."
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
datum/reagent/triple_citrus/reaction_mob(var/mob/living/carbon/M as mob, var/method=TOUCH, var/volume)
/datum/reagent/triple_citrus/reaction_mob(mob/living/carbon/M, method=TOUCH, volume)
if(!istype(M, /mob/living/carbon))
return
if(method == INGEST)
M.adjustToxLoss(-rand(1,2))
datum/reagent/corn_starch
/datum/reagent/corn_starch
name = "Corn Starch"
id = "corn_starch"
description = "The powdered starch of maize, derived from the kernel's endosperm. Used as a thickener for gravies and puddings."
@@ -69,18 +67,16 @@ datum/reagent/corn_starch
min_temp = 374
mix_message = "The mixture forms a viscous, clear fluid!"
datum/reagent/corn_syrup
/datum/reagent/corn_syrup
name = "Corn Syrup"
id = "corn_syrup"
description = "A sweet syrup derived from corn starch that has had its starches converted into maltose and other sugars."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/corn_syrup/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/corn_syrup/on_mob_life(mob/living/M)
M.reagents.add_reagent("sugar", 1.2)
..()
return
/datum/chemical_reaction/vhfcs
name = "vhfcs"
@@ -91,18 +87,16 @@ datum/reagent/corn_syrup/on_mob_life(var/mob/living/M as mob)
result_amount = 1
mix_message = "The mixture emits a sickly-sweet smell."
datum/reagent/vhfcs
/datum/reagent/vhfcs
name = "Very-high-fructose corn syrup"
id = "vhfcs"
description = "An incredibly sweet syrup, created from corn syrup treated with enzymes to convert its sugars into fructose."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/vhfcs/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/vhfcs/on_mob_life(mob/living/M)
M.reagents.add_reagent("sugar", 2.4)
..()
return
/datum/chemical_reaction/cola
name = "cola"
@@ -120,14 +114,11 @@ datum/reagent/vhfcs/on_mob_life(var/mob/living/M as mob)
reagent_state = LIQUID
color = "#d3a308"
datum/reagent/honey/on_mob_life(var/mob/living/M as mob)
if(!M)
M = holder.my_atom
/datum/reagent/honey/on_mob_life(mob/living/M)
M.reagents.add_reagent("sugar", 0.4)
if(prob(20))
M.heal_organ_damage(3,1)
..()
return
/datum/reagent/chocolate
name = "Chocolate"
@@ -137,18 +128,15 @@ datum/reagent/honey/on_mob_life(var/mob/living/M as mob)
nutriment_factor = 5 * REAGENTS_METABOLISM //same as pure cocoa powder, because it makes no sense that chocolate won't fill you up and make you fat
color = "#2E2418"
/datum/reagent/chocolate/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/chocolate/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
M.reagents.add_reagent("sugar", 0.8)
..()
return
/datum/reagent/chocolate/reaction_turf(var/turf/T, var/volume)
/datum/reagent/chocolate/reaction_turf(turf/T, volume)
src = null
if(volume >= 5)
new /obj/item/weapon/reagent_containers/food/snacks/choc_pile(T)
return
/datum/reagent/mugwort
name = "Mugwort"
@@ -157,8 +145,7 @@ datum/reagent/honey/on_mob_life(var/mob/living/M as mob)
reagent_state = LIQUID
color = "#21170E"
datum/reagent/mugwort/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/mugwort/on_mob_life(mob/living/M)
if(istype(M, /mob/living/carbon/human) && M.mind)
if(M.mind.special_role == "Wizard")
M.adjustToxLoss(-1*REM)
@@ -166,7 +153,6 @@ datum/reagent/mugwort/on_mob_life(var/mob/living/M as mob)
M.adjustBruteLoss(-1*REM)
M.adjustFireLoss(-1*REM)
..()
return
/datum/reagent/porktonium
name = "Porktonium"
@@ -177,7 +163,7 @@ datum/reagent/mugwort/on_mob_life(var/mob/living/M as mob)
metabolization_rate = 0.2
overdose_threshold = 133
/datum/reagent/porktonium/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/porktonium/overdose_process(mob/living/M, severity)
if(prob(15))
M.reagents.add_reagent("cholesterol", rand(1,3))
if(prob(8))
@@ -191,7 +177,7 @@ datum/reagent/mugwort/on_mob_life(var/mob/living/M as mob)
reagent_state = LIQUID
color = "#C87D28"
datum/reagent/fungus/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
/datum/reagent/fungus/reaction_mob(mob/M, method=TOUCH, volume)
if(!istype(M, /mob/living))
return
if(method == INGEST)
@@ -213,10 +199,9 @@ datum/reagent/fungus/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
color = "#B4B400"
metabolization_rate = 0.2
/datum/reagent/chicken_soup/on_mob_life(var/mob/living/M as mob)
/datum/reagent/chicken_soup/on_mob_life(mob/living/M)
M.nutrition += 2
..()
return
/datum/reagent/msg
name = "Monosodium glutamate"
@@ -226,14 +211,14 @@ datum/reagent/fungus/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
color = "#F5F5F5"
metabolization_rate = 0.2
datum/reagent/msg/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
/datum/reagent/msg/reaction_mob(mob/M, method=TOUCH, volume)
if(!istype(M, /mob/living))
return
if(method == INGEST)
to_chat(M, "<span class='notice'>That tasted amazing!</span>")
/datum/reagent/msg/on_mob_life(var/mob/living/M as mob)
/datum/reagent/msg/on_mob_life(mob/living/M)
if(prob(5))
if(prob(10))
M.adjustToxLoss(rand(2.4))
@@ -241,7 +226,6 @@ datum/reagent/msg/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
to_chat(M, "<span class='warning'>A horrible migraine overpowers you.</span>")
M.Stun(rand(2,5))
..()
return
/datum/reagent/cheese
name = "Cheese"
@@ -252,16 +236,15 @@ datum/reagent/msg/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
metabolization_rate = 0 //heheheh
/datum/reagent/cheese/on_mob_life(var/mob/living/M as mob)
/datum/reagent/cheese/on_mob_life(mob/living/M)
if(prob(3))
M.reagents.add_reagent("cholesterol", rand(1,2))
..()
datum/reagent/cheese/reaction_turf(var/turf/T, var/volume)
/datum/reagent/cheese/reaction_turf(turf/T, volume)
src = null
if(volume >= 5)
new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge(T)
return
/datum/chemical_reaction/cheese
name = "cheese"
@@ -271,7 +254,7 @@ datum/reagent/cheese/reaction_turf(var/turf/T, var/volume)
result_amount = 1
mix_message = "The mixture curdles up."
/datum/chemical_reaction/cheese/on_reaction(var/datum/reagents/holder)
/datum/chemical_reaction/cheese/on_reaction(datum/reagents/holder)
var/turf/T = get_turf(holder.my_atom)
T.visible_message("<span class='notice'>A faint cheesy smell drifts through the air...</span>")
@@ -283,7 +266,7 @@ datum/reagent/cheese/reaction_turf(var/turf/T, var/volume)
color = "#B2B139"
overdose_threshold = 50
/datum/reagent/fake_cheese/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/fake_cheese/overdose_process(mob/living/M, severity)
if(prob(8))
to_chat(M, "<span class='warning'>You feel something squirming in your stomach. Your thoughts turn to cheese and you begin to sweat.</span>")
M.adjustToxLoss(rand(1,2))
@@ -297,16 +280,15 @@ datum/reagent/cheese/reaction_turf(var/turf/T, var/volume)
metabolization_rate = 0 //heheheh
addiction_chance = 5
/datum/reagent/weird_cheese/on_mob_life(var/mob/living/M as mob)
/datum/reagent/weird_cheese/on_mob_life(mob/living/M)
if(prob(5))
M.reagents.add_reagent("cholesterol", rand(1,3))
..()
datum/reagent/weird_cheese/reaction_turf(var/turf/T, var/volume)
/datum/reagent/weird_cheese/reaction_turf(turf/T, volume)
src = null
if(volume >= 5)
new /obj/item/weapon/reagent_containers/food/snacks/weirdcheesewedge(T)
return
/datum/chemical_reaction/weird_cheese
name = "Weird cheese"
@@ -317,23 +299,21 @@ datum/reagent/weird_cheese/reaction_turf(var/turf/T, var/volume)
mix_message = "The disgusting mixture sloughs together horribly, emitting a foul stench."
mix_sound = 'sound/goonstation/misc/gurggle.ogg'
/datum/chemical_reaction/weird_cheese/on_reaction(var/datum/reagents/holder)
/datum/chemical_reaction/weird_cheese/on_reaction(datum/reagents/holder)
var/turf/T = get_turf(holder.my_atom)
T.visible_message("<span class='warning'>A horrible smell assaults your nose! What in space is it?</span>")
datum/reagent/beans
/datum/reagent/beans
name = "Refried beans"
id = "beans"
description = "A dish made of mashed beans cooked with lard."
reagent_state = LIQUID
color = "#684435"
datum/reagent/beans/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/beans/on_mob_life(mob/living/M)
if(prob(10))
M.emote("fart")
..()
return
/datum/reagent/bread
name = "Bread"
@@ -342,11 +322,10 @@ datum/reagent/beans/on_mob_life(var/mob/living/M as mob)
reagent_state = SOLID
color = "#9C5013"
datum/reagent/bread/reaction_turf(var/turf/T, var/volume)
/datum/reagent/bread/reaction_turf(turf/T, volume)
src = null
if(volume >= 5)
new /obj/item/weapon/reagent_containers/food/snacks/breadslice(T)
return
/datum/reagent/vomit
name = "Vomit"
@@ -355,12 +334,11 @@ datum/reagent/bread/reaction_turf(var/turf/T, var/volume)
reagent_state = LIQUID
color = "#FFFF00"
datum/reagent/vomit/reaction_turf(var/turf/T, var/volume)
/datum/reagent/vomit/reaction_turf(turf/T, volume)
src = null
if(volume >= 5)
new /obj/effect/decal/cleanable/vomit(T)
playsound(T, 'sound/effects/splat.ogg', 50, 1, -3)
return
/datum/reagent/greenvomit
name = "Green vomit"
@@ -369,12 +347,11 @@ datum/reagent/vomit/reaction_turf(var/turf/T, var/volume)
reagent_state = LIQUID
color = "#78FF74"
datum/reagent/greenvomit/reaction_turf(var/turf/T, var/volume)
/datum/reagent/greenvomit/reaction_turf(turf/T, volume)
src = null
if(volume >= 5)
new /obj/effect/decal/cleanable/vomit/green(T)
playsound(T, 'sound/effects/splat.ogg', 50, 1, -3)
return
/datum/reagent/ectoplasm
@@ -385,25 +362,23 @@ datum/reagent/greenvomit/reaction_turf(var/turf/T, var/volume)
color = "#8EAE7B"
process_flags = ORGANIC | SYNTHETIC //Because apparently ghosts in the shell
datum/reagent/ectoplasm/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
/datum/reagent/ectoplasm/reaction_mob(mob/M, method=TOUCH, volume)
if(!istype(M, /mob/living))
return
if(method == INGEST)
var/spooky_eat = pick("Ugh, why did you eat that? Your mouth feels haunted. Haunted with bad flavors.", "Ugh, why did you eat that? It has the texture of ham aspic. From the 1950s. Left out in the sun.", "Ugh, why did you eat that? It tastes like a ghost fart.", "Ugh, why did you eat that? It tastes like flavor died.")
to_chat(M, "<span class='warning'>[spooky_eat]</span>")
/datum/reagent/ectoplasm/on_mob_life(var/mob/living/M as mob)
/datum/reagent/ectoplasm/on_mob_life(mob/living/M)
var/spooky_message = pick("You notice something moving out of the corner of your eye, but nothing is there...", "Your eyes twitch, you feel like something you can't see is here...", "You've got the heebie-jeebies.", "You feel uneasy.", "You shudder as if cold...", "You feel something gliding across your back...")
if(prob(8))
to_chat(M, "<span class='warning'>[spooky_message]</span>")
..()
return
datum/reagent/ectoplasm/reaction_turf(var/turf/T, var/volume)
/datum/reagent/ectoplasm/reaction_turf(turf/T, volume)
src = null
if(volume >= 10)
new /obj/item/weapon/reagent_containers/food/snacks/ectoplasm(T)
return
/datum/reagent/soybeanoil
name = "Space-soybean oil"
@@ -412,13 +387,12 @@ datum/reagent/ectoplasm/reaction_turf(var/turf/T, var/volume)
reagent_state = LIQUID
color = "#B1B0B0"
/datum/reagent/soybeanoil/on_mob_life(var/mob/living/M as mob)
/datum/reagent/soybeanoil/on_mob_life(mob/living/M)
if(prob(10))
M.reagents.add_reagent("cholesterol", rand(1,3))
if(prob(8))
M.reagents.add_reagent("porktonium", 5)
..()
return
/datum/reagent/hydrogenated_soybeanoil
name = "Partially hydrogenated space-soybean oil"
@@ -429,7 +403,7 @@ datum/reagent/ectoplasm/reaction_turf(var/turf/T, var/volume)
metabolization_rate = 0.2
overdose_threshold = 75
/datum/reagent/hydrogenated_soybeanoil/on_mob_life(var/mob/living/M as mob)
/datum/reagent/hydrogenated_soybeanoil/on_mob_life(mob/living/M)
if(prob(15))
M.reagents.add_reagent("cholesterol", rand(1,3))
if(prob(8))
@@ -439,9 +413,8 @@ datum/reagent/ectoplasm/reaction_turf(var/turf/T, var/volume)
else
metabolization_rate = 0.2
..()
return
/datum/reagent/hydrogenated_soybeanoil/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/hydrogenated_soybeanoil/overdose_process(mob/living/M, severity)
if(prob(33))
to_chat(M, "<span class='warning'>You feel horribly weak.</span>")
if(prob(10))
@@ -469,12 +442,12 @@ datum/reagent/ectoplasm/reaction_turf(var/turf/T, var/volume)
reagent_state = LIQUID
color = "#EBD7D7"
/datum/reagent/meatslurry/on_mob_life(var/mob/living/M as mob)
/datum/reagent/meatslurry/on_mob_life(mob/living/M)
if(prob(4))
M.reagents.add_reagent("cholesterol", rand(1,3))
..()
/datum/reagent/meatslurry/reaction_turf(var/turf/T, var/volume)
/datum/reagent/meatslurry/reaction_turf(turf/T, volume)
src = null
if(volume >= 5 && prob(10))
new /obj/effect/decal/cleanable/blood/gibs/cleangibs(T)
@@ -519,7 +492,7 @@ datum/reagent/ectoplasm/reaction_turf(var/turf/T, var/volume)
reagent_state = SOLID
color = "#AC7E67"
/datum/reagent/beff/on_mob_life(var/mob/living/M as mob)
/datum/reagent/beff/on_mob_life(mob/living/M)
if(prob(5))
M.reagents.add_reagent("cholesterol", rand(1,3))
if(prob(8))
@@ -528,7 +501,6 @@ datum/reagent/ectoplasm/reaction_turf(var/turf/T, var/volume)
to_chat(M, "<span class='warning'>[pick("You feel ill.","Your stomach churns.","You feel queasy.","You feel sick.")]</span>")
M.emote(pick("groan","moan"))
..()
return
/datum/chemical_reaction/beff
name = "Beff"
@@ -546,7 +518,7 @@ datum/reagent/ectoplasm/reaction_turf(var/turf/T, var/volume)
reagent_state = SOLID
color = "#AC7E67"
datum/reagent/pepperoni/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
/datum/reagent/pepperoni/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == TOUCH)
if(ishuman(M))
var/mob/living/carbon/human/H = M
@@ -584,7 +556,7 @@ datum/reagent/pepperoni/reaction_mob(var/mob/living/M, var/method=TOUCH, var/vol
reagent_state = LIQUID
color = "#FFFAC8"
/datum/reagent/cholesterol/on_mob_life(var/mob/living/M as mob)
/datum/reagent/cholesterol/on_mob_life(mob/living/M)
if(volume >= 25 && prob(volume*0.15))
to_chat(M, "<span class='warning'>Your chest feels [pick("weird","uncomfortable","nasty","gross","odd","unusual","warm")]!</span>")
M.adjustToxLoss(rand(1,2))
+72 -125
View File
@@ -4,7 +4,7 @@
#define REM REAGENTS_EFFECT_MULTIPLIER
datum/reagent/silver_sulfadiazine
/datum/reagent/silver_sulfadiazine
name = "Silver Sulfadiazine"
id = "silver_sulfadiazine"
description = "This antibacterial compound is used to treat burn victims."
@@ -12,7 +12,7 @@ datum/reagent/silver_sulfadiazine
color = "#F0C814"
metabolization_rate = 3
datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume, var/show_message = 1)
/datum/reagent/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1)
if(iscarbon(M))
if(method == TOUCH)
M.adjustFireLoss(-volume)
@@ -23,15 +23,12 @@ datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/meth
if(show_message)
to_chat(M, "<span class='warning'>You feel sick...</span>")
..()
return
datum/reagent/silver_sulfadiazine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/silver_sulfadiazine/on_mob_life(mob/living/M)
M.adjustFireLoss(-2*REM)
..()
return
datum/reagent/styptic_powder
/datum/reagent/styptic_powder
name = "Styptic Powder"
id = "styptic_powder"
description = "Styptic (aluminium sulfate) powder helps control bleeding and heal physical wounds."
@@ -39,7 +36,7 @@ datum/reagent/styptic_powder
color = "#C8A5DC"
metabolization_rate = 3
datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume, var/show_message = 1)
/datum/reagent/styptic_powder/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1)
if(iscarbon(M))
if(method == TOUCH)
M.adjustBruteLoss(-volume)
@@ -51,13 +48,10 @@ datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TO
if(show_message)
to_chat(M, "<span class='warning'>You feel gross!</span>")
..()
return
datum/reagent/styptic_powder/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/styptic_powder/on_mob_life(mob/living/M)
M.adjustBruteLoss(-2*REM)
..()
return
/datum/reagent/salglu_solution
name = "Saline-Glucose Solution"
@@ -69,8 +63,6 @@ datum/reagent/styptic_powder/on_mob_life(var/mob/living/M as mob)
metabolization_rate = 0.15
/datum/reagent/salglu_solution/on_mob_life(mob/living/M)
if(!M)
M = holder.my_atom
if(prob(33))
M.adjustBruteLoss(-2*REM)
M.adjustFireLoss(-2*REM)
@@ -80,15 +72,14 @@ datum/reagent/styptic_powder/on_mob_life(var/mob/living/M as mob)
H.vessel.add_reagent("blood", 1)
..()
datum/reagent/synthflesh
/datum/reagent/synthflesh
name = "Synthflesh"
id = "synthflesh"
description = "A resorbable microfibrillar collagen and protein mixture that can rapidly heal injuries when applied topically."
reagent_state = LIQUID
color = "#FFEBEB"
datum/reagent/synthflesh/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume,var/show_message = 1)
if(!M) M = holder.my_atom
/datum/reagent/synthflesh/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1)
if(iscarbon(M))
if(method == TOUCH)
M.adjustBruteLoss(-1.5*volume)
@@ -96,31 +87,27 @@ datum/reagent/synthflesh/reaction_mob(var/mob/living/M, var/method=TOUCH, var/vo
if(show_message)
to_chat(M, "<span class='notice'>The synthetic flesh integrates itself into your wounds, healing you.</span>")
..()
return
datum/reagent/synthflesh/reaction_turf(var/turf/T, var/volume) //let's make a mess!
/datum/reagent/synthflesh/reaction_turf(turf/T, volume) //let's make a mess!
src = null
if(volume >= 5)
new /obj/effect/decal/cleanable/blood/gibs/cleangibs(T)
playsound(T, 'sound/effects/splat.ogg', 50, 1, -3)
return
datum/reagent/charcoal
/datum/reagent/charcoal
name = "Charcoal"
id = "charcoal"
description = "Activated charcoal helps to absorb toxins."
reagent_state = LIQUID
color = "#000000"
datum/reagent/charcoal/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/charcoal/on_mob_life(mob/living/M)
M.adjustToxLoss(-1.5*REM)
if(prob(50))
for(var/datum/reagent/R in M.reagents.reagent_list)
if(R != src)
M.reagents.remove_reagent(R.id,1)
..()
return
/datum/chemical_reaction/charcoal
name = "Charcoal"
@@ -165,7 +152,7 @@ datum/reagent/charcoal/on_mob_life(var/mob/living/M as mob)
result_amount = 4
mix_message = "The solution yields an astringent powder."
datum/reagent/omnizine
/datum/reagent/omnizine
name = "Omnizine"
id = "omnizine"
description = "Omnizine is a highly potent healing medication that can be used to treat a wide range of injuries."
@@ -175,8 +162,7 @@ datum/reagent/omnizine
overdose_threshold = 30
addiction_chance = 5
/datum/reagent/omnizine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/omnizine/on_mob_life(mob/living/M)
M.adjustToxLoss(-1*REM)
M.adjustOxyLoss(-1*REM)
M.adjustBruteLoss(-2*REM)
@@ -184,9 +170,8 @@ datum/reagent/omnizine
if(prob(50))
M.losebreath -= 1
..()
return
/datum/reagent/omnizine/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/omnizine/overdose_process(mob/living/M, severity)
var/effect = ..()
if(severity == 1) //lesser
M.stuttering += 1
@@ -220,7 +205,7 @@ datum/reagent/omnizine
M.Dizzy(5)
M.Weaken(3)
datum/reagent/calomel
/datum/reagent/calomel
name = "Calomel"
id = "calomel"
description = "This potent purgative rids the body of impurities. It is highly toxic however and close supervision is required."
@@ -228,8 +213,7 @@ datum/reagent/calomel
color = "#22AB35"
metabolization_rate = 0.8
datum/reagent/calomel/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/calomel/on_mob_life(mob/living/M)
for(var/datum/reagent/R in M.reagents.reagent_list)
if(R != src)
M.reagents.remove_reagent(R.id,5)
@@ -238,7 +222,6 @@ datum/reagent/calomel/on_mob_life(var/mob/living/M as mob)
if(prob(6))
M.fakevomit()
..()
return
/datum/chemical_reaction/calomel
name = "Calomel"
@@ -249,19 +232,17 @@ datum/reagent/calomel/on_mob_life(var/mob/living/M as mob)
min_temp = 374
mix_message = "Stinging vapors rise from the solution."
datum/reagent/potass_iodide
/datum/reagent/potass_iodide
name = "Potassium Iodide"
id = "potass_iodide"
description = "Potassium Iodide is a medicinal drug used to counter the effects of radiation poisoning."
reagent_state = LIQUID
color = "#B4DCBE"
datum/reagent/potass_iodide/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/potass_iodide/on_mob_life(mob/living/M)
if(prob(80))
M.radiation = max(0, M.radiation-1)
..()
return
/datum/chemical_reaction/potass_iodide
name = "Potassium Iodide"
@@ -271,15 +252,14 @@ datum/reagent/potass_iodide/on_mob_life(var/mob/living/M as mob)
result_amount = 2
mix_message = "The solution settles calmly and emits gentle fumes."
datum/reagent/pen_acid
/datum/reagent/pen_acid
name = "Pentetic Acid"
id = "pen_acid"
description = "Pentetic Acid is an aggressive chelation agent. May cause tissue damage. Use with caution."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/pen_acid/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/pen_acid/on_mob_life(mob/living/M)
for(var/datum/reagent/R in M.reagents.reagent_list)
if(R != src)
M.reagents.remove_reagent(R.id,4)
@@ -300,7 +280,7 @@ datum/reagent/pen_acid/on_mob_life(var/mob/living/M as mob)
result_amount = 6
mix_message = "The substance becomes very still, emitting a curious haze."
datum/reagent/sal_acid
/datum/reagent/sal_acid
name = "Salicylic Acid"
id = "sal_acid"
description = "This is a is a standard salicylate pain reliever and fever reducer."
@@ -310,8 +290,7 @@ datum/reagent/sal_acid
shock_reduction = 25
overdose_threshold = 25
datum/reagent/sal_acid/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/sal_acid/on_mob_life(mob/living/M)
if(prob(55))
M.adjustBruteLoss(-2*REM)
if(ishuman(M))
@@ -319,7 +298,6 @@ datum/reagent/sal_acid/on_mob_life(var/mob/living/M as mob)
if(H.traumatic_shock < 100)
H.shock_stage = 0
..()
return
/datum/chemical_reaction/sal_acid
name = "Salicyclic Acid"
@@ -330,7 +308,7 @@ datum/reagent/sal_acid/on_mob_life(var/mob/living/M as mob)
mix_message = "The mixture crystallizes."
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
datum/reagent/salbutamol
/datum/reagent/salbutamol
name = "Salbutamol"
id = "salbutamol"
description = "Salbutamol is a common bronchodilation medication for asthmatics. It may help with other breathing problems as well."
@@ -338,12 +316,10 @@ datum/reagent/salbutamol
color = "#00FFFF"
metabolization_rate = 0.2
datum/reagent/salbutamol/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/salbutamol/on_mob_life(mob/living/M)
M.adjustOxyLoss(-6*REM)
M.losebreath = max(0, M.losebreath-4)
..()
return
/datum/chemical_reaction/salbutamol
name = "Salbutamol"
@@ -354,7 +330,7 @@ datum/reagent/salbutamol/on_mob_life(var/mob/living/M as mob)
mix_message = "The solution bubbles freely, creating a head of bluish foam."
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
datum/reagent/perfluorodecalin
/datum/reagent/perfluorodecalin
name = "Perfluorodecalin"
id = "perfluorodecalin"
description = "This experimental perfluoronated solvent has applications in liquid breathing and tissue oxygenation. Use with caution."
@@ -363,8 +339,7 @@ datum/reagent/perfluorodecalin
metabolization_rate = 0.2
addiction_chance = 20
datum/reagent/perfluorodecalin/on_mob_life(var/mob/living/carbon/human/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/perfluorodecalin/on_mob_life(mob/living/carbon/human/M)
M.adjustOxyLoss(-25*REM)
if(volume >= 4)
M.losebreath = max(M.losebreath, 6)
@@ -373,7 +348,6 @@ datum/reagent/perfluorodecalin/on_mob_life(var/mob/living/carbon/human/M as mob)
M.adjustBruteLoss(-1*REM)
M.adjustFireLoss(-1*REM)
..()
return
/datum/chemical_reaction/perfluorodecalin
name = "Perfluorodecalin"
@@ -395,8 +369,7 @@ datum/reagent/perfluorodecalin/on_mob_life(var/mob/living/carbon/human/M as mob)
overdose_threshold = 35
addiction_chance = 25
/datum/reagent/ephedrine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/ephedrine/on_mob_life(mob/living/M)
M.drowsyness = max(0, M.drowsyness-5)
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
@@ -411,9 +384,8 @@ datum/reagent/perfluorodecalin/on_mob_life(var/mob/living/carbon/human/M as mob)
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
..()
return
/datum/reagent/ephedrine/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/ephedrine/overdose_process(mob/living/M, severity)
var/effect = ..()
if(severity == 1)
if(effect <= 1)
@@ -442,7 +414,7 @@ datum/reagent/perfluorodecalin/on_mob_life(var/mob/living/carbon/human/M as mob)
result_amount = 4
mix_message = "The solution fizzes and gives off toxic fumes."
datum/reagent/diphenhydramine
/datum/reagent/diphenhydramine
name = "Diphenhydramine"
id = "diphenhydramine"
description = "Anti-allergy medication. May cause drowsiness, do not operate heavy machinery while using this."
@@ -450,8 +422,7 @@ datum/reagent/diphenhydramine
color = "#5BCBE1"
addiction_chance = 10
datum/reagent/diphenhydramine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/diphenhydramine/on_mob_life(mob/living/M)
M.jitteriness = max(0, M.jitteriness-20)
M.reagents.remove_reagent("histamine",3)
M.reagents.remove_reagent("itching_powder",3)
@@ -462,7 +433,6 @@ datum/reagent/diphenhydramine/on_mob_life(var/mob/living/M as mob)
M.drowsyness += 1
M.visible_message("<span class='notice'>[M] looks a bit dazed.</span>")
..()
return
/datum/chemical_reaction/diphenhydramine
name = "Diphenhydramine"
@@ -473,7 +443,7 @@ datum/reagent/diphenhydramine/on_mob_life(var/mob/living/M as mob)
mix_message = "The mixture fizzes gently."
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
datum/reagent/morphine
/datum/reagent/morphine
name = "Morphine"
id = "morphine"
description = "A strong but highly addictive opiate painkiller with sedative side effects."
@@ -483,8 +453,7 @@ datum/reagent/morphine
addiction_chance = 50
shock_reduction = 50
datum/reagent/morphine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/morphine/on_mob_life(mob/living/M)
M.jitteriness = max(0, M.jitteriness-25)
switch(current_cycle)
if(1 to 15)
@@ -500,10 +469,8 @@ datum/reagent/morphine/on_mob_life(var/mob/living/M as mob)
if(H.traumatic_shock < 100)
H.shock_stage = 0
..()
return
datum/reagent/oculine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/oculine/on_mob_life(mob/living/M)
if(prob(80))
if(ishuman(M))
var/mob/living/carbon/human/H = M
@@ -521,7 +488,6 @@ datum/reagent/oculine/on_mob_life(var/mob/living/M as mob)
if(prob(30))
M.ear_deaf = 0
..()
return
/datum/chemical_reaction/oculine
name = "Oculine"
@@ -531,7 +497,7 @@ datum/reagent/oculine/on_mob_life(var/mob/living/M as mob)
result_amount = 3
mix_message = "The mixture settles, becoming a milky white."
datum/reagent/oculine
/datum/reagent/oculine
name = "Oculine"
id = "oculine"
description = "Oculine is a saline eye medication with mydriatic and antibiotic effects."
@@ -540,7 +506,7 @@ datum/reagent/oculine
metabolization_rate = 0.4
var/cycle_amount = 0
datum/reagent/atropine
/datum/reagent/atropine
name = "Atropine"
id = "atropine"
description = "Atropine is a potent cardiac resuscitant but it can causes confusion, dizzyness and hyperthermia."
@@ -549,8 +515,7 @@ datum/reagent/atropine
metabolization_rate = 0.2
overdose_threshold = 25
datum/reagent/atropine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/atropine/on_mob_life(mob/living/M)
M.dizziness += 1
M.confused = max(M.confused, 5)
if(prob(4))
@@ -567,7 +532,6 @@ datum/reagent/atropine/on_mob_life(var/mob/living/M as mob)
M.adjustToxLoss(1)
M.reagents.remove_reagent("sarin", 20)
..()
return
/datum/chemical_reaction/atropine
name = "Atropine"
@@ -577,7 +541,7 @@ datum/reagent/atropine/on_mob_life(var/mob/living/M as mob)
result_amount = 5
mix_message = "A horrid smell like something died drifts from the mixture."
datum/reagent/epinephrine
/datum/reagent/epinephrine
name = "Epinephrine"
id = "epinephrine"
description = "Epinephrine is a potent neurotransmitter, used in medical emergencies to halt anaphylactic shock and prevent cardiac arrest."
@@ -586,8 +550,7 @@ datum/reagent/epinephrine
metabolization_rate = 0.2
overdose_threshold = 20
datum/reagent/epinephrine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/epinephrine/on_mob_life(mob/living/M)
M.drowsyness = max(0, M.drowsyness-5)
if(prob(20))
M.AdjustParalysis(-1)
@@ -609,9 +572,8 @@ datum/reagent/epinephrine/on_mob_life(var/mob/living/M as mob)
M.adjustBruteLoss(-1*REM)
M.adjustFireLoss(-1*REM)
..()
return
/datum/reagent/epinephrine/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/epinephrine/overdose_process(mob/living/M, severity)
var/effect = ..()
if(severity == 1)
if(effect <= 1)
@@ -641,7 +603,7 @@ datum/reagent/epinephrine/on_mob_life(var/mob/living/M as mob)
mix_message = "Tiny white crystals precipitate out of the solution."
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
datum/reagent/strange_reagent
/datum/reagent/strange_reagent
name = "Strange Reagent"
id = "strange_reagent"
description = "A glowing green fluid highly reminiscent of nuclear waste."
@@ -649,7 +611,7 @@ datum/reagent/strange_reagent
color = "#A0E85E"
metabolization_rate = 0.2
datum/reagent/strange_reagent/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
/datum/reagent/strange_reagent/reaction_mob(mob/living/M, method=TOUCH, volume)
if(isanimal(M))
if(method == TOUCH)
var/mob/living/simple_animal/SM = M
@@ -680,15 +642,12 @@ datum/reagent/strange_reagent/reaction_mob(var/mob/living/M as mob, var/method=T
M.stat = UNCONSCIOUS
add_logs(M, M, "revived", object="strange reagent")
..()
return
datum/reagent/strange_reagent/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/strange_reagent/on_mob_life(mob/living/M)
if(prob(10))
M.adjustBruteLoss(2*REM)
M.adjustToxLoss(2*REM)
..()
return
/datum/chemical_reaction/strange_reagent
name = "Strange Reagent"
@@ -698,7 +657,7 @@ datum/reagent/strange_reagent/on_mob_life(var/mob/living/M as mob)
result_amount = 3
mix_message = "The substance begins moving on its own somehow."
datum/reagent/life
/datum/reagent/life
name = "Life"
id = "life"
description = "Can create a life form, however it is not guaranteed to be friendly. May want to have Security on hot standby."
@@ -714,13 +673,12 @@ datum/reagent/life
result_amount = 3
min_temp = 374
/datum/chemical_reaction/life/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/life/on_reaction(datum/reagents/holder, created_volume)
chemical_mob_spawn(holder, 1, "Life")
/datum/reagent/mannitol/on_mob_life(mob/living/M as mob)
/datum/reagent/mannitol/on_mob_life(mob/living/M)
M.adjustBrainLoss(-3)
..()
return
/datum/chemical_reaction/mannitol
name = "Mannitol"
@@ -736,7 +694,7 @@ datum/reagent/life
description = "Mannitol is a sugar alcohol that can help alleviate cranial swelling."
color = "#D1D1F1"
/datum/reagent/mutadone/on_mob_life(var/mob/living/carbon/human/M as mob)
/datum/reagent/mutadone/on_mob_life(mob/living/carbon/human/M)
M.jitteriness = 0
var/needs_update = M.mutations.len > 0 || M.disabilities > 0 || M.sdisabilities > 0
@@ -753,7 +711,6 @@ datum/reagent/life
var/mob/living/carbon/human/H = M
H.update_mutations()
..()
return
/datum/chemical_reaction/mutadone
name = "Mutadone"
@@ -770,13 +727,13 @@ datum/reagent/life
description = "Mutadone is an experimental bromide that can cure genetic abnomalities."
color = "#5096C8"
datum/reagent/antihol
/datum/reagent/antihol
name = "Antihol"
id = "antihol"
description = "A medicine which quickly eliminates alcohol in the body."
color = "#009CA8"
datum/reagent/antihol/on_mob_life(var/mob/living/M as mob)
/datum/reagent/antihol/on_mob_life(mob/living/M)
M.slurring = 0
M.AdjustDrunk(-4)
M.reagents.remove_all_type(/datum/reagent/ethanol, 8, 0, 1)
@@ -800,8 +757,7 @@ datum/reagent/antihol/on_mob_life(var/mob/living/M as mob)
color = "#C8A5DC"
metabolization_rate = 0.4
datum/reagent/stimulants/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/stimulants/on_mob_life(mob/living/M)
if(volume > 5)
M.adjustOxyLoss(-5*REM)
M.adjustToxLoss(-5*REM)
@@ -823,11 +779,9 @@ datum/reagent/stimulants/on_mob_life(var/mob/living/M as mob)
M.Stun(3)
..()
datum/reagent/stimulants/reagent_deleted(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/stimulants/reagent_deleted(mob/living/M)
M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE
..()
return
/datum/reagent/medicine/stimulative_agent
name = "Stimulative Agent"
@@ -850,24 +804,26 @@ datum/reagent/stimulants/reagent_deleted(var/mob/living/M as mob)
M.adjustStaminaLoss(-5*REM)
..()
/datum/reagent/medicine/stimulative_agent/reagent_deleted(mob/living/M)
M.status_flags &= ~GOTTAGOFAST
..()
/datum/reagent/medicine/stimulative_agent/overdose_process(mob/living/M, severity)
if(prob(33))
M.adjustStaminaLoss(2.5*REM)
M.adjustToxLoss(1*REM)
M.losebreath++
datum/reagent/insulin
/datum/reagent/insulin
name = "Insulin"
id = "insulin"
description = "A hormone generated by the pancreas responsible for metabolizing carbohydrates and fat in the bloodstream."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/insulin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/insulin/on_mob_life(mob/living/M)
M.reagents.remove_reagent("sugar", 5)
..()
return
/datum/reagent/simethicone
@@ -884,7 +840,7 @@ datum/reagent/insulin/on_mob_life(var/mob/living/M as mob)
result_amount = 4
datum/reagent/teporone
/datum/reagent/teporone
name = "Teporone"
id = "teporone"
description = "This experimental plasma-based compound seems to regulate body temperature."
@@ -893,14 +849,12 @@ datum/reagent/teporone
addiction_chance = 20
overdose_threshold = 50
datum/reagent/teporone/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/teporone/on_mob_life(mob/living/M)
if(M.bodytemperature > 310)
M.bodytemperature -= 10
if(M.bodytemperature < 310)
M.bodytemperature += 10
M.bodytemperature = max(310, M.bodytemperature - (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
else if(M.bodytemperature < 311)
M.bodytemperature = min(310, M.bodytemperature + (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
..()
return
/datum/chemical_reaction/teporone
name = "Teporone"
@@ -911,15 +865,14 @@ datum/reagent/teporone/on_mob_life(var/mob/living/M as mob)
mix_message = "The mixture turns an odd lavender color."
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
datum/reagent/haloperidol
/datum/reagent/haloperidol
name = "Haloperidol"
id = "haloperidol"
description = "Haloperidol is a powerful antipsychotic and sedative. Will help control psychiatric problems, but may cause brain damage."
reagent_state = LIQUID
color = "#FFDCFF"
datum/reagent/haloperidol/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/haloperidol/on_mob_life(mob/living/M)
M.reagents.remove_reagent("crank", 5)
M.reagents.remove_reagent("methamphetamine", 5)
M.reagents.remove_reagent("space_drugs", 5)
@@ -940,7 +893,6 @@ datum/reagent/haloperidol/on_mob_life(var/mob/living/M as mob)
if(prob(20))
M.adjustBrainLoss(1)
..()
return
/datum/chemical_reaction/haloperidol
name = "Haloperidol"
@@ -958,8 +910,7 @@ datum/reagent/haloperidol/on_mob_life(var/mob/living/M as mob)
reagent_state = LIQUID
color = "#96DEDE"
/datum/reagent/ether/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/ether/on_mob_life(mob/living/M)
M.jitteriness = max(M.jitteriness-25,0)
switch(current_cycle)
if(1 to 15)
@@ -971,7 +922,6 @@ datum/reagent/haloperidol/on_mob_life(var/mob/living/M as mob)
M.Paralyse(15)
M.drowsyness = max(M.drowsyness, 20)
..()
return
/datum/chemical_reaction/ether
name = "Ether"
@@ -1001,15 +951,15 @@ datum/reagent/haloperidol/on_mob_life(var/mob/living/M as mob)
required_reagents = list("oil" = 1, "sterilizine" = 1)
result_amount = 2
/datum/reagent/degreaser/reaction_turf(var/turf/simulated/T, var/volume)
if(!istype(T)) return
/datum/reagent/degreaser/reaction_turf(turf/simulated/T, volume)
if(!istype(T))
return
src = null
if(volume >= 1)
if(istype(T) && T.wet)
T.MakeDry(TURF_WET_LUBE)
/datum/reagent/degreaser/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/degreaser/on_mob_life(mob/living/M)
if(prob(50)) //Same effects as coffee, to help purge ill effects like paralysis
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
@@ -1023,7 +973,6 @@ datum/reagent/haloperidol/on_mob_life(var/mob/living/M as mob)
else
M.reagents.remove_reagent(R.id,1)
..()
return
//Liquid Solder: Mannitol
/datum/reagent/liquid_solder
@@ -1034,10 +983,9 @@ datum/reagent/haloperidol/on_mob_life(var/mob/living/M as mob)
color = "#D7B395"
process_flags = SYNTHETIC
/datum/reagent/liquid_solder/on_mob_life(mob/living/M as mob)
/datum/reagent/liquid_solder/on_mob_life(mob/living/M)
M.adjustBrainLoss(-3)
..()
return
/datum/chemical_reaction/liquid_solder
name = "Liquid Solder"
@@ -1049,19 +997,18 @@ datum/reagent/haloperidol/on_mob_life(var/mob/living/M as mob)
mix_message = "The solution gently swirls with a metallic sheen."
datum/reagent/medicine/syndicate_nanites //Used exclusively by Syndicate medical cyborgs
/datum/reagent/medicine/syndicate_nanites //Used exclusively by Syndicate medical cyborgs
name = "Restorative Nanites"
id = "syndicate_nanites"
description = "Miniature medical robots that swiftly restore bodily damage. May begin to attack their host's cells in high amounts."
reagent_state = SOLID
color = "#555555"
datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/M)
/datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/M)
M.adjustBruteLoss(-5*REM) //A ton of healing - this is a 50 telecrystal investment.
M.adjustFireLoss(-5*REM)
M.adjustOxyLoss(-15*REM)
M.adjustToxLoss(-5*REM)
M.adjustBrainLoss(-15*REM)
M.adjustCloneLoss(-3*REM)
..()
return
..()
+14 -26
View File
@@ -12,16 +12,18 @@
var/chem_temp = 300
var/list/datum/reagent/addiction_list = new/list()
/datum/reagents/proc/metabolize(var/mob/M)
/datum/reagents/proc/metabolize(mob/living/M)
if(M)
if(!istype(M, /mob/living)) //Non-living mobs can't metabolize reagents, so don't bother trying (runtime safety check)
return
chem_temp = M.bodytemperature
handle_reactions()
for(var/A in reagent_list)
var/datum/reagent/R = A
if(!istype(R))
continue
if(!R.holder)
continue
if(!M)
M = R.holder.my_atom
if(ishuman(M))
var/mob/living/carbon/human/H = M
//Check if this mob's species is set and can process this type of reagent
@@ -95,42 +97,28 @@
R.on_tick()
return
/datum/reagents/proc/check_gofast(var/mob/M)
if(istype(M, /mob))
if(M.reagents.has_reagent("unholywater")||M.reagents.has_reagent("nuka_cola")||M.reagents.has_reagent("stimulative_agent"))
return 1
else
M.status_flags &= ~GOTTAGOFAST
/datum/reagents/proc/check_goreallyfast(var/mob/M)
if(istype(M, /mob))
if(M.reagents.has_reagent("methamphetamine"))
return 1
else
M.status_flags &= ~GOTTAGOREALLYFAST
// Called every time reagent containers process.
/datum/reagent/proc/on_tick(var/data)
/datum/reagent/proc/on_tick(data)
return
// Called when the reagent container is hit by an explosion
/datum/reagent/proc/on_ex_act(var/severity)
/datum/reagent/proc/on_ex_act(severity)
return
// Called if the reagent has passed the overdose threshold and is set to be triggering overdose effects
/datum/reagent/proc/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/proc/overdose_process(mob/living/M, severity)
var/effect = rand(1, 100) - severity
if(effect <= 8)
M.adjustToxLoss(severity)
return effect
/datum/reagent/proc/overdose_start(var/mob/living/M as mob)
/datum/reagent/proc/overdose_start(mob/living/M)
return
/datum/reagent/proc/addiction_act_stage1(var/mob/living/M as mob)
/datum/reagent/proc/addiction_act_stage1(mob/living/M)
return
/datum/reagent/proc/addiction_act_stage2(var/mob/living/M as mob)
/datum/reagent/proc/addiction_act_stage2(mob/living/M)
if(prob(8))
M.emote("shiver")
if(prob(8))
@@ -138,7 +126,7 @@
if(prob(4))
to_chat(M, "<span class='notice'>You feel a dull headache.</span>")
/datum/reagent/proc/addiction_act_stage3(var/mob/living/M as mob)
/datum/reagent/proc/addiction_act_stage3(mob/living/M)
if(prob(8))
M.emote("twitch_s")
if(prob(8))
@@ -146,7 +134,7 @@
if(prob(4))
to_chat(M, "<span class='warning'>You begin craving [name]!</span>")
/datum/reagent/proc/addiction_act_stage4(var/mob/living/M as mob)
/datum/reagent/proc/addiction_act_stage4(mob/living/M)
if(prob(8))
M.emote("twitch")
if(prob(4))
@@ -154,7 +142,7 @@
if(prob(4))
to_chat(M, "<span class='warning'>You REALLY crave some [name]!</span>")
/datum/reagent/proc/addiction_act_stage5(var/mob/living/M as mob)
/datum/reagent/proc/addiction_act_stage5(mob/living/M)
if(prob(8))
M.emote("twitch")
if(prob(6))
+32 -54
View File
@@ -5,67 +5,64 @@
var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700")
datum/reagent/oil
/datum/reagent/oil
name = "Oil"
id = "oil"
description = "A decent lubricant for machines. High in benzene, naptha and other hydrocarbons."
reagent_state = LIQUID
color = "#3C3C3C"
datum/reagent/iodine
/datum/reagent/iodine
name = "Iodine"
id = "iodine"
description = "A purple gaseous element."
reagent_state = GAS
color = "#493062"
datum/reagent/carpet
/datum/reagent/carpet
name = "Carpet"
id = "carpet"
description = "A covering of thick fabric used on floors. This type looks particularly gross."
reagent_state = LIQUID
color = "#701345"
/datum/reagent/carpet/reaction_turf(var/turf/simulated/T, var/volume)
/datum/reagent/carpet/reaction_turf(turf/simulated/T, volume)
if(istype(T, /turf/simulated/floor/plating) || istype(T, /turf/simulated/floor/plasteel))
var/turf/simulated/floor/F = T
F.ChangeTurf(/turf/simulated/floor/carpet)
..()
return
datum/reagent/bromine
/datum/reagent/bromine
name = "Bromine"
id = "bromine"
description = "A red-brown liquid element."
reagent_state = LIQUID
color = "#4E3A3A"
datum/reagent/phenol
/datum/reagent/phenol
name = "Phenol"
id = "phenol"
description = "Also known as carbolic acid, this is a useful building block in organic chemistry."
reagent_state = LIQUID
color = "#525050"
datum/reagent/ash
/datum/reagent/ash
name = "Ash"
id = "ash"
description = "Ashes to ashes, dust to dust."
reagent_state = LIQUID
color = "#191919"
datum/reagent/acetone
/datum/reagent/acetone
name = "Acetone"
id = "acetone"
description = "Pure 100% nail polish remover, also works as an industrial solvent."
reagent_state = LIQUID
color = "#474747"
/datum/reagent/acetone/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/acetone/on_mob_life(mob/living/M)
M.adjustToxLoss(1.5)
..()
return
/datum/chemical_reaction/acetone
name = "acetone"
@@ -111,7 +108,7 @@ datum/reagent/acetone
mix_sound = null
no_message = 1
datum/reagent/colorful_reagent
/datum/reagent/colorful_reagent
name = "Colorful Reagent"
id = "colorful_reagent"
description = "It's pure liquid colors. That's a thing now."
@@ -126,22 +123,20 @@ datum/reagent/colorful_reagent
result_amount = 6
mix_message = "The substance flashes multiple colors and emits the smell of a pocket protector."
datum/reagent/colorful_reagent/reaction_mob(var/mob/living/simple_animal/M, var/method=TOUCH, var/volume)
/datum/reagent/colorful_reagent/reaction_mob(mob/living/simple_animal/M, method=TOUCH, volume)
if(M && istype(M))
M.color = pick(random_color_list)
..()
return
datum/reagent/colorful_reagent/reaction_obj(var/obj/O, var/volume)
/datum/reagent/colorful_reagent/reaction_obj(obj/O, volume)
if(O)
O.color = pick(random_color_list)
..()
return
datum/reagent/colorful_reagent/reaction_turf(var/turf/T, var/volume)
/datum/reagent/colorful_reagent/reaction_turf(turf/T, volume)
if(T)
T.color = pick(random_color_list)
..()
return
/datum/chemical_reaction/corgium
name = "corgium"
@@ -151,19 +146,17 @@ datum/reagent/colorful_reagent/reaction_turf(var/turf/T, var/volume)
result_amount = 3
min_temp = 374
datum/reagent/corgium
/datum/reagent/corgium
name = "Corgium"
id = "corgium"
description = "Corgi in liquid form. Don't ask."
reagent_state = LIQUID
color = "#F9A635"
/datum/chemical_reaction/corgium/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/corgium/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
new /mob/living/simple_animal/pet/corgi(location)
..()
return
/datum/chemical_reaction/flaptonium
name = "Flaptonium"
@@ -174,14 +167,12 @@ datum/reagent/corgium
min_temp = 374
mix_message = "The substance turns an airy sky-blue and foams up into a new shape."
/datum/chemical_reaction/flaptonium/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/flaptonium/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
new /mob/living/simple_animal/parrot(location)
..()
return
datum/reagent/hair_dye
/datum/reagent/hair_dye
name = "Quantum Hair Dye"
id = "hair_dye"
description = "A rather tubular and gnarly way of coloring totally bodacious hair. Duuuudddeee."
@@ -195,7 +186,7 @@ datum/reagent/hair_dye
required_reagents = list("colorful_reagent" = 1, "hairgrownium" = 1)
result_amount = 2
datum/reagent/hair_dye/reaction_mob(var/mob/living/M, var/volume)
/datum/reagent/hair_dye/reaction_mob(mob/living/M, volume)
if(M && ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
@@ -208,9 +199,8 @@ datum/reagent/hair_dye/reaction_mob(var/mob/living/M, var/volume)
H.update_hair()
H.update_fhair()
..()
return
datum/reagent/hairgrownium
/datum/reagent/hairgrownium
name = "Hairgrownium"
id = "hairgrownium"
description = "A mysterious chemical purported to help grow hair. Often found on late-night TV infomercials."
@@ -226,7 +216,7 @@ datum/reagent/hairgrownium
result_amount = 3
mix_message = "The liquid becomes slightly hairy."
datum/reagent/hairgrownium/reaction_mob(var/mob/living/M, var/volume)
/datum/reagent/hairgrownium/reaction_mob(mob/living/M, volume)
if(M && ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
@@ -235,9 +225,8 @@ datum/reagent/hairgrownium/reaction_mob(var/mob/living/M, var/volume)
H.update_hair()
H.update_fhair()
..()
return
datum/reagent/super_hairgrownium
/datum/reagent/super_hairgrownium
name = "Super Hairgrownium"
id = "super_hairgrownium"
description = "A mysterious and powerful chemical purported to cause rapid hair growth."
@@ -254,7 +243,7 @@ datum/reagent/super_hairgrownium
result_amount = 3
mix_message = "The liquid becomes amazingly furry and smells peculiar."
datum/reagent/super_hairgrownium/reaction_mob(var/mob/living/M, var/volume)
/datum/reagent/super_hairgrownium/reaction_mob(mob/living/M, volume)
if(M && ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
@@ -278,9 +267,8 @@ datum/reagent/super_hairgrownium/reaction_mob(var/mob/living/M, var/volume)
H.equip_to_slot(fakemoustache, slot_wear_mask)
to_chat(H, "<span class='notice'>Hair bursts forth from your every follicle!")
..()
return
datum/reagent/fartonium
/datum/reagent/fartonium
name = "Fartonium"
id = "fartonium"
description = "Oh god it never ends, IT NEVER STOPS!"
@@ -295,9 +283,7 @@ datum/reagent/fartonium
result_amount = 2
mix_message = "The substance makes a little 'toot' noise and starts to smell pretty bad."
datum/reagent/fartonium/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/fartonium/on_mob_life(mob/living/M)
if(prob(66))
M.emote("fart")
@@ -312,8 +298,6 @@ datum/reagent/fartonium/on_mob_life(var/mob/living/M as mob)
M.emote("scream")
M.adjustBruteLoss(4)
..()
return
/datum/chemical_reaction/soapification
name = "Soapification"
@@ -327,7 +311,6 @@ datum/reagent/fartonium/on_mob_life(var/mob/living/M as mob)
/datum/chemical_reaction/soapification/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
new /obj/item/weapon/soap/homemade(location)
return
/datum/chemical_reaction/candlefication
name = "Candlefication"
@@ -340,8 +323,6 @@ datum/reagent/fartonium/on_mob_life(var/mob/living/M as mob)
/datum/chemical_reaction/candlefication/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
new /obj/item/candle(location)
return
/datum/chemical_reaction/meatification
name = "Meatification"
@@ -353,7 +334,6 @@ datum/reagent/fartonium/on_mob_life(var/mob/living/M as mob)
/datum/chemical_reaction/meatification/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/meatproduct(location)
return
/datum/chemical_reaction/lye
name = "lye"
@@ -376,12 +356,10 @@ datum/reagent/fartonium/on_mob_life(var/mob/living/M as mob)
reagent_state = LIQUID
color = "#FF83A5"
/datum/reagent/love/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
/datum/reagent/love/reaction_mob(mob/living/M, method=TOUCH, volume)
to_chat(M, "<span class='notice'>You feel loved!</span>")
/datum/reagent/love/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/love/on_mob_life(mob/living/M)
if(M.a_intent == I_HARM)
M.a_intent = I_HELP
@@ -410,35 +388,35 @@ datum/reagent/fartonium/on_mob_life(var/mob/living/M as mob)
///Alchemical Reagents
datum/reagent/eyenewt
/datum/reagent/eyenewt
name = "Eye of newt"
id = "eyenewt"
description = "A potent alchemic ingredient."
reagent_state = LIQUID
color = "#050519"
datum/reagent/toefrog
/datum/reagent/toefrog
name = "Toe of frog"
id = "toefrog"
description = "A potent alchemic ingredient."
reagent_state = LIQUID
color = "#092D09"
datum/reagent/woolbat
/datum/reagent/woolbat
name = "Wool of bat"
id = "woolbat"
description = "A potent alchemic ingredient."
reagent_state = LIQUID
color = "#080808"
datum/reagent/tonguedog
/datum/reagent/tonguedog
name = "Tongue of dog"
id = "tonguedog"
description = "A potent alchemic ingredient."
reagent_state = LIQUID
color = "#2D0909"
datum/reagent/triplepiss
/datum/reagent/triplepiss
name = "Triplepiss"
id = "triplepiss"
description = "Ewwwwwwwww."
+40 -65
View File
@@ -36,20 +36,17 @@
result_amount = 2
min_temp = 424
/datum/reagent/clf3/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/clf3/on_mob_life(mob/living/M)
M.adjust_fire_stacks(4)
M.adjustFireLoss(0.35*M.fire_stacks)
..()
return
/datum/chemical_reaction/clf3/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/clf3/on_reaction(datum/reagents/holder, created_volume)
var/turf/T = get_turf(holder.my_atom)
for(var/turf/turf in range(1,T))
new /obj/effect/hotspot(turf)
return
/datum/reagent/clf3/reaction_turf(var/turf/simulated/T, var/volume)
/datum/reagent/clf3/reaction_turf(turf/simulated/T, volume)
if(istype(T, /turf/simulated/floor/plating))
var/turf/simulated/floor/plating/F = T
if(prob(1))
@@ -66,14 +63,12 @@
W.ChangeTurf(/turf/simulated/floor)
if(istype(T, /turf/simulated/shuttle/))
new /obj/effect/hotspot(T)
return
/datum/reagent/clf3/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
/datum/reagent/clf3/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == TOUCH && isliving(M))
M.adjust_fire_stacks(5)
M.IgniteMob()
M.bodytemperature += 30
return
/datum/reagent/sorium
name = "Sorium"
@@ -96,11 +91,11 @@
required_reagents = list("sorium" = 1)
min_temp = 474
/datum/chemical_reaction/sorium_vortex/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/sorium_vortex/on_reaction(datum/reagents/holder, created_volume)
var/turf/simulated/T = get_turf(holder.my_atom)
goonchem_vortex(T, 1, 5, 6)
/datum/chemical_reaction/sorium/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/sorium/on_reaction(datum/reagents/holder, created_volume)
if(holder.has_reagent("stabilizing_agent"))
return
holder.remove_reagent("sorium", created_volume)
@@ -128,19 +123,18 @@
required_reagents = list("liquid_dark_matter" = 1)
min_temp = 474
/datum/chemical_reaction/ldm_vortex/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/ldm_vortex/on_reaction(datum/reagents/holder, created_volume)
var/turf/simulated/T = get_turf(holder.my_atom)
goonchem_vortex(T, 0, 5, 6)
return
/datum/chemical_reaction/liquid_dark_matter/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/liquid_dark_matter/on_reaction(datum/reagents/holder, created_volume)
if(holder.has_reagent("stabilizing_agent"))
return
holder.remove_reagent("liquid_dark_matter", created_volume)
var/turf/simulated/T = get_turf(holder.my_atom)
goonchem_vortex(T, 0, 5, 6)
return
/proc/goonchem_vortex(var/turf/simulated/T, var/setting_type, var/range, var/pull_times)
/proc/goonchem_vortex(turf/simulated/T, setting_type, range, pull_times)
for(var/atom/movable/X in orange(range, T))
if(istype(X, /obj/effect))
continue //stop pulling smoke and hotspots please
@@ -182,21 +176,19 @@
no_message = 1
mix_sound = null
datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
/datum/reagent/blackpowder/reaction_turf(turf/T, volume) //oh shit
src = null
if(volume >= 5)
if(!locate(/obj/effect/decal/cleanable/dirt/blackpowder) in get_turf(T)) //let's not have hundreds of decals of black powder on the same turf
new /obj/effect/decal/cleanable/dirt/blackpowder(T)
return
/datum/chemical_reaction/blackpowder_explosion/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/blackpowder_explosion/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
s.set_up(2, 1, location)
s.start()
sleep(rand(20,30))
blackpowder_detonate(holder, created_volume)
return
/*
/datum/reagent/blackpowder/on_ex_act()
@@ -209,7 +201,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
holder.remove_reagent("blackpowder", volume)
return */
/proc/blackpowder_detonate(var/datum/reagents/holder, var/created_volume)
/proc/blackpowder_detonate(datum/reagents/holder, created_volume)
var/turf/simulated/T = get_turf(holder.my_atom)
var/ex_severe = round(created_volume / 100)
var/ex_heavy = round(created_volume / 42)
@@ -220,7 +212,6 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
if(istype(holder.my_atom, /obj/effect/decal/cleanable/dirt/blackpowder))
spawn(0)
qdel(holder.my_atom)
return
/datum/reagent/flash_powder
name = "Flash Powder"
@@ -243,7 +234,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
required_reagents = list("flash_powder" = 1)
min_temp = 374
/datum/chemical_reaction/flash_powder_flash/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/flash_powder_flash/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
s.set_up(2, 1, location)
@@ -256,7 +247,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
C.Stun(5)
/datum/chemical_reaction/flash_powder/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/flash_powder/on_reaction(datum/reagents/holder, created_volume)
if(holder.has_reagent("stabilizing_agent"))
return
var/location = get_turf(holder.my_atom)
@@ -295,7 +286,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
mix_message = "The mixture quickly turns into a pall of smoke!"
var/forbidden_reagents = list("sugar", "phosphorus", "potassium", "stimulants") //Do not transfer this stuff through smoke.
/datum/chemical_reaction/smoke/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/smoke/on_reaction(datum/reagents/holder, created_volume)
for(var/f_reagent in forbidden_reagents)
if(holder.has_reagent(f_reagent))
holder.remove_reagent(f_reagent, holder.get_reagent_amount(f_reagent))
@@ -316,7 +307,6 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
S.start(4)
if(holder && holder.my_atom)
holder.clear_reagents()
return
/datum/chemical_reaction/smoke/smoke_powder
name = "smoke_powder_smoke"
@@ -350,7 +340,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
required_reagents = list("sonic_powder" = 1)
min_temp = 374
/datum/chemical_reaction/sonic_powder_deafen/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/sonic_powder_deafen/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
playsound(location, 'sound/effects/bang.ogg', 25, 1)
for(var/mob/living/M in hearers(5, location))
@@ -377,7 +367,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
if(M.ear_damage >= 5)
to_chat(M, "<span class='warning'>Your ears start to ring!</span>")
/datum/chemical_reaction/sonic_powder/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/sonic_powder/on_reaction(datum/reagents/holder, created_volume)
if(holder.has_reagent("stabilizing_agent"))
return
var/location = get_turf(holder.my_atom)
@@ -422,21 +412,18 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
required_reagents = list("phosphorus" = 1, "sacid" = 1, "plasma" = 1)
result_amount = 3
/datum/chemical_reaction/phlogiston/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/phlogiston/on_reaction(datum/reagents/holder, created_volume)
if(holder.has_reagent("stabilizing_agent"))
return
var/turf/simulated/T = get_turf(holder.my_atom)
for(var/turf/simulated/turf in range(min(created_volume/10,4),T))
new /obj/effect/hotspot(turf)
return
/datum/reagent/phlogiston/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/phlogiston/on_mob_life(mob/living/M)
M.adjust_fire_stacks(1)
M.IgniteMob()
M.adjustFireLoss(0.2*M.fire_stacks)
..()
return
/datum/reagent/napalm
name = "Napalm"
@@ -446,16 +433,13 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
color = "#FF9999"
process_flags = ORGANIC | SYNTHETIC
/datum/reagent/napalm/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/napalm/on_mob_life(mob/living/M)
M.adjust_fire_stacks(1)
..()
return
/datum/reagent/napalm/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
/datum/reagent/napalm/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == TOUCH && isliving(M))
M.adjust_fire_stacks(7)
return
/datum/chemical_reaction/napalm
name = "Napalm"
@@ -464,7 +448,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit
required_reagents = list("sugar" = 1, "fuel" = 1, "ethanol" = 1 )
result_amount = 1
datum/reagent/cryostylane
/datum/reagent/cryostylane
name = "Cryostylane"
id = "cryostylane"
description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Cryostylane slowly cools all other reagents in the mob down to 0K."
@@ -479,27 +463,25 @@ datum/reagent/cryostylane
result_amount = 3
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
datum/reagent/cryostylane/on_mob_life(var/mob/living/M as mob) //TODO: code freezing into an ice cube
/datum/reagent/cryostylane/on_mob_life(mob/living/M) //TODO: code freezing into an ice cube
if(M.reagents.has_reagent("oxygen"))
M.reagents.remove_reagent("oxygen", 1)
M.bodytemperature -= 30
..()
return
datum/reagent/cryostylane/on_tick()
/datum/reagent/cryostylane/on_tick()
if(holder.has_reagent("oxygen"))
holder.remove_reagent("oxygen", 1)
holder.chem_temp -= 10
holder.handle_reactions()
..()
return
datum/reagent/cryostylane/reaction_turf(var/turf/simulated/T, var/volume)
/datum/reagent/cryostylane/reaction_turf(turf/simulated/T, volume)
if(volume >= 5)
for(var/mob/living/carbon/slime/M in T)
M.adjustToxLoss(rand(15,30))
datum/reagent/pyrosium
/datum/reagent/pyrosium
name = "Pyrosium"
id = "pyrosium"
description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Pyrosium slowly cools all other reagents in the mob down to 0K."
@@ -513,20 +495,18 @@ datum/reagent/pyrosium
required_reagents = list("plasma" = 1, "radium" = 1, "phosphorus" = 1)
result_amount = 3
datum/reagent/pyrosium/on_mob_life(var/mob/living/M as mob)
/datum/reagent/pyrosium/on_mob_life(mob/living/M)
if(M.reagents.has_reagent("oxygen"))
M.reagents.remove_reagent("oxygen", 1)
M.bodytemperature += 30
..()
return
datum/reagent/pyrosium/on_tick()
/datum/reagent/pyrosium/on_tick()
if(holder.has_reagent("oxygen"))
holder.remove_reagent("oxygen", 1)
holder.chem_temp += 10
holder.handle_reactions()
..()
return
/datum/chemical_reaction/azide
name = "azide"
@@ -537,12 +517,11 @@ datum/reagent/pyrosium/on_tick()
mix_message = "The substance violently detonates!"
mix_sound = 'sound/effects/bang.ogg'
/datum/chemical_reaction/azide/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/azide/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
explosion(location,0,1,4)
return
explosion(location, 0, 1, 4)
datum/reagent/firefighting_foam
/datum/reagent/firefighting_foam
name = "Firefighting foam"
id = "firefighting_foam"
description = "Carbon Tetrachloride is a foam used for fire suppression."
@@ -559,7 +538,7 @@ datum/reagent/firefighting_foam
mix_message = "The mixture bubbles gently."
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
datum/reagent/firefighting_foam/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
/datum/reagent/firefighting_foam/reaction_mob(mob/living/M, method=TOUCH, volume)
if(!istype(M, /mob/living))
return
@@ -568,10 +547,10 @@ datum/reagent/firefighting_foam/reaction_mob(var/mob/living/M, var/method=TOUCH,
M.adjust_fire_stacks(-(volume / 5)) // more effective than water
if(M.fire_stacks <= 0)
M.ExtinguishMob()
return
datum/reagent/firefighting_foam/reaction_turf(var/turf/simulated/T, var/volume)
if(!istype(T)) return
/datum/reagent/firefighting_foam/reaction_turf(turf/simulated/T, volume)
if(!istype(T))
return
var/CT = cooling_temperature
src = null
if(!istype(T, /turf/space))
@@ -583,9 +562,8 @@ datum/reagent/firefighting_foam/reaction_turf(var/turf/simulated/T, var/volume)
lowertemp.react()
T.assume_air(lowertemp)
qdel(hotspot)
return
datum/reagent/firefighting_foam/reaction_obj(var/obj/O, var/volume)
/datum/reagent/firefighting_foam/reaction_obj(obj/O, volume)
src = null
var/turf/T = get_turf(O)
var/hotspot = (locate(/obj/effect/hotspot) in T)
@@ -595,7 +573,6 @@ datum/reagent/firefighting_foam/reaction_obj(var/obj/O, var/volume)
lowertemp.react()
T.assume_air(lowertemp)
qdel(hotspot)
return
/datum/chemical_reaction/clf3_firefighting
name = "clf3_firefighting"
@@ -606,10 +583,9 @@ datum/reagent/firefighting_foam/reaction_obj(var/obj/O, var/volume)
mix_message = "The substance violently detonates!"
mix_sound = 'sound/effects/bang.ogg'
/datum/chemical_reaction/clf3_firefighting/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/clf3_firefighting/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
explosion(location,-1,0,2)
return
explosion(location, -1, 0, 2)
/datum/chemical_reaction/shock_explosion
name = "shock_explosion"
@@ -620,14 +596,13 @@ datum/reagent/firefighting_foam/reaction_obj(var/obj/O, var/volume)
mix_message = "<span class='danger'>The reaction releases an electrical blast!</span>"
mix_sound = 'sound/magic/lightningbolt.ogg'
/datum/chemical_reaction/shock_explosion/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/shock_explosion/on_reaction(datum/reagents/holder, created_volume)
var/turf/T = get_turf(holder.my_atom)
for(var/mob/living/carbon/C in view(6, T))
C.Beam(T,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5) //What? Why are we beaming from the mob to the turf? Turf to mob generates really odd results.
C.electrocute_act(3.5, "electrical blast")
holder.del_reagent("teslium") //Clear all remaining Teslium and Uranium, but leave all other reagents untouched.
holder.del_reagent("uranium")
return
/datum/reagent/plasma_dust
name = "Plasma Dust"
+40 -97
View File
@@ -13,11 +13,9 @@
metabolization_rate = 0.1
penetrates_skin = 1
/datum/reagent/polonium/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/polonium/on_mob_life(mob/living/M)
M.apply_effect(8, IRRADIATE, negate_armor = 1)
..()
return
/datum/reagent/histamine
@@ -29,7 +27,7 @@
metabolization_rate = 0.2
overdose_threshold = 40
/datum/reagent/histamine/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume) //dumping histamine on someone is VERY mean.
/datum/reagent/histamine/reaction_mob(mob/living/M, method=TOUCH, volume) //dumping histamine on someone is VERY mean.
if(iscarbon(M))
if(method == TOUCH)
M.reagents.add_reagent("histamine",10)
@@ -37,8 +35,7 @@
to_chat(M, "<span class='danger'>You feel a burning sensation in your throat...</span>")
M.emote("drool")
/datum/reagent/histamine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/histamine/on_mob_life(mob/living/M)
if(prob(20))
M.emote(pick("twitch", "grumble", "sneeze", "cough"))
if(prob(10))
@@ -53,9 +50,8 @@
to_chat(M, "<span class='danger'>You're getting a rash!</span>")
M.adjustBruteLoss(2)
..()
return
/datum/reagent/histamine/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/histamine/overdose_process(mob/living/M, severity)
var/effect = ..()
if(severity == 1)
if(effect <= 2)
@@ -103,13 +99,11 @@
color = "#DED6D0"
penetrates_skin = 1
/datum/reagent/formaldehyde/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/formaldehyde/on_mob_life(mob/living/M)
M.adjustToxLoss(1*REM)
if(prob(10))
M.reagents.add_reagent("histamine",rand(5,15))
..()
return
/datum/chemical_reaction/formaldehyde
name = "formaldehyde"
@@ -129,8 +123,7 @@
metabolization_rate = 0.2
overdose_threshold = 40
/datum/reagent/venom/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/venom/on_mob_life(mob/living/M)
if(prob(25))
M.reagents.add_reagent("histamine",rand(5,10))
if(volume < 20)
@@ -142,9 +135,8 @@
M.adjustToxLoss(2)
M.adjustBruteLoss(2)
..()
return
/datum/reagent/venom/overdose_process(var/mob/living/M as mob)
/datum/reagent/venom/overdose_process(mob/living/M)
if(volume >= 40)
if(prob(4))
M.visible_message("<span class='danger'><B>[M]</B> starts convulsing violently!</span>", "You feel as if your body is tearing itself apart!")
@@ -161,7 +153,7 @@
color = "#60A584"
metabolization_rate = 1
/datum/reagent/neurotoxin2/on_mob_life(var/mob/living/M as mob)
/datum/reagent/neurotoxin2/on_mob_life(mob/living/M)
switch(current_cycle)
if(1 to 4)
current_cycle++
@@ -189,7 +181,6 @@
M.emote("drool")
M.adjustToxLoss(1)
..()
return
/datum/chemical_reaction/neurotoxin2
name = "neurotoxin2"
@@ -210,8 +201,7 @@
metabolization_rate = 0.1
penetrates_skin = 1
/datum/reagent/cyanide/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/cyanide/on_mob_life(mob/living/M)
M.adjustToxLoss(1.5*REM)
if(prob(5))
M.emote("drool")
@@ -224,7 +214,6 @@
M.Stun(2)
M.adjustToxLoss(2)
..()
return
/datum/chemical_reaction/cyanide
name = "Cyanide"
@@ -236,7 +225,7 @@
mix_message = "The mixture gives off a faint scent of almonds."
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
/datum/chemical_reaction/cyanide/on_reaction(var/datum/reagents/holder)
/datum/chemical_reaction/cyanide/on_reaction(datum/reagents/holder)
var/turf/T = get_turf(holder.my_atom)
T.visible_message("<span class='warning'>The solution generates a strong vapor!</span>")
for(var/mob/living/carbon/C in range(T, 1))
@@ -252,8 +241,7 @@
metabolization_rate = 0.3
penetrates_skin = 1
/datum/reagent/itching_powder/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/itching_powder/on_mob_life(mob/living/M)
if(prob(25))
M.emote(pick("twitch", "laugh", "sneeze", "cry"))
if(prob(20))
@@ -277,7 +265,6 @@
M.visible_message("<span class='danger'>[M] falls to the floor, scratching themselves violently!</span>")
M.emote("scream")
..()
return
/datum/chemical_reaction/itching_powder
name = "Itching Powder"
@@ -288,12 +275,10 @@
mix_message = "The mixture congeals and dries up, leaving behind an abrasive powder."
mix_sound = 'sound/effects/blobattack.ogg'
/datum/reagent/facid/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/facid/on_mob_life(mob/living/M)
M.adjustToxLoss(1*REM)
M.adjustFireLoss(1)
..()
return
/datum/reagent/facid
name = "Fluorosulfuric Acid"
@@ -303,7 +288,7 @@
color = "#4141D2"
process_flags = ORGANIC | SYNTHETIC
/datum/reagent/facid/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
/datum/reagent/facid/reaction_mob(mob/living/M, method=TOUCH, volume)
if(!istype(M, /mob/living))
return //wooo more runtime fixin
if(method == TOUCH || method == INGEST)
@@ -347,7 +332,7 @@
H.emote("scream")
H.status_flags |= DISFIGURED
/datum/reagent/facid/reaction_obj(var/obj/O, var/volume)
/datum/reagent/facid/reaction_obj(obj/O, volume)
if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)))
if(!O.unacidable)
var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
@@ -373,8 +358,7 @@
color = "#7F10C0"
metabolization_rate = 0.4
/datum/reagent/initropidril/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/initropidril/on_mob_life(mob/living/M)
if(prob(33))
M.adjustToxLoss(rand(5,25))
if(prob(33))
@@ -395,7 +379,6 @@
if(!H.heart_attack)
H.heart_attack = 1 // rip in pepperoni
..()
return
/datum/chemical_reaction/initropidril
name = "Initropidril"
@@ -414,8 +397,7 @@
color = "#AB1CCF"
metabolization_rate = 0.4
/datum/reagent/concentrated_initro/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/concentrated_initro/on_mob_life(mob/living/M)
if(volume >=5)
if(ishuman(M))
var/mob/living/carbon/human/H = M
@@ -430,8 +412,7 @@
color = "#1E4664"
metabolization_rate = 0.2
/datum/reagent/pancuronium/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/pancuronium/on_mob_life(mob/living/M)
switch(current_cycle)
if(1 to 5)
if(prob(10))
@@ -454,7 +435,6 @@
to_chat(M, "<span class='danger'>You can't breathe!</span>")
M.losebreath += 3
..()
return
/datum/reagent/sodium_thiopental
name = "Sodium Thiopental"
@@ -464,8 +444,7 @@
color = "#5F8BE1"
metabolization_rate = 0.7
/datum/reagent/sodium_thiopental/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/sodium_thiopental/on_mob_life(mob/living/M)
switch(current_cycle)
if(1)
M.emote("drool")
@@ -482,7 +461,6 @@
M.emote("drool")
M.adjustBrainLoss(1)
..()
return
/datum/reagent/ketamine
name = "Ketamine"
@@ -493,8 +471,7 @@
metabolization_rate = 0.8
penetrates_skin = 1
/datum/reagent/ketamine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/ketamine/on_mob_life(mob/living/M)
switch(current_cycle)
if(1 to 5)
if(prob(25))
@@ -509,7 +486,6 @@
if(11 to INFINITY)
M.Paralyse(25)
..()
return
/datum/reagent/sulfonal
name = "Sulfonal"
@@ -528,8 +504,7 @@
mix_message = "The mixture gives off quite a stench."
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
/datum/reagent/sulfonal/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/sulfonal/on_mob_life(mob/living/M)
M.jitteriness = max(0, M.jitteriness-30)
switch(current_cycle)
if(1 to 10)
@@ -546,7 +521,6 @@
M.drowsyness = max(M.drowsyness, 20)
M.adjustToxLoss(1)
..()
return
/datum/reagent/amanitin
name = "Amanitin"
@@ -555,16 +529,9 @@
reagent_state = LIQUID
color = "#D9D9D9"
/datum/reagent/amanitin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
..()
return
/datum/reagent/amanitin/reagent_deleted(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/amanitin/reagent_deleted(mob/living/M)
M.adjustToxLoss(current_cycle*rand(2,4))
..()
return
/datum/reagent/lipolicide
name = "Lipolicide"
@@ -581,8 +548,7 @@
required_reagents = list("mercury" = 1, "diethylamine" = 1, "ephedrine" = 1)
result_amount = 3
/datum/reagent/lipolicide/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/lipolicide/on_mob_life(mob/living/M)
if(!M.nutrition)
switch(rand(1,3))
if(1)
@@ -596,7 +562,6 @@
M.nutrition = max(0, M.nutrition-fat_to_burn)
M.overeatduration = 0
..()
return
/datum/reagent/coniine
name = "Coniine"
@@ -606,12 +571,10 @@
color = "#C2D8CD"
metabolization_rate = 0.05
/datum/reagent/coniine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/coniine/on_mob_life(mob/living/M)
M.adjustToxLoss(2)
M.losebreath += 5
..()
return
/datum/reagent/curare
name = "Curare"
@@ -622,8 +585,7 @@
metabolization_rate = 0.1
penetrates_skin = 1
/datum/reagent/curare/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/curare/on_mob_life(mob/living/M)
M.adjustToxLoss(1)
M.adjustOxyLoss(1)
switch(current_cycle)
@@ -646,7 +608,6 @@
to_chat(M, "<span class='danger'>You can't [pick("breathe", "move", "feel your legs", "feel your face", "feel anything")]!</span>")
M.losebreath++
..()
return
/datum/reagent/sarin
name = "Sarin"
@@ -668,15 +629,14 @@
min_temp = 374
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
/datum/chemical_reaction/sarin/on_reaction(var/datum/reagents/holder)
/datum/chemical_reaction/sarin/on_reaction(datum/reagents/holder)
var/turf/T = get_turf(holder.my_atom)
T.visible_message("<span class='warning'>The solution generates a strong vapor!</span>")
for(var/mob/living/carbon/C in range(T, 2))
if(!(C.wear_mask && (C.internals != null || C.wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT)))
C.reagents.add_reagent("sarin",4)
/datum/reagent/sarin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/sarin/on_mob_life(mob/living/M)
switch(current_cycle)
if(1 to 15)
M.jitteriness += 20
@@ -721,7 +681,6 @@
M.adjustBrainLoss(1)
M.adjustFireLoss(1)
..()
return
/datum/reagent/atrazine
name = "Atrazine"
@@ -730,14 +689,12 @@
reagent_state = LIQUID
color = "#17002D"
/datum/reagent/atrazine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/atrazine/on_mob_life(mob/living/M)
M.adjustToxLoss(2)
..()
return
// Clear off wallrot fungi
/datum/reagent/atrazine/reaction_turf(var/turf/T, var/volume)
/datum/reagent/atrazine/reaction_turf(turf/T, volume)
if(istype(T, /turf/simulated/wall))
var/turf/simulated/wall/W = T
if(W.rotting)
@@ -749,7 +706,7 @@
for(var/mob/O in viewers(W, null))
O.show_message(text("\blue The fungi are completely dissolved by the solution!"), 1)
/datum/reagent/atrazine/reaction_obj(var/obj/O, var/volume)
/datum/reagent/atrazine/reaction_obj(obj/O, volume)
if(istype(O,/obj/structure/alien/weeds/))
var/obj/structure/alien/weeds/alien_weeds = O
alien_weeds.health -= rand(15,35) // Kills alien weeds pretty fast
@@ -760,7 +717,7 @@
if(prob(50)) qdel(O) //Kills kudzu too.
// Damage that is done to growing plants is separately at code/game/machinery/hydroponics at obj/item/hydroponics
/datum/reagent/atrazine/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
/datum/reagent/atrazine/reaction_mob(mob/living/M, method=TOUCH, volume)
src = null
if(iscarbon(M))
var/mob/living/carbon/C = M
@@ -772,12 +729,10 @@
if(H.species.flags & IS_PLANT) //plantmen take a LOT of damage
H.adjustToxLoss(50)
..()
return
else if(istype(M,/mob/living/simple_animal/diona)) //plantmen monkeys (diona) take EVEN MORE damage
var/mob/living/simple_animal/diona/D = M
D.adjustToxLoss(100)
D.adjustHealth(100)
..()
return
/datum/chemical_reaction/atrazine
name = "atrazine"
@@ -802,8 +757,7 @@
result_amount = 1
mix_message = "The smell of death wafts up from the solution."
/datum/reagent/capulettium/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/capulettium/on_mob_life(mob/living/M)
switch(current_cycle)
if(1 to 5)
M.eye_blurry += 10
@@ -817,7 +771,6 @@
if(61 to INFINITY)
M.eye_blurry += 10
..()
return
/datum/reagent/capulettium_plus
name = "Capulettium Plus"
@@ -834,11 +787,9 @@
result_amount = 3
mix_message = "The solution begins to slosh about violently by itself."
/datum/reagent/capulettium_plus/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/capulettium_plus/on_mob_life(mob/living/M)
M.silent = max(M.silent, 2)
..()
return
/datum/reagent/toxic_slurry
name = "Toxic Slurry"
@@ -847,8 +798,7 @@
reagent_state = LIQUID
color = "#00C81E"
/datum/reagent/toxic_slurry/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/toxic_slurry/on_mob_life(mob/living/M)
if(prob(10))
M.adjustToxLoss(rand(2.4))
if(prob(7))
@@ -857,7 +807,6 @@
if(prob(7))
M.fakevomit(1)
..()
return
/datum/reagent/glowing_slurry
name = "Glowing Slurry"
@@ -866,7 +815,7 @@
reagent_state = LIQUID
color = "#00FD00"
/datum/reagent/glowing_slurry/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //same as mutagen
/datum/reagent/glowing_slurry/reaction_mob(mob/M, method=TOUCH, volume) //same as mutagen
if(!..()) return
if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
src = null
@@ -874,10 +823,8 @@
randmutb(M)
domutcheck(M, null)
M.UpdateAppearance()
return
/datum/reagent/glowing_slurry/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/glowing_slurry/on_mob_life(mob/living/M)
M.apply_effect(2, IRRADIATE, 0, negate_armor = 1)
if(prob(15))
randmutb(M)
@@ -886,7 +833,6 @@
domutcheck(M, null)
M.UpdateAppearance()
..()
return
/datum/reagent/ants
name = "Ants"
@@ -896,7 +842,7 @@
color = "#993333"
process_flags = ORGANIC | SYNTHETIC
/datum/reagent/ants/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume) //NOT THE ANTS
/datum/reagent/ants/reaction_mob(mob/living/M, method=TOUCH, volume) //NOT THE ANTS
if(iscarbon(M))
if(method == TOUCH || method==INGEST)
to_chat(M, "<span class='warning'>OH SHIT ANTS!!!!</span>")
@@ -904,11 +850,9 @@
M.adjustBruteLoss(4)
/datum/reagent/ants/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/ants/on_mob_life(mob/living/M)
M.adjustBruteLoss(2)
..()
return
/datum/reagent/teslium //Teslium. Causes periodic shocks, and makes shocks against the target much more effective.
name = "Teslium"
@@ -938,9 +882,8 @@
min_temp = 400
mix_sound = null
/datum/chemical_reaction/teslium/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/teslium/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
s.set_up(6, 1, location)
s.start()
return
s.start()
@@ -19,5 +19,5 @@
var/mix_sound = 'sound/effects/bubbles.ogg'
var/no_message = 0
/datum/chemical_reaction/proc/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/proc/on_reaction(datum/reagents/holder, created_volume)
return
@@ -7,11 +7,10 @@
required_catalysts = list("enzyme" = 5)
result_amount = 1
/datum/chemical_reaction/tofu/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/tofu/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
new /obj/item/weapon/reagent_containers/food/snacks/tofu(location)
return
/datum/chemical_reaction/chocolate_bar
name = "Chocolate Bar"
@@ -20,11 +19,10 @@
required_reagents = list("soymilk" = 2, "cocoa" = 2, "sugar" = 2)
result_amount = 1
/datum/chemical_reaction/chocolate_bar/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/chocolate_bar/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location)
return
/datum/chemical_reaction/chocolate_bar2
name = "Chocolate Bar"
@@ -33,11 +31,10 @@
required_reagents = list("milk" = 2, "cocoa" = 2, "sugar" = 2)
result_amount = 1
/datum/chemical_reaction/chocolate_bar2/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/chocolate_bar2/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location)
return
/datum/chemical_reaction/soysauce
name = "Soy Sauce"
@@ -54,10 +51,10 @@
required_catalysts = list("enzyme" = 5)
result_amount = 1
/datum/chemical_reaction/cheesewheel/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/cheesewheel/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location)
return
for(var/i = 1, i <= created_volume, i++)
new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location)
/datum/chemical_reaction/syntiflesh
name = "Syntiflesh"
@@ -66,10 +63,10 @@
required_reagents = list("blood" = 5, "cryoxadone" = 1)
result_amount = 1
/datum/chemical_reaction/syntiflesh/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/syntiflesh/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location)
return
for(var/i = 1, i <= created_volume, i++)
new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location)
/datum/chemical_reaction/hot_ramen
name = "Hot Ramen"
@@ -131,5 +128,4 @@
/datum/chemical_reaction/dough/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
new /obj/item/weapon/reagent_containers/food/snacks/dough(location)
return
new /obj/item/weapon/reagent_containers/food/snacks/dough(location)
@@ -7,12 +7,11 @@
result_amount = 2
mix_message = "The mixture explodes!"
/datum/chemical_reaction/explosion_potassium/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/explosion_potassium/on_reaction(datum/reagents/holder, created_volume)
var/datum/effect/system/reagents_explosion/e = new()
e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0)
e.start()
holder.clear_reagents()
return
/datum/chemical_reaction/emp_pulse
name = "EMP Pulse"
@@ -21,13 +20,12 @@
required_reagents = list("uranium" = 1, "iron" = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense
result_amount = 2
/datum/chemical_reaction/emp_pulse/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/emp_pulse/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
// 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes.
// 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
empulse(location, round(created_volume / 24), round(created_volume / 14), 1)
holder.clear_reagents()
return
/datum/chemical_reaction/mutagen
name = "Unstable mutagen"
@@ -58,13 +56,11 @@
required_reagents = list("glycerol" = 1, "facid" = 1, "sacid" = 1)
result_amount = 2
/datum/chemical_reaction/nitroglycerin/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/nitroglycerin/on_reaction(datum/reagents/holder, created_volume)
var/datum/effect/system/reagents_explosion/e = new()
e.set_up(round(created_volume/2, 1), holder.my_atom, 0, 0)
e.start()
holder.clear_reagents()
return
/datum/chemical_reaction/condensedcapsaicin
name = "Condensed Capsaicin"
@@ -15,7 +15,7 @@
required_reagents = list("fluorosurfactant" = 1, "water" = 1)
result_amount = 2
/datum/chemical_reaction/foam/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/foam/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
holder.my_atom.visible_message("<span class='warning'>The solution spews out foam!</span>")
@@ -32,7 +32,7 @@
required_reagents = list("aluminum" = 3, "fluorosurfactant" = 1, "sacid" = 1)
result_amount = 5
/datum/chemical_reaction/metalfoam/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/metalfoam/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
holder.my_atom.visible_message("<span class='warning'>The solution spews out a metalic foam!</span>")
@@ -49,7 +49,7 @@
required_reagents = list("iron" = 3, "fluorosurfactant" = 1, "sacid" = 1)
result_amount = 5
/datum/chemical_reaction/ironfoam/on_reaction(var/datum/reagents/holder, var/created_volume)
/datum/chemical_reaction/ironfoam/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
holder.my_atom.visible_message("<span class='warning>The solution spews out a metalic foam!</span>")
@@ -100,7 +100,7 @@
required_reagents = list("facid" = 10, "plasticide" = 20)
result_amount = 1
/datum/chemical_reaction/plastication/on_reaction(var/datum/reagents/holder)
/datum/chemical_reaction/plastication/on_reaction(datum/reagents/holder)
var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/mineral/plastic
M.amount = 10
M.forceMove(get_turf(holder.my_atom))
@@ -18,8 +18,9 @@
var/process_flags = ORGANIC
var/admin_only = 0
/datum/reagent/proc/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //Some reagents transfer on touch, others don't; dependent on if they penetrate the skin or not.
if(!istype(M, /mob/living)) return 0
/datum/reagent/proc/reaction_mob(mob/M, method=TOUCH, volume) //Some reagents transfer on touch, others don't; dependent on if they penetrate the skin or not.
if(!istype(M, /mob/living))
return 0
var/datum/reagent/self = src
src = null
@@ -52,17 +53,17 @@
AD.addiction_stage = 1
return 1
/datum/reagent/proc/reaction_obj(var/obj/O, var/volume) //By default we transfer a small part of the reagent to the object
/datum/reagent/proc/reaction_obj(obj/O, volume) //By default we transfer a small part of the reagent to the object
src = null //if it can hold reagents. nope!
//if(O.reagents)
// O.reagents.add_reagent(id,volume/3)
return
/datum/reagent/proc/reaction_turf(var/turf/T, var/volume)
/datum/reagent/proc/reaction_turf(turf/T, volume)
src = null
return
/datum/reagent/proc/on_mob_life(var/mob/living/M as mob, var/alien)
/datum/reagent/proc/on_mob_life(mob/living/M)
if(!istype(M))
return
if(holder)
@@ -70,13 +71,13 @@
current_cycle++
// Called when two reagents of the same are mixing.
/datum/reagent/proc/on_merge(var/data)
/datum/reagent/proc/on_merge(data)
return
/datum/reagent/proc/on_move(var/mob/M)
/datum/reagent/proc/on_move(mob/M)
return
/datum/reagent/proc/on_update(var/atom/A)
/datum/reagent/proc/on_update(atom/A)
return
// Called after add_reagents creates a new reagent.
@@ -10,15 +10,14 @@
var/dizzy_adj = 3
var/alcohol_perc = 1 //percentage of ethanol in a beverage 0.0 - 1.0
/datum/reagent/ethanol/on_mob_life(var/mob/living/M as mob, var/alien)
/datum/reagent/ethanol/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
M.AdjustDrunk(alcohol_perc)
M.dizziness += dizzy_adj
..()
return
/datum/reagent/ethanol/reaction_obj(var/obj/O, var/volume)
/datum/reagent/ethanol/reaction_obj(obj/O, volume)
if(istype(O,/obj/item/weapon/paper))
var/obj/item/weapon/paper/paperaffected = O
paperaffected.clearpaper()
@@ -32,7 +31,7 @@
to_chat(usr, "It wasn't enough...")
return
/datum/reagent/ethanol/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with ethanol isn't quite as good as fuel.
/datum/reagent/ethanol/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with ethanol isn't quite as good as fuel.
if(!istype(M, /mob/living))
return
if(method == TOUCH)
@@ -48,11 +47,6 @@
color = "#664300" // rgb: 102, 67, 0
alcohol_perc = 0.2
/datum/reagent/ethanol/beer/on_mob_life(var/mob/living/M as mob)
..()
M:jitteriness = max(M:jitteriness-3,0)
return
/datum/reagent/ethanol/cider
name = "Cider"
id = "cider"
@@ -93,11 +87,9 @@
alcohol_perc = 0.7
//copy paste from LSD... shoot me
/datum/reagent/ethanol/absinthe/on_mob_life(var/mob/living/M)
if(!M) M = holder.my_atom
/datum/reagent/ethanol/absinthe/on_mob_life(mob/living/M)
M.hallucination += 5
..()
return
/datum/reagent/ethanol/absinthe/overdose_process(mob/living/M, severity)
M.adjustToxLoss(1)
@@ -110,10 +102,9 @@
overdose_threshold = 30
alcohol_perc = 0.4
/datum/reagent/ethanol/rum/on_mob_life(var/mob/living/M as mob)
..()
/datum/reagent/ethanol/rum/on_mob_life(mob/living/M)
M.dizziness +=5
return
..()
/datum/reagent/ethanol/rum/overdose_process(mob/living/M, severity)
M.adjustToxLoss(1)
@@ -192,16 +183,14 @@
color = "#102000" // rgb: 16, 32, 0
alcohol_perc = 0.3
/datum/reagent/ethanol/thirteenloko/on_mob_life(var/mob/living/M as mob)
..()
M:nutrition += nutriment_factor
M:drowsyness = max(0,M:drowsyness-7)
//if(!M:sleeping_willingly)
// M:sleeping = max(0,M.sleeping-2)
/datum/reagent/ethanol/thirteenloko/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
M.drowsyness = max(0, M.drowsyness-7)
M.AdjustSleeping(-2)
if(M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature-5)
M.Jitter(1)
return
M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
M.Jitter(5)
..()
/////////////////////////////////////////////////////////////////cocktail entities//////////////////////////////////////////////
@@ -350,6 +339,11 @@
color = "#664300" // rgb: 102, 67, 0
alcohol_perc = 0.5
/datum/reagent/ethanol/toxins_special/on_mob_life(mob/living/M)
if(M.bodytemperature < 330)
M.bodytemperature = min(330, M.bodytemperature + (15 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055
..()
/datum/reagent/ethanol/beepsky_smash
name = "Beepsky Smash"
id = "beepskysmash"
@@ -458,6 +452,11 @@
color = "#664300" // rgb: 102, 67, 0
alcohol_perc = 0.2
/datum/reagent/ethanol/antifreeze/on_mob_life(mob/living/M)
if(M.bodytemperature < 330)
M.bodytemperature = min(330, M.bodytemperature + (20 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055
..()
/datum/reagent/ethanol/barefoot
name = "Barefoot"
id = "barefoot"
@@ -526,11 +525,10 @@
color = "#664300" // rgb: 102, 67, 0
alcohol_perc = 0.4
/datum/reagent/ethanol/sbiten/on_mob_life(var/mob/living/M as mob)
..()
/datum/reagent/ethanol/sbiten/on_mob_life(mob/living/M)
if(M.bodytemperature < 360)
M.bodytemperature = min(360, M.bodytemperature+50) //310 is the normal bodytemp. 310.055
return
M.bodytemperature = min(360, M.bodytemperature + (50 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055
..()
/datum/reagent/ethanol/devilskiss
name = "Devils Kiss"
@@ -564,11 +562,10 @@
color = "#664300" // rgb: 102, 67, 0
alcohol_perc = 0.2
/datum/reagent/ethanol/iced_beer/on_mob_life(var/mob/living/M as mob)
/datum/reagent/ethanol/iced_beer/on_mob_life(mob/living/M)
if(M.bodytemperature > 270)
M.bodytemperature = max(270, M.bodytemperature - (20 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055
..()
if(M.bodytemperature < 270)
M.bodytemperature = min(270, M.bodytemperature-40) //310 is the normal bodytemp. 310.055
return
/datum/reagent/ethanol/grog
name = "Grog"
@@ -624,17 +621,16 @@
description = "A strong neurotoxin that puts the subject into a death-like state."
reagent_state = LIQUID
color = "#2E2E61" // rgb: 46, 46, 97
dizzy_adj = 6
alcohol_perc = 0.7
/datum/reagent/ethanol/neurotoxin/on_mob_life(var/mob/living/M as mob)
/datum/reagent/ethanol/neurotoxin/on_mob_life(mob/living/M)
M.weakened = max(M.weakened, 3)
dizzy_adj = 6
if(current_cycle >=55)
M.druggy = max(M.druggy, 55)
if(current_cycle >=200)
M.adjustToxLoss(2)
..()
return
/datum/reagent/ethanol/changelingsting
name = "Changeling Sting"
@@ -644,10 +640,9 @@
color = "#2E6671" // rgb: 46, 102, 113
alcohol_perc = 0.7
/datum/reagent/ethanol/changelingsting/on_mob_life(var/mob/living/M as mob)
..()
/datum/reagent/ethanol/changelingsting/on_mob_life(mob/living/M)
M.dizziness +=5
return
..()
/datum/reagent/ethanol/irishcarbomb
name = "Irish Car Bomb"
@@ -657,10 +652,9 @@
color = "#2E6671" // rgb: 46, 102, 113
alcohol_perc = 0.3
/datum/reagent/ethanol/irishcarbomb/on_mob_life(var/mob/living/M as mob)
..()
/datum/reagent/ethanol/irishcarbomb/on_mob_life(mob/living/M)
M.dizziness +=5
return
..()
/datum/reagent/ethanol/syndicatebomb
name = "Syndicate Bomb"
@@ -686,15 +680,12 @@
color = "#2E6671" // rgb: 46, 102, 113
alcohol_perc = 0.5
/datum/reagent/ethanol/driestmartini/on_mob_life(var/mob/living/M as mob)
/datum/reagent/ethanol/driestmartini/on_mob_life(mob/living/M)
M.dizziness +=10
if(current_cycle >= 55 && current_cycle <115)
if(!M.stuttering) M.stuttering = 1
if(current_cycle >= 55 && current_cycle < 115)
M.stuttering += 10
..()
return
/datum/reagent/ethanol/kahlua
name = "Kahlua"
id = "kahlua"
@@ -702,10 +693,9 @@
color = "#664300" // rgb: 102, 67, 0
alcohol_perc = 0.2
/datum/reagent/ethanol/kahlua/on_mob_life(var/mob/living/M as mob)
M.dizziness = max(0,M.dizziness-5)
M.drowsyness = max(0,M.drowsyness-3)
M.sleeping = max(0,M.sleeping-2)
/datum/reagent/ethanol/kahlua/on_mob_life(mob/living/M)
M.dizziness = max(0, M.dizziness-5)
M.drowsyness = max(0, M.drowsyness-3)
M.AdjustSleeping(-2)
M.Jitter(5)
..()
return
..()
@@ -4,10 +4,10 @@
description = "Both delicious AND rich in Vitamin C, what more do you need?"
color = "#E78108" // rgb: 231, 129, 8
/datum/reagent/drink/orangejuicde/on_mob_life(var/mob/living/M as mob)
/datum/reagent/drink/orangejuicde/on_mob_life(mob/living/M)
if(M.getOxyLoss() && prob(30))
M.adjustOxyLoss(-1*REM)
..()
if(M.getOxyLoss() && prob(30)) M.adjustOxyLoss(-1*REM)
return
/datum/reagent/drink/tomatojuice
name = "Tomato Juice"
@@ -15,10 +15,10 @@
description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?"
color = "#731008" // rgb: 115, 16, 8
/datum/reagent/drink/tomatojuice/on_mob_life(var/mob/living/M as mob)
/datum/reagent/drink/tomatojuice/on_mob_life(mob/living/M)
if(M.getFireLoss() && prob(20))
M.adjustFireLoss(-1)
..()
if(M.getFireLoss() && prob(20)) M.adjustFireLoss(-1)
return
/datum/reagent/drink/limejuice
name = "Lime Juice"
@@ -26,11 +26,10 @@
description = "The sweet-sour juice of limes."
color = "#365E30" // rgb: 54, 94, 48
/datum/reagent/drink/limejuice/on_mob_life(var/mob/living/M as mob)
/datum/reagent/drink/limejuice/on_mob_life(mob/living/M)
if(M.getToxLoss() && prob(20))
M.adjustToxLoss(-1)
..()
if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1)
return
/datum/reagent/drink/carrotjuice
name = "Carrot juice"
@@ -38,19 +37,16 @@
description = "It is just like a carrot but without crunching."
color = "#973800" // rgb: 151, 56, 0
/datum/reagent/drink/carrotjuicde/on_mob_life(var/mob/living/M as mob)
..()
/datum/reagent/drink/carrotjuicde/on_mob_life(mob/living/M)
M.eye_blurry = max(M.eye_blurry-1 , 0)
M.eye_blind = max(M.eye_blind-1 , 0)
if(!data) data = 1
switch(data)
switch(current_cycle)
if(1 to 20)
//nothing
if(21 to INFINITY)
if(prob(data-10))
if(prob(current_cycle-10))
M.disabilities &= ~NEARSIGHTED
data++
return
..()
/datum/reagent/drink/doctor_delight
name = "The Doctor's Delight"
@@ -59,11 +55,10 @@
reagent_state = LIQUID
color = "#FF8CFF" // rgb: 255, 140, 255
/datum/reagent/drink/doctors_delight/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1)
/datum/reagent/drink/doctors_delight/on_mob_life(mob/living/M)
if(M.getToxLoss() && prob(20))
M.adjustToxLoss(-1)
..()
return
/datum/reagent/drink/berryjuice
name = "Berry Juice"
@@ -77,10 +72,9 @@
description = "A tasty juice blended from various kinds of very deadly and toxic berries."
color = "#863353" // rgb: 134, 51, 83
/datum/reagent/drink/poisonberryjuice/on_mob_life(var/mob/living/M as mob)
..()
/datum/reagent/drink/poisonberryjuice/on_mob_life(mob/living/M)
M.adjustToxLoss(1)
return
..()
/datum/reagent/drink/watermelonjuice
name = "Watermelon Juice"
@@ -106,15 +100,11 @@
description = "The raw essence of a banana."
color = "#863333" // rgb: 175, 175, 0
/datum/reagent/drink/banana/on_mob_life(var/mob/living/M as mob)
/datum/reagent/drink/banana/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
if(!M) M = holder.my_atom
if((istype(M, /mob/living/carbon/human) && M.job in list("Clown") ) || issmall(M))
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
M.nutrition += nutriment_factor
..()
return
..()
/datum/reagent/drink/nothing
@@ -122,15 +112,11 @@
id = "nothing"
description = "Absolutely nothing."
/datum/reagent/drink/nothing/on_mob_life(var/mob/living/M as mob)
/datum/reagent/drink/nothing/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
if(!M) M = holder.my_atom
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
M.nutrition += nutriment_factor
..()
return
..()
/datum/reagent/drink/potato_juice
@@ -146,12 +132,12 @@
description = "An opaque white liquid produced by the mammary glands of mammals."
color = "#DFDFDF" // rgb: 223, 223, 223
/datum/reagent/drink/milk/on_mob_life(var/mob/living/M as mob)
if(M.getBruteLoss() && prob(20)) M.adjustBruteLoss(-1)
/datum/reagent/drink/milk/on_mob_life(mob/living/M)
if(M.getBruteLoss() && prob(20))
M.adjustBruteLoss(-1)
if(holder.has_reagent("capsaicin"))
holder.remove_reagent("capsaicin", 2)
..()
return
/datum/reagent/drink/milk/soymilk
name = "Soy Milk"
@@ -177,7 +163,7 @@
description = "Made with love! And coco beans."
nutriment_factor = 2 * FOOD_METABOLISM
color = "#403010" // rgb: 64, 48, 16
adj_temp = 5
adj_temp_hot = 5
/datum/reagent/drink/coffee
name = "Coffee"
@@ -187,11 +173,11 @@
adj_dizzy = -5
adj_drowsy = -3
adj_sleepy = -2
adj_temp = 25
adj_temp_hot = 25
overdose_threshold = 45
addiction_chance = 1 // It's true.
/datum/reagent/drink/coffee/on_mob_life(var/mob/living/M as mob)
/datum/reagent/drink/coffee/on_mob_life(mob/living/M)
if(holder.has_reagent("frostoil"))
holder.remove_reagent("frostoil", 5)
if(prob(50))
@@ -199,9 +185,8 @@
M.AdjustStunned(-1)
M.AdjustWeakened(-1)
..()
return
/datum/reagent/drink/coffee/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/drink/coffee/overdose_process(mob/living/M, severity)
if(volume > 45)
M.Jitter(5)
@@ -210,7 +195,8 @@
id = "icecoffee"
description = "Coffee and ice, refreshing and cool."
color = "#102838" // rgb: 16, 40, 56
adj_temp = -5
adj_temp_hot = 0
adj_temp_cool = 5
/datum/reagent/drink/coffee/soy_latte
name = "Soy Latte"
@@ -218,13 +204,13 @@
description = "A nice and tasty beverage while you are reading your hippie books."
color = "#664300" // rgb: 102, 67, 0
adj_sleepy = 0
adj_temp = 5
adj_temp_hot = 5
/datum/reagent/drink/coffee/soy_latte/on_mob_life(var/mob/living/M as mob)
/datum/reagent/drink/coffee/soy_latte/on_mob_life(mob/living/M)
..()
M.sleeping = 0
if(M.getBruteLoss() && prob(20)) M.adjustBruteLoss(-1)
return
M.SetSleeping(0)
if(M.getBruteLoss() && prob(20))
M.adjustBruteLoss(-1)
/datum/reagent/drink/coffee/cafe_latte
name = "Cafe Latte"
@@ -232,14 +218,13 @@
description = "A nice, strong and tasty beverage while you are reading."
color = "#664300" // rgb: 102, 67, 0
adj_sleepy = 0
adj_temp = 5
adj_temp_hot = 5
/datum/reagent/drink/coffee/cafe_latte/on_mob_life(var/mob/living/M as mob)
/datum/reagent/drink/coffee/cafe_latte/on_mob_life(mob/living/M)
..()
M.sleeping = 0
M.SetSleeping(0)
if(M.getBruteLoss() && prob(20))
M.adjustBruteLoss(-1)
return
/datum/reagent/drink/coffee/cafe_latte/cafe_mocha
name = "Cafe Mocha"
@@ -255,20 +240,20 @@
adj_dizzy = -2
adj_drowsy = -1
adj_sleepy = -3
adj_temp = 20
adj_temp_hot = 20
/datum/reagent/drink/tea/on_mob_life(var/mob/living/M as mob)
..()
/datum/reagent/drink/tea/on_mob_life(mob/living/M)
if(M.getToxLoss() && prob(20))
M.adjustToxLoss(-1)
return
..()
/datum/reagent/drink/tea/icetea
name = "Iced Tea"
id = "icetea"
description = "No relation to a certain rap artist/ actor."
color = "#104038" // rgb: 16, 64, 56
adj_temp = -5
adj_temp_hot = 0
adj_temp_cool = 5
/datum/reagent/drink/bananahonk
name = "Banana Mama"
@@ -277,15 +262,11 @@
nutriment_factor = 1 * FOOD_METABOLISM
color = "#664300" // rgb: 102, 67, 0
/datum/reagent/drink/bananahonk/on_mob_life(var/mob/living/M as mob)
/datum/reagent/drink/bananahonk/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
if(!M) M = holder.my_atom
if((istype(M, /mob/living/carbon/human) && M.job in list("Clown") ) || issmall(M))
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
M.nutrition += nutriment_factor
..()
return
..()
/datum/reagent/drink/silencer
@@ -295,13 +276,9 @@
nutriment_factor = 1 * FOOD_METABOLISM
color = "#664300" // rgb: 102, 67, 0
/datum/reagent/drink/silencer/on_mob_life(var/mob/living/M as mob)
/datum/reagent/drink/silencer/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
if(!M) M = holder.my_atom
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
M.nutrition += nutriment_factor
..()
return
..()
@@ -8,16 +8,21 @@
var/adj_dizzy = 0
var/adj_drowsy = 0
var/adj_sleepy = 0
var/adj_temp = 0
var/adj_temp_hot = 0
var/adj_temp_cool = 0
/datum/reagent/drink/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/drink/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
if(adj_dizzy) M.dizziness = max(0,M.dizziness + adj_dizzy)
if(adj_drowsy) M.drowsyness = max(0,M.drowsyness + adj_drowsy)
if(adj_sleepy) M.sleeping = max(0,M.sleeping + adj_sleepy)
if(adj_temp)
if(adj_dizzy)
M.dizziness = max(0, M.dizziness + adj_dizzy)
if(adj_drowsy)
M.drowsyness = max(0, M.drowsyness + adj_drowsy)
if(adj_sleepy)
M.AdjustSleeping(adj_sleepy)
if(adj_temp_hot)
if(M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = min(310, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT))
..()
return
M.bodytemperature = min(310, M.bodytemperature + (adj_temp_hot * TEMPERATURE_DAMAGE_COEFFICIENT))
if(adj_temp_cool)
if(M.bodytemperature > 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = max(310, M.bodytemperature - (adj_temp_cool * TEMPERATURE_DAMAGE_COEFFICIENT))
..()
@@ -1,6 +1,6 @@
/datum/reagent/drink/cold
name = "Cold drink"
adj_temp = -5
adj_temp_cool = 5
/datum/reagent/drink/cold/tonic
name = "Tonic Water"
@@ -25,6 +25,11 @@
description = "Frozen water, your dentist wouldn't like you chewing this."
reagent_state = SOLID
color = "#619494" // rgb: 97, 148, 148
adj_temp_cool = 0
/datum/reagent/drink/cold/ice/on_mob_life(mob/living/M)
M.bodytemperature = max(M.bodytemperature - 5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0)
..()
/datum/reagent/drink/cold/space_cola
name = "Cola"
@@ -32,7 +37,7 @@
description = "A refreshing beverage."
reagent_state = LIQUID
color = "#100800" // rgb: 16, 8, 0
adj_drowsy = -3
adj_drowsy = -5
/datum/reagent/drink/cold/nuka_cola
name = "Nuka Cola"
@@ -41,14 +46,17 @@
color = "#100800" // rgb: 16, 8, 0
adj_sleepy = -2
/datum/reagent/drink/cold/nuka_cola/on_mob_life(var/mob/living/M as mob)
/datum/reagent/drink/cold/nuka_cola/on_mob_life(mob/living/M)
M.Jitter(20)
M.druggy = max(M.druggy, 30)
M.dizziness +=5
M.drowsyness = 0
M.status_flags |= GOTTAGOFAST
..()
return
/datum/reagent/drink/cold/nuka_cola/reagent_deleted(mob/living/M)
M.status_flags &= ~GOTTAGOFAST
..()
/datum/reagent/drink/cold/spacemountainwind
name = "Space Mountain Wind"
@@ -70,14 +78,14 @@
id = "space_up"
description = "Tastes like a hull breach in your mouth."
color = "#202800" // rgb: 32, 40, 0
adj_temp = -8
adj_temp_cool = 8
/datum/reagent/drink/cold/lemon_lime
name = "Lemon Lime"
description = "A tangy substance made of 0.5% natural citrus!"
id = "lemon_lime"
color = "#878F00" // rgb: 135, 40, 0
adj_temp = -8
adj_temp_cool = 8
/datum/reagent/drink/cold/lemonade
name = "Lemonade"
@@ -96,37 +104,14 @@
description = "It's not what it sounds like..."
id = "brownstar"
color = "#9F3400" // rgb: 159, 052, 000
adj_temp = - 2
adj_temp_cool = 2
/datum/reagent/drink/cold/milkshake
name = "Milkshake"
description = "Glorious brainfreezing mixture."
id = "milkshake"
color = "#AEE5E4" // rgb" 174, 229, 228
adj_temp = -9
/datum/reagent/drink/cold/milkshake/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!data) data = 1
switch(data)
if(1 to 15)
M.bodytemperature -= 5 * TEMPERATURE_DAMAGE_COEFFICIENT
if(holder.has_reagent("capsaicin"))
holder.remove_reagent("capsaicin", 5)
if(istype(M, /mob/living/carbon/slime))
M.bodytemperature -= rand(5,20)
if(15 to 25)
M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT
if(istype(M, /mob/living/carbon/slime))
M.bodytemperature -= rand(10,20)
if(25 to INFINITY)
M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT
if(prob(1)) M.emote("shiver")
if(istype(M, /mob/living/carbon/slime))
M.bodytemperature -= rand(15,20)
data++
..()
return
adj_temp_cool = 9
/datum/reagent/drink/cold/rewriter
name = "Rewriter"
@@ -134,7 +119,6 @@
id = "rewriter"
color = "#485000" // rgb:72, 080, 0
/datum/reagent/drink/cold/rewriter/on_mob_life(var/mob/living/M as mob)
..()
/datum/reagent/drink/cold/rewriter/on_mob_life(mob/living/M)
M.Jitter(5)
return
..()
@@ -5,13 +5,9 @@
reagent_state = LIQUID
color = "#C8A5DC" // rgb: 200, 165, 220
process_flags = ORGANIC | SYNTHETIC //Adminbuse knows no bounds!
admin_only=1
admin_only = 1
/datum/reagent/adminordrazine/on_mob_life(var/mob/living/carbon/M as mob)
if(!M) M = holder.my_atom ///This can even heal dead people.
for(var/datum/reagent/R in M.reagents.reagent_list)
if(R != src)
M.reagents.remove_reagent(R.id,5)
/datum/reagent/adminordrazine/on_mob_life(mob/living/carbon/M)
M.setCloneLoss(0)
M.setOxyLoss(0)
M.radiation = 0
@@ -20,15 +16,18 @@
M.adjustToxLoss(-5)
M.hallucination = 0
M.setBrainLoss(0)
if(ishuman(M))
var/mob/living/carbon/human/H = M
for(var/name in H.internal_organs)
var/obj/item/organ/internal/I = H.get_int_organ(name)
I.damage = max(0, I.damage-5)
for(var/obj/item/organ/external/E in H.organs)
if(E.mend_fracture())
E.perma_injury = 0
M.disabilities = 0
M.sdisabilities = 0
M.eye_blurry = 0
M.eye_blind = 0
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
if(istype(E))
E.damage = max(E.damage-5 , 0)
M.SetWeakened(0)
M.SetStunned(0)
M.SetParalysis(0)
@@ -38,12 +37,15 @@
M.stuttering = 0
M.slurring = 0
M.confused = 0
M.sleeping = 0
M.SetSleeping(0)
M.jitteriness = 0
if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs
var/mob/living/carbon/C = M
for(var/datum/disease/D in C.viruses)
D.cure(0)
for(var/datum/disease/D in M.viruses)
if(D.severity == NONTHREAT)
continue
D.spread_text = "Remissive"
D.stage--
if(D.stage < 1)
D.cure()
..()
/datum/reagent/adminordrazine/nanites
@@ -6,12 +6,11 @@
color = "#202040" // rgb: 20, 20, 40
metabolization_rate = 0.25 * REAGENTS_METABOLISM
/datum/reagent/serotrotium/on_mob_life(var/mob/living/M as mob)
/datum/reagent/serotrotium/on_mob_life(mob/living/M)
if(ishuman(M))
if(prob(7))
M.emote(pick("twitch","drool","moan","gasp"))
..()
return
/datum/reagent/lithium
@@ -21,14 +20,12 @@
reagent_state = SOLID
color = "#808080" // rgb: 128, 128, 128
/datum/reagent/lithium/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/lithium/on_mob_life(mob/living/M)
if(isturf(M.loc) && !istype(M.loc, /turf/space))
if(M.canmove && !M.restrained())
step(M, pick(cardinal))
if(prob(5)) M.emote(pick("twitch","drool","moan"))
..()
return
/datum/reagent/hippies_delight
@@ -39,11 +36,9 @@
color = "#664300" // rgb: 102, 67, 0
metabolization_rate = 0.2 * REAGENTS_METABOLISM
/datum/reagent/hippies_delight/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/hippies_delight/on_mob_life(mob/living/M)
M.druggy = max(M.druggy, 50)
if(!data) data = 1
switch(data)
switch(current_cycle)
if(1 to 5)
if(!M.stuttering) M.stuttering = 1
M.Dizzy(10)
@@ -60,10 +55,7 @@
M.Dizzy(40)
M.druggy = max(M.druggy, 60)
if(prob(30)) M.emote(pick("twitch","giggle"))
data++
..()
return
/datum/reagent/lsd
name = "Lysergic acid diethylamide"
@@ -72,13 +64,10 @@
reagent_state = LIQUID
color = "#0000D8"
/datum/reagent/lsd/on_mob_life(var/mob/living/M)
if(!M) M = holder.my_atom
/datum/reagent/lsd/on_mob_life(mob/living/M)
M.druggy = max(M.druggy, 15)
M.hallucination += 10
..()
return
/datum/reagent/space_drugs
name = "Space drugs"
@@ -89,12 +78,10 @@
metabolization_rate = 0.2
addiction_chance = 65
/datum/reagent/space_drugs/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/space_drugs/on_mob_life(mob/living/M)
M.druggy = max(M.druggy, 15)
if(isturf(M.loc) && !istype(M.loc, /turf/space))
if(M.canmove && !M.restrained())
step(M, pick(cardinal))
if(prob(7)) M.emote(pick("twitch","drool","moan","giggle"))
..()
return
..()
@@ -5,7 +5,7 @@
reagent_state = LIQUID
color = "#060606"
/datum/reagent/fuel/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite!
/datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with welding fuel to make them easy to ignite!
if(!istype(M, /mob/living))
return
if(method == TOUCH)
@@ -18,6 +18,7 @@
id = "unholywater"
description = "Something that shouldn't exist on this plane of existance."
process_flags = ORGANIC | SYNTHETIC //ethereal means everything processes it.
metabolization_rate = 1
/datum/reagent/fuel/unholywater/on_mob_life(mob/living/M)
M.adjustBrainLoss(3)
@@ -32,7 +33,11 @@
M.adjustFireLoss(2)
M.adjustOxyLoss(2)
M.adjustBruteLoss(2)
holder.remove_reagent(src.id, 1)
..()
/datum/reagent/fuel/unholywater/reagent_deleted(mob/living/M)
M.status_flags &= ~GOTTAGOFAST
..()
/datum/reagent/plasma
name = "Plasma"
@@ -41,8 +46,7 @@
reagent_state = LIQUID
color = "#7A2B94"
/datum/reagent/plasma/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/plasma/on_mob_life(mob/living/M)
M.adjustToxLoss(1*REM)
if(holder.has_reagent("epinephrine"))
holder.remove_reagent("epinephrine", 2)
@@ -50,15 +54,13 @@
var/mob/living/carbon/C = M
C.adjustPlasma(10)
..()
return
/datum/reagent/plasma/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with plasma is stronger than fuel!
/datum/reagent/plasma/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with plasma is stronger than fuel!
if(!istype(M, /mob/living))
return
if(method == TOUCH)
M.adjust_fire_stacks(volume / 5)
..()
return
/datum/reagent/thermite
@@ -69,14 +71,13 @@
color = "#673910" // rgb: 103, 57, 16
process_flags = ORGANIC | SYNTHETIC
/datum/reagent/thermite/reaction_turf(var/turf/T, var/volume)
/datum/reagent/thermite/reaction_turf(turf/T, volume)
src = null
if(volume >= 5)
if(istype(T, /turf/simulated/wall))
T:thermite = 1
T.overlays.Cut()
T.overlays = image('icons/effects/effects.dmi',icon_state = "thermite")
return
/datum/reagent/glycerol
name = "Glycerol"
@@ -8,14 +8,13 @@
reagent_state = SOLID
nutriment_factor = 12 * REAGENTS_METABOLISM
color = "#664330" // rgb: 102, 67, 48
var/diet_flags = DIET_OMNI | DIET_HERB | DIET_CARN
/datum/reagent/nutriment/on_mob_life(mob/living/M)
if(!M)
M = holder.my_atom
if(!(M.mind in ticker.mode.vampires))
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.can_eat()) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
H.nutrition += nutriment_factor // For hunger and fatness
if(prob(50))
M.adjustBruteLoss(-1)
@@ -24,54 +23,44 @@
else
if(!(H.species.flags & NO_BLOOD))
H.vessel.add_reagent("blood", 0.4)
if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
if(prob(50))
M.heal_organ_damage(1,0)
..()
/datum/reagent/protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores
/datum/reagent/nutriment/protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores
name = "Protein"
id = "protein"
description = "Various essential proteins and fats commonly found in animal flesh and blood."
reagent_state = SOLID
nutriment_factor = 15 * REAGENTS_METABOLISM
color = "#664330" // rgb: 102, 67, 48
diet_flags = DIET_CARN | DIET_OMNI
/datum/reagent/protein/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!(M.mind in ticker.mode.vampires))
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.can_eat(DIET_CARN | DIET_OMNI)) //Make sure that it is not a herbivore
H.nutrition += nutriment_factor // For hunger and fatness
if(prob(50)) M.adjustBruteLoss(-1)
if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
if(prob(50)) M.heal_organ_damage(1,0)
..()
return
/datum/reagent/plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores
/datum/reagent/nutriment/plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores
name = "Plant-matter"
id = "plantmatter"
description = "Vitamin-rich fibers and natural sugars commonly found in fresh produce."
reagent_state = SOLID
nutriment_factor = 15 * REAGENTS_METABOLISM
diet_flags = DIET_HERB | DIET_OMNI
/datum/reagent/vitamin
name = "Vitamin"
id = "vitamin"
description = "All the best vitamins, minerals, and carbohydrates the body needs in pure form."
reagent_state = SOLID
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#664330" // rgb: 102, 67, 48
/datum/reagent/plantmatter/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!(M.mind in ticker.mode.vampires))
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.can_eat(DIET_HERB | DIET_OMNI)) //Make sure that it is not a carnivore
H.nutrition += nutriment_factor // For hunger and fatness
if(prob(50)) M.adjustBruteLoss(-1)
if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
if(prob(50)) M.heal_organ_damage(1,0)
/datum/reagent/vitamin/on_mob_life(mob/living/M) //everyone needs vitamins, so this works on everyone, regardless of diet or if they're a vampire.
M.nutrition += nutriment_factor
if(prob(50))
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.species.exotic_blood)
H.vessel.add_reagent(H.species.exotic_blood, 0.5)
else
if(!(H.species.flags & NO_BLOOD))
H.vessel.add_reagent("blood", 0.5)
..()
return
/datum/reagent/soysauce
name = "Soysauce"
@@ -97,10 +86,8 @@
reagent_state = LIQUID
color = "#B31008" // rgb: 179, 16, 8
/datum/reagent/capsaicin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!data) data = 1
switch(data)
/datum/reagent/capsaicin/on_mob_life(mob/living/M)
switch(current_cycle)
if(1 to 15)
M.bodytemperature += 5 * TEMPERATURE_DAMAGE_COEFFICIENT
if(holder.has_reagent("frostoil"))
@@ -119,9 +106,7 @@
M.bodytemperature += 20 * TEMPERATURE_DAMAGE_COEFFICIENT
if(istype(M, /mob/living/carbon/slime))
M.bodytemperature += rand(20,25)
data++
..()
return
/datum/reagent/frostoil
name = "Frost Oil"
@@ -131,10 +116,8 @@
color = "#8BA6E9" // rgb: 139, 166, 233
process_flags = ORGANIC | SYNTHETIC
/datum/reagent/frostoil/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!data) data = 1
switch(data)
/datum/reagent/frostoil/on_mob_life(mob/living/M)
switch(current_cycle)
if(1 to 15)
M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT
if(holder.has_reagent("capsaicin"))
@@ -157,11 +140,9 @@
M.emote("shiver")
if(istype(M, /mob/living/carbon/slime))
M.bodytemperature -= rand(20,25)
data++
..()
return
/datum/reagent/frostoil/reaction_turf(var/turf/simulated/T, var/volume)
/datum/reagent/frostoil/reaction_turf(turf/simulated/T, volume)
if(volume >= 5)
for(var/mob/living/carbon/slime/M in T)
M.adjustToxLoss(rand(15,30))
@@ -175,12 +156,10 @@
color = "#B1B0B0"
overdose_threshold = 100
/datum/reagent/sodiumchloride/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/sodiumchloride/overdose_process(mob/living/M, severity)
if(prob(70))
M.adjustBrainLoss(1)
..()
return
/datum/reagent/blackpepper
name = "Black Pepper"
@@ -197,10 +176,9 @@
nutriment_factor = 5 * REAGENTS_METABOLISM
color = "#302000" // rgb: 48, 32, 0
/datum/reagent/cocoa/on_mob_life(var/mob/living/M as mob)
/datum/reagent/cocoa/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
..()
return
/datum/reagent/hot_coco
name = "Hot Chocolate"
@@ -210,12 +188,11 @@
nutriment_factor = 2 * REAGENTS_METABOLISM
color = "#403010" // rgb: 64, 48, 16
/datum/reagent/hot_coco/on_mob_life(var/mob/living/M as mob)
/datum/reagent/hot_coco/on_mob_life(mob/living/M)
if(M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
M.nutrition += nutriment_factor
..()
return
/datum/reagent/psilocybin
@@ -224,11 +201,9 @@
description = "A strong psycotropic derived from certain species of mushroom."
color = "#E700E7" // rgb: 231, 0, 231
/datum/reagent/psilocybin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/psilocybin/on_mob_life(mob/living/M)
M.druggy = max(M.druggy, 30)
if(!data) data = 1
switch(data)
switch(current_cycle)
if(1 to 5)
if(!M.stuttering) M.stuttering = 1
M.Dizzy(5)
@@ -245,9 +220,7 @@
M.Dizzy(20)
M.druggy = max(M.druggy, 40)
if(prob(30)) M.emote(pick("twitch","giggle"))
data++
..()
return
/datum/reagent/sprinkles
@@ -257,15 +230,11 @@
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#FF00FF" // rgb: 255, 0, 255
/datum/reagent/sprinkles/on_mob_life(var/mob/living/M as mob)
/datum/reagent/sprinkles/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden"))
if(!M) M = holder.my_atom
if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Security Pod Pilot", "Detective", "Warden", "Head of Security", "Brig Physician", "Internal Affairs Agent", "Magistrate"))
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
M.nutrition += nutriment_factor
..()
return
..()
@@ -277,12 +246,11 @@
nutriment_factor = 20 * REAGENTS_METABOLISM
color = "#302000" // rgb: 48, 32, 0
/datum/reagent/cornoil/on_mob_life(var/mob/living/M as mob)
/datum/reagent/cornoil/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
..()
return
/datum/reagent/cornoil/reaction_turf(var/turf/simulated/T, var/volume)
/datum/reagent/cornoil/reaction_turf(turf/simulated/T, volume)
if(!istype(T)) return
src = null
if(volume >= 3)
@@ -312,10 +280,9 @@
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#302000" // rgb: 48, 32, 0
/datum/reagent/dry_ramen/on_mob_life(var/mob/living/M as mob)
/datum/reagent/dry_ramen/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
..()
return
/datum/reagent/hot_ramen
@@ -326,12 +293,11 @@
nutriment_factor = 5 * REAGENTS_METABOLISM
color = "#302000" // rgb: 48, 32, 0
/datum/reagent/hot_ramen/on_mob_life(var/mob/living/M as mob)
/datum/reagent/hot_ramen/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
if(M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT))
..()
return
/datum/reagent/hell_ramen
@@ -342,11 +308,10 @@
nutriment_factor = 5 * REAGENTS_METABOLISM
color = "#302000" // rgb: 48, 32, 0
/datum/reagent/hell_ramen/on_mob_life(var/mob/living/M as mob)
/datum/reagent/hell_ramen/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT
..()
return
/datum/reagent/flour
@@ -357,12 +322,11 @@
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#FFFFFF" // rgb: 0, 0, 0
/datum/reagent/flour/on_mob_life(var/mob/living/M as mob)
/datum/reagent/flour/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
..()
return
/datum/reagent/flour/reaction_turf(var/turf/T, var/volume)
/datum/reagent/flour/reaction_turf(turf/T, volume)
src = null
if(!istype(T, /turf/space))
new /obj/effect/decal/cleanable/flour(T)
@@ -376,10 +340,9 @@
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#FFFFFF" // rgb: 0, 0, 0
/datum/reagent/rice/on_mob_life(var/mob/living/M as mob)
/datum/reagent/rice/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
..()
return
/datum/reagent/cherryjelly
@@ -390,11 +353,9 @@
nutriment_factor = 1 * REAGENTS_METABOLISM
color = "#801E28" // rgb: 128, 30, 40
/datum/reagent/cherryjelly/on_mob_life(var/mob/living/M as mob)
/datum/reagent/cherryjelly/on_mob_life(mob/living/M)
M.nutrition += nutriment_factor
..()
return
/datum/reagent/toxin/coffeepowder
name = "Coffee Grounds"
@@ -416,7 +377,6 @@
id = "fertilizer"
description = "A chemical mix good for growing plants with."
reagent_state = LIQUID
// toxpwr = 0.2 //It's not THAT poisonous.
color = "#664330" // rgb: 102, 67, 48
/datum/reagent/toxin/fertilizer/eznutrient
@@ -440,7 +400,7 @@
color = "#FFFFFF" // rgb: 255, 255, 255
overdose_threshold = 200 // Hyperglycaemic shock
/datum/reagent/sugar/on_mob_life(var/mob/living/M as mob)
/datum/reagent/sugar/on_mob_life(mob/living/M)
M.drowsyness = max(0, M.drowsyness-5)
if(current_cycle >= 90)
M.jitteriness += 2
@@ -451,14 +411,13 @@
if(prob(4))
M.reagents.add_reagent("epinephrine", 1.2)
..()
return
/datum/reagent/sugar/overdose_start(var/mob/living/M as mob)
/datum/reagent/sugar/overdose_start(mob/living/M)
to_chat(M, "<span class='danger'>You pass out from hyperglycemic shock!</span>")
M.emote("collapse")
..()
/datum/reagent/sugar/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/sugar/overdose_process(mob/living/M, severity)
M.Paralyse(3 * severity)
M.Weaken(4 * severity)
if(prob(8))
@@ -7,14 +7,12 @@
metabolization_rate = 0.3 // Lasts 1.5 minutes for 15 units
shock_reduction = 200
/datum/reagent/hydrocodone/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/hydrocodone/on_mob_life(mob/living/M)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.traumatic_shock < 100)
H.shock_stage = 0
..()
return
/datum/reagent/sterilizine
name = "Sterilizine"
@@ -24,14 +22,14 @@
color = "#C8A5DC" // rgb: 200, 165, 220
//makes you squeaky clean
/datum/reagent/sterilizine/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
/datum/reagent/sterilizine/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == TOUCH)
M.germ_level -= min(volume*20, M.germ_level)
/datum/reagent/sterilizine/reaction_obj(var/obj/O, var/volume)
/datum/reagent/sterilizine/reaction_obj(obj/O, volume)
O.germ_level -= min(volume*20, O.germ_level)
/datum/reagent/sterilizine/reaction_turf(var/turf/T, var/volume)
/datum/reagent/sterilizine/reaction_turf(turf/T, volume)
T.germ_level -= min(volume*20, T.germ_level)
/datum/reagent/synaptizine
@@ -42,8 +40,7 @@
color = "#FA46FA"
overdose_threshold = 40
/datum/reagent/synaptizine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/synaptizine/on_mob_life(mob/living/M)
M.drowsyness = max(0, M.drowsyness-5)
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
@@ -52,9 +49,8 @@
if(prob(50))
M.adjustBrainLoss(-1.0)
..()
return
/datum/reagent/synaptizine/overdose_process(var/mob/living/M as mob, severity)
/datum/reagent/synaptizine/overdose_process(mob/living/M, severity)
var/effect = ..()
if(severity == 1)
if(effect <= 1)
@@ -82,8 +78,7 @@
reagent_state = LIQUID
color = "#C8A5DC" // rgb: 200, 165, 220
/datum/reagent/mitocholide/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/mitocholide/on_mob_life(mob/living/M)
if(ishuman(M))
var/mob/living/carbon/human/H = M
@@ -93,9 +88,8 @@
if(I.damage > 0)
I.damage = max(I.damage-0.4, 0)
..()
return
/datum/reagent/mitocholide/reaction_obj(var/obj/O, var/volume)
/datum/reagent/mitocholide/reaction_obj(obj/O, volume)
if(istype(O, /obj/item/organ))
var/obj/item/organ/Org = O
Org.rejuvenate()
@@ -107,8 +101,7 @@
reagent_state = LIQUID
color = "#0000C8" // rgb: 200, 165, 220
/datum/reagent/cryoxadone/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/cryoxadone/on_mob_life(mob/living/M)
if(M.bodytemperature < 265)
M.adjustCloneLoss(-4)
M.adjustOxyLoss(-10)
@@ -117,7 +110,6 @@
M.adjustFireLoss(-12)
M.status_flags &= ~DISFIGURED
..()
return
/datum/reagent/rezadone
name = "Rezadone"
@@ -134,7 +126,6 @@
M.adjustFireLoss(-1)
M.status_flags &= ~DISFIGURED
..()
return
/datum/reagent/rezadone/overdose_process(mob/living/M, severity)
M.adjustToxLoss(1)
@@ -98,7 +98,7 @@
reagent_state = SOLID
color = "#1C1300" // rgb: 30, 20, 0
/datum/reagent/carbon/reaction_turf(var/turf/T, var/volume)
/datum/reagent/carbon/reaction_turf(turf/T, volume)
src = null
// Only add one dirt per turf. Was causing people to crash.
if(!istype(T, /turf/space) && !(locate(/obj/effect/decal/cleanable/dirt) in T))
@@ -152,8 +152,6 @@
color = "#C8A5DC" // rgb: 200, 165, 220
/datum/reagent/iron/on_mob_life(mob/living/M)
if(!M)
M = holder.my_atom
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(!H.species.exotic_blood && !(H.species.flags & NO_BLOOD))
@@ -5,12 +5,9 @@
reagent_state = LIQUID
color = "#CF3600" // rgb: 207, 54, 0
/datum/reagent/toxin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/toxin/on_mob_life(mob/living/M)
M.adjustToxLoss(2)
..()
return
/datum/reagent/spider_venom
name = "Spider venom"
@@ -19,12 +16,9 @@
reagent_state = LIQUID
color = "#CF3600" // rgb: 207, 54, 0
/datum/reagent/spider_venom/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(1.5)
..()
return
/datum/reagent/spider_venom/on_mob_life(mob/living/M)
M.adjustToxLoss(1.5)
..()
/datum/reagent/plasticide
name = "Plasticide"
@@ -33,11 +27,9 @@
reagent_state = LIQUID
color = "#CF3600" // rgb: 207, 54, 0
/datum/reagent/plasticide/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/plasticide/on_mob_life(mob/living/M)
M.adjustToxLoss(1.5)
..()
return
/datum/reagent/minttoxin
@@ -47,13 +39,10 @@
reagent_state = LIQUID
color = "#CF3600" // rgb: 207, 54, 0
/datum/reagent/minttoxin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/minttoxin/on_mob_life(mob/living/M)
if(FAT in M.mutations)
M.gib()
..()
return
/datum/reagent/slimejelly
name = "Slime Jelly"
@@ -62,14 +51,13 @@
reagent_state = LIQUID
color = "#801E28" // rgb: 128, 30, 40
/datum/reagent/slimejelly/on_mob_life(var/mob/living/M as mob)
/datum/reagent/slimejelly/on_mob_life(mob/living/M)
if(prob(10))
to_chat(M, "\red Your insides are burning!")
M.adjustToxLoss(rand(20,60)*REM)
else if(prob(40))
M.adjustBruteLoss(-5*REM)
..()
return
/datum/reagent/slimetoxin
name = "Mutation Toxin"
@@ -78,8 +66,7 @@
reagent_state = LIQUID
color = "#13BC5E" // rgb: 19, 188, 94
/datum/reagent/slimetoxin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/slimetoxin/on_mob_life(mob/living/M)
if(ishuman(M))
var/mob/living/carbon/human/human = M
if(human.species.name != "Shadow")
@@ -89,7 +76,6 @@
to_chat(M, "Aside from your new traits, you are mentally unchanged and retain your prior obligations.")
human.set_species("Shadow")
..()
return
/datum/reagent/aslimetoxin
name = "Advanced Mutation Toxin"
@@ -98,7 +84,7 @@
reagent_state = LIQUID
color = "#13BC5E" // rgb: 19, 188, 94
/datum/reagent/aslimetoxin/reaction_mob(mob/M, method=TOUCH, reac_volume)
/datum/reagent/aslimetoxin/reaction_mob(mob/M, method=TOUCH, volume)
if(method != TOUCH)
M.ForceContractDisease(new /datum/disease/transformation/slime(0))
@@ -112,13 +98,10 @@
metabolization_rate = 0.2
penetrates_skin = 1
/datum/reagent/mercury/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/mercury/on_mob_life(mob/living/M)
if(prob(70))
M.adjustBrainLoss(1)
..()
return
/datum/reagent/chlorine
name = "Chlorine"
@@ -129,11 +112,9 @@
penetrates_skin = 1
process_flags = ORGANIC | SYNTHETIC
/datum/reagent/chlorine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/chlorine/on_mob_life(mob/living/M)
M.adjustFireLoss(1)
..()
return
/datum/reagent/fluorine
name = "Fluorine"
@@ -144,13 +125,10 @@
penetrates_skin = 1
process_flags = ORGANIC | SYNTHETIC
/datum/reagent/fluorine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/fluorine/on_mob_life(mob/living/M)
M.adjustFireLoss(1)
M.adjustToxLoss(1*REM)
..()
return
/datum/reagent/radium
name = "Radium"
@@ -161,13 +139,12 @@
metabolization_rate = 0.4
penetrates_skin = 1
/datum/reagent/radium/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/radium/on_mob_life(mob/living/M)
if(M.radiation < 80)
M.apply_effect(4, IRRADIATE, negate_armor = 1)
..()
/datum/reagent/radium/reaction_turf(var/turf/T, var/volume)
/datum/reagent/radium/reaction_turf(turf/T, volume)
src = null
if(volume >= 3)
if(!istype(T, /turf/space))
@@ -183,7 +160,7 @@
color = "#04DF27"
metabolization_rate = 0.3
/datum/reagent/mutagen/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
/datum/reagent/mutagen/reaction_mob(mob/M, method=TOUCH, volume)
if(!..()) return
if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
src = null
@@ -191,16 +168,13 @@
randmutb(M)
domutcheck(M, null)
M.UpdateAppearance()
return
/datum/reagent/mutagen/on_mob_life(var/mob/living/M as mob)
/datum/reagent/mutagen/on_mob_life(mob/living/M)
if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
if(!M) M = holder.my_atom
M.apply_effect(2*REM, IRRADIATE, negate_armor = 1)
if(prob(4))
randmutb(M)
..()
return
/datum/reagent/uranium
@@ -210,13 +184,11 @@
reagent_state = SOLID
color = "#B8B8C0" // rgb: 184, 184, 192
/datum/reagent/uranium/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/uranium/on_mob_life(mob/living/M)
M.apply_effect(2, IRRADIATE, negate_armor = 1)
..()
return
/datum/reagent/uranium/reaction_turf(var/turf/T, var/volume)
/datum/reagent/uranium/reaction_turf(turf/T, volume)
src = null
if(volume >= 3)
if(!istype(T, /turf/space))
@@ -231,13 +203,9 @@
color = "#52685D"
metabolization_rate = 0.2
/datum/reagent/lexorin/on_mob_life(var/mob/living/M as mob)
if(M.stat == 2.0)
return
if(!M) M = holder.my_atom
/datum/reagent/lexorin/on_mob_life(mob/living/M)
M.adjustToxLoss(1)
..()
return
/datum/reagent/sacid
@@ -248,13 +216,11 @@
color = "#00D72B"
process_flags = ORGANIC | SYNTHETIC
/datum/reagent/sacid/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/sacid/on_mob_life(mob/living/M)
M.adjustFireLoss(1)
..()
return
/datum/reagent/sacid/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
/datum/reagent/sacid/reaction_mob(mob/living/M, method=TOUCH, volume)
if(!istype(M, /mob/living))
return
if(method == TOUCH)
@@ -307,7 +273,7 @@
else
M.take_organ_damage(0,20)
/datum/reagent/sacid/reaction_obj(var/obj/O, var/volume)
/datum/reagent/sacid/reaction_obj(obj/O, volume)
if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(40))
if(!O.unacidable)
var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
@@ -322,14 +288,15 @@
id = "hell_water"
description = "YOUR FLESH! IT BURNS!"
process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL.
metabolization_rate = 1
/datum/reagent/hellwater/on_mob_life(var/mob/living/M as mob)
M.fire_stacks = min(5,M.fire_stacks + 3)
/datum/reagent/hellwater/on_mob_life(mob/living/M)
M.fire_stacks = min(5, M.fire_stacks + 3)
M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
M.adjustToxLoss(1)
M.adjustFireLoss(1) //Hence the other damages... ain't I a bastard?
M.adjustBrainLoss(5)
holder.remove_reagent(src.id, 1)
..()
/datum/reagent/carpotoxin
@@ -339,12 +306,9 @@
reagent_state = LIQUID
color = "#003333" // rgb: 0, 51, 51
/datum/reagent/carpotoxin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/carpotoxin/on_mob_life(mob/living/M)
M.adjustToxLoss(2*REM)
..()
return
/datum/reagent/staminatoxin
name = "Tirizene"
@@ -354,7 +318,7 @@
color = "#6E2828"
data = 13
/datum/reagent/staminatoxin/on_mob_life(var/mob/living/M)
/datum/reagent/staminatoxin/on_mob_life(mob/living/M)
M.adjustStaminaLoss(REM * data)
data = max(data - 1, 3)
..()
@@ -366,13 +330,11 @@
description = "A toxic spore cloud which blocks vision when ingested."
color = "#9ACD32"
/datum/reagent/spores/on_mob_life(var/mob/living/M as mob)
/datum/reagent/spores/on_mob_life(mob/living/M)
M.adjustToxLoss(1)
M.damageoverlaytemp = 60
M.eye_blurry = max(M.eye_blurry, 3)
..()
return
/datum/reagent/beer2 //disguised as normal beer for use by emagged brobots
name = "Beer"
@@ -381,18 +343,14 @@
color = "#664300" // rgb: 102, 67, 0
metabolization_rate = 1.5 * REAGENTS_METABOLISM
/datum/reagent/beer2/on_mob_life(var/mob/living/M as mob)
if(!data)
data = 1
switch(data)
/datum/reagent/beer2/on_mob_life(mob/living/M)
switch(current_cycle)
if(1 to 50)
M.sleeping += 1
M.AdjustSleeping(1)
if(51 to INFINITY)
M.sleeping += 1
M.adjustToxLoss((data - 50)*REM)
data++
M.AdjustSleeping(1)
M.adjustToxLoss((current_cycle - 50)*REM)
..()
return
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
/datum/reagent/condensedcapsaicin
@@ -402,7 +360,7 @@
reagent_state = LIQUID
color = "#B31008" // rgb: 179, 16, 8
/datum/reagent/condensedcapsaicin/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
/datum/reagent/condensedcapsaicin/reaction_mob(mob/living/M, method=TOUCH, volume)
if(!istype(M, /mob/living))
return
if(method == TOUCH)
@@ -459,9 +417,7 @@
victim.Weaken(5)
victim.drop_item()
/datum/reagent/condensedcapsaicin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/condensedcapsaicin/on_mob_life(mob/living/M)
if(prob(5))
M.visible_message("<span class='warning'>[M] [pick("dry heaves!","coughs!","splutters!")]</span>")
..()
return
..()
@@ -16,7 +16,7 @@
var/cooling_temperature = 2
process_flags = ORGANIC | SYNTHETIC
/datum/reagent/water/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
/datum/reagent/water/reaction_mob(mob/living/M, method=TOUCH, volume)
if(!istype(M, /mob/living))
return
@@ -27,8 +27,9 @@
M.ExtinguishMob()
return
/datum/reagent/water/reaction_turf(var/turf/simulated/T, var/volume)
if(!istype(T)) return
/datum/reagent/water/reaction_turf(turf/simulated/T, volume)
if(!istype(T))
return
src = null
if(volume >= 3)
T.MakeSlippery()
@@ -43,9 +44,8 @@
lowertemp.react()
T.assume_air(lowertemp)
qdel(hotspot)
return
/datum/reagent/water/reaction_obj(var/obj/O, var/volume)
/datum/reagent/water/reaction_obj(obj/O, volume)
src = null
var/turf/T = get_turf(O)
var/hotspot = (locate(/obj/effect/hotspot) in T)
@@ -73,7 +73,7 @@
reagent_state = LIQUID
color = "#1BB1AB"
/datum/reagent/lube/reaction_turf(var/turf/simulated/T, var/volume)
/datum/reagent/lube/reaction_turf(turf/simulated/T, volume)
if(!istype(T)) return
src = null
if(volume >= 1)
@@ -87,7 +87,7 @@
reagent_state = LIQUID
color = "#61C2C2"
/datum/reagent/space_cleaner/reaction_obj(var/obj/O, var/volume)
/datum/reagent/space_cleaner/reaction_obj(obj/O, volume)
if(O && !istype(O, /atom/movable/lighting_overlay))
O.color = initial(O.color)
if(istype(O,/obj/effect/decal/cleanable))
@@ -96,7 +96,7 @@
if(O)
O.clean_blood()
/datum/reagent/space_cleaner/reaction_turf(var/turf/T, var/volume)
/datum/reagent/space_cleaner/reaction_turf(turf/T, volume)
if(volume >= 1)
if(T)
T.color = initial(T.color)
@@ -110,7 +110,7 @@
var/turf/simulated/S = T
S.dirt = 0
/datum/reagent/space_cleaner/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
/datum/reagent/space_cleaner/reaction_mob(mob/M, method=TOUCH, volume)
if(iscarbon(M))
var/mob/living/carbon/C = M
if(istype(M,/mob/living/carbon/human))
@@ -151,7 +151,7 @@
reagent_state = LIQUID
color = "#C80000" // rgb: 200, 0, 0
/datum/reagent/blood/reaction_mob(mob/M, method=TOUCH, reac_volume)
/datum/reagent/blood/reaction_mob(mob/M, method=TOUCH, volume)
if(data && data["viruses"])
for(var/datum/disease/D in data["viruses"])
@@ -194,15 +194,15 @@
color = mix_data["blood_colour"]
return 1
/datum/reagent/blood/on_update(var/atom/A)
/datum/reagent/blood/on_update(atom/A)
if(data["blood_colour"])
color = data["blood_colour"]
return ..()
/datum/reagent/blood/reaction_turf(turf/simulated/T, reac_volume)//splash the blood all over the place
/datum/reagent/blood/reaction_turf(turf/simulated/T, volume)//splash the blood all over the place
if(!istype(T))
return
if(reac_volume < 3)
if(volume < 3)
return
if(!data["donor"] || istype(data["donor"], /mob/living/carbon/human))
var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T //find some blood here
@@ -232,7 +232,7 @@
id = "vaccine"
color = "#C81040" // rgb: 200, 16, 64
/datum/reagent/vaccine/reaction_mob(mob/M, method=TOUCH, reac_volume)
/datum/reagent/vaccine/reaction_mob(mob/M, method=TOUCH, volume)
if(islist(data) && (method == INGEST))
for(var/datum/disease/D in M.viruses)
if(D.GetDiseaseID() in data)
@@ -250,21 +250,19 @@
reagent_state = LIQUID
color = "#757547"
/datum/reagent/fishwater/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
/datum/reagent/fishwater/reaction_mob(mob/M, method=TOUCH, volume)
if(!istype(M, /mob/living))
return
if(method == INGEST)
to_chat(M, "Oh god, why did you drink that?")
/datum/reagent/fishwater/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
/datum/reagent/fishwater/on_mob_life(mob/living/M)
if(prob(30)) // Nasty, you drank this stuff? 30% chance of the fakevomit (non-stunning version)
if(prob(50)) // 50/50 chance of green vomit vs normal vomit
M.fakevomit(1)
else
M.fakevomit(0)
..()
return
/datum/reagent/fishwater/toiletwater
name = "Toilet Water"
@@ -273,7 +271,7 @@
reagent_state = LIQUID
color = "#757547"
/datum/reagent/fishwater/toiletwater/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //For shennanigans
/datum/reagent/fishwater/toiletwater/reaction_mob(mob/M, method=TOUCH, volume) //For shennanigans
return
/datum/reagent/holywater
@@ -284,18 +282,14 @@
color = "#0064C8" // rgb: 0, 100, 200
process_flags = ORGANIC | SYNTHETIC
/datum/reagent/holywater/on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
/datum/reagent/holywater/on_mob_life(mob/living/M)
M.jitteriness = max(M.jitteriness-5,0)
if(data >= 30) // 12 units, 60 seconds @ metabolism 0.4 units & tick rate 2.0 sec
if(!M.stuttering) M.stuttering = 1
if(current_cycle >= 30) // 12 units, 60 seconds @ metabolism 0.4 units & tick rate 2.0 sec
M.stuttering += 4
M.Dizzy(5)
if(iscultist(M) && prob(5))
M.say(pick("Av'te Nar'sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","Egkau'haom'nai en Chaous","Ho Diak'nos tou Ap'iron","R'ge Na'sie","Diabo us Vo'iscum","Si gn'um Co'nu"))
if(data >= 75 && prob(33)) // 30 units, 150 seconds
if(!M.confused) M.confused = 1
if(current_cycle >= 75 && prob(33)) // 30 units, 150 seconds
M.confused += 3
if(isvampirethrall(M))
ticker.mode.remove_vampire_mind(M.mind)
@@ -312,7 +306,7 @@
M.confused = 0
return
if(ishuman(M) && M.mind && M.mind.vampire && !M.mind.vampire.get_ability(/datum/vampire_passive/full) && prob(80))
switch(data)
switch(current_cycle)
if(1 to 4)
to_chat(M, "<span class = 'warning'>Something sizzles in your veins!</span>")
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
@@ -331,7 +325,7 @@
..()
/datum/reagent/holywater/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
/datum/reagent/holywater/reaction_mob(mob/living/M, method=TOUCH, volume)
// Vampires have their powers weakened by holy water applied to the skin.
if(ishuman(M) && M.mind && M.mind.vampire && !M.mind.vampire.get_ability(/datum/vampire_passive/full))
var/mob/living/carbon/human/H=M
@@ -347,7 +341,7 @@
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
/datum/reagent/holywater/reaction_turf(var/turf/simulated/T, var/volume)
/datum/reagent/holywater/reaction_turf(turf/simulated/T, volume)
..()
if(!istype(T)) return
if(volume>=10)
@@ -363,7 +357,7 @@
description = "You don't even want to think about what's in here."
reagent_state = LIQUID
/datum/reagent/liquidgibs/reaction_turf(var/turf/T, var/volume) //yes i took it from synthflesh...
/datum/reagent/liquidgibs/reaction_turf(turf/T, volume) //yes i took it from synthflesh...
src = null
if(volume >= 5)
new /obj/effect/decal/cleanable/blood/gibs/cleangibs(T)
@@ -386,11 +380,11 @@
reagent_state = LIQUID
color = "#A70FFF"
/datum/reagent/drying_agent/reaction_turf(turf/simulated/T, reac_volume)
/datum/reagent/drying_agent/reaction_turf(turf/simulated/T, volume)
if(istype(T) && T.wet)
T.MakeDry(TURF_WET_WATER)
/datum/reagent/drying_agent/reaction_obj(obj/O, reac_volume)
/datum/reagent/drying_agent/reaction_obj(obj/O, volume)
if(istype(O, /obj/item/clothing/shoes/galoshes))
var/t_loc = get_turf(O)
qdel(O)
+2 -2
View File
@@ -56,7 +56,7 @@
reagents.handle_reactions()
..()
/obj/item/weapon/reagent_containers/attack_self(mob/user as mob)
/obj/item/weapon/reagent_containers/attack_self(mob/user)
return
// this prevented pills, food, and other things from being picked up by bags.
@@ -69,7 +69,7 @@
/obj/item/weapon/reagent_containers/afterattack(obj/target, mob/user , flag)
return
/obj/item/weapon/reagent_containers/proc/reagentlist(var/obj/item/weapon/reagent_containers/snack) //Attack logs for regents in pills
/obj/item/weapon/reagent_containers/proc/reagentlist(obj/item/weapon/reagent_containers/snack) //Attack logs for regents in pills
var/data
if(snack && snack.reagents && snack.reagents.reagent_list && snack.reagents.reagent_list.len) //find a reagent list if there is and check if it has entries
for(var/datum/reagent/R in snack.reagents.reagent_list) //no reagents will be left behind
@@ -7,22 +7,25 @@
var/blood_type = null
New()
..()
if(blood_type != null)
name = "BloodPack [blood_type]"
reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
update_icon()
on_reagent_change()
/obj/item/weapon/reagent_containers/blood/New()
..()
if(blood_type != null)
name = "BloodPack [blood_type]"
reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
update_icon()
/obj/item/weapon/reagent_containers/blood/on_reagent_change()
update_icon()
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9) icon_state = "empty"
if(10 to 50) icon_state = "half"
if(51 to INFINITY) icon_state = "full"
/obj/item/weapon/reagent_containers/blood/update_icon()
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9)
icon_state = "empty"
if(10 to 50)
icon_state = "half"
if(51 to INFINITY)
icon_state = "full"
/obj/item/weapon/reagent_containers/blood/random/New()
blood_type = pick("A+", "A-", "B+", "B-", "O+", "O-")
@@ -60,7 +60,7 @@
return 1
// Use this to add more chemicals for the borghypo to produce.
/obj/item/weapon/reagent_containers/borghypo/proc/add_reagent(var/reagent)
/obj/item/weapon/reagent_containers/borghypo/proc/add_reagent(reagent)
reagent_ids |= reagent
var/datum/reagents/RG = new(30)
RG.my_atom = src
@@ -69,7 +69,7 @@
var/datum/reagents/R = reagent_list[reagent_list.len]
R.add_reagent(reagent, 30)
/obj/item/weapon/reagent_containers/borghypo/attack(mob/living/M as mob, mob/user as mob)
/obj/item/weapon/reagent_containers/borghypo/attack(mob/living/M, mob/user)
var/datum/reagents/R = reagent_list[mode]
if(!R.total_volume)
to_chat(user, "<span class='warning'>The injector is empty.</span>")
@@ -94,7 +94,7 @@
to_chat(user, "<span class='notice'>[trans] units injected. [R.total_volume] units remaining.</span>")
return
/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user as mob)
/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user)
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) //Change the mode
mode++
if(mode > reagent_list.len)
@@ -11,111 +11,110 @@
volume = 5
var/filled = 0
afterattack(obj/target, mob/user , flag)
if(!target.reagents) return
if(filled)
if(target.reagents.total_volume >= target.reagents.maximum_volume)
to_chat(user, "\red [target] is full.")
return
if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/cigarette)) //You can inject humans and food but you cant remove the shit.
to_chat(user, "\red You cannot directly fill this object.")
return
var/trans = 0
if(ismob(target))
if(istype(target , /mob/living/carbon/human))
var/mob/living/carbon/human/victim = target
var/obj/item/safe_thing = null
if( victim.wear_mask )
if( victim.wear_mask.flags & MASKCOVERSEYES )
safe_thing = victim.wear_mask
if( victim.head )
if( victim.head.flags & MASKCOVERSEYES )
safe_thing = victim.head
if(victim.glasses)
if( !safe_thing )
safe_thing = victim.glasses
if(safe_thing)
if(!safe_thing.reagents)
safe_thing.create_reagents(100)
trans = src.reagents.trans_to(safe_thing, amount_per_transfer_from_this)
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red <B>[] tries to squirt something into []'s eyes, but fails!</B>", user, target), 1)
spawn(5)
src.reagents.reaction(safe_thing, TOUCH)
to_chat(user, "\blue You transfer [trans] units of the solution.")
if(src.reagents.total_volume<=0)
filled = 0
icon_state = "[initial(icon_state)]"
return
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red <B>[] squirts something into []'s eyes!</B>", user, target), 1)
src.reagents.reaction(target, TOUCH)
var/mob/living/M = target
var/list/injected = list()
for(var/datum/reagent/R in src.reagents.reagent_list)
injected += R.name
var/contained = english_list(injected)
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been squirted with [src.name] by [key_name(user)]. Reagents: [contained]</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to squirt [key_name(M)]. Reagents: [contained]</font>")
if(M.ckey)
msg_admin_attack("[key_name_admin(user)] squirted [key_name_admin(M)] with [src.name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)])")
if(!iscarbon(user))
M.LAssailant = null
else
M.LAssailant = user
// /vg/: Logging transfers of bad things
if(isobj(target))
if(target.reagents_to_log.len)
var/list/badshit=list()
for(var/bad_reagent in target.reagents_to_log)
if(reagents.has_reagent(bad_reagent))
badshit += reagents_to_log[bad_reagent]
if(badshit.len)
var/hl = "<span class='danger'>([english_list(badshit)])</span>"
message_admins("[key_name_admin(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].[hl]")
log_game("[key_name(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].")
trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
to_chat(user, "\blue You transfer [trans] units of the solution.")
if(src.reagents.total_volume<=0)
filled = 0
icon_state = "[initial(icon_state)]"
else
if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
to_chat(user, "\red You cannot directly remove reagents from [target].")
return
if(!target.reagents.total_volume)
to_chat(user, "\red [target] is empty.")
return
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
to_chat(user, "\blue You fill the [src] with [trans] units of the solution.")
filled = 1
icon_state = "[initial(icon_state)][filled]"
/obj/item/weapon/reagent_containers/dropper/afterattack(obj/target, mob/user , flag)
if(!target.reagents)
return
if(filled)
if(target.reagents.total_volume >= target.reagents.maximum_volume)
to_chat(user, "\red [target] is full.")
return
if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/cigarette)) //You can inject humans and food but you cant remove the shit.
to_chat(user, "\red You cannot directly fill this object.")
return
var/trans = 0
if(ismob(target))
if(istype(target , /mob/living/carbon/human))
var/mob/living/carbon/human/victim = target
var/obj/item/safe_thing = null
if( victim.wear_mask )
if( victim.wear_mask.flags & MASKCOVERSEYES )
safe_thing = victim.wear_mask
if( victim.head )
if( victim.head.flags & MASKCOVERSEYES )
safe_thing = victim.head
if(victim.glasses)
if( !safe_thing )
safe_thing = victim.glasses
if(safe_thing)
if(!safe_thing.reagents)
safe_thing.create_reagents(100)
trans = src.reagents.trans_to(safe_thing, amount_per_transfer_from_this)
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red <B>[] tries to squirt something into []'s eyes, but fails!</B>", user, target), 1)
spawn(5)
src.reagents.reaction(safe_thing, TOUCH)
to_chat(user, "\blue You transfer [trans] units of the solution.")
if(src.reagents.total_volume<=0)
filled = 0
icon_state = "[initial(icon_state)]"
return
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red <B>[] squirts something into []'s eyes!</B>", user, target), 1)
src.reagents.reaction(target, TOUCH)
var/mob/living/M = target
var/list/injected = list()
for(var/datum/reagent/R in src.reagents.reagent_list)
injected += R.name
var/contained = english_list(injected)
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been squirted with [src.name] by [key_name(user)]. Reagents: [contained]</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to squirt [key_name(M)]. Reagents: [contained]</font>")
if(M.ckey)
msg_admin_attack("[key_name_admin(user)] squirted [key_name_admin(M)] with [src.name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)])")
if(!iscarbon(user))
M.LAssailant = null
else
M.LAssailant = user
// /vg/: Logging transfers of bad things
if(isobj(target))
if(target.reagents_to_log.len)
var/list/badshit=list()
for(var/bad_reagent in target.reagents_to_log)
if(reagents.has_reagent(bad_reagent))
badshit += reagents_to_log[bad_reagent]
if(badshit.len)
var/hl = "<span class='danger'>([english_list(badshit)])</span>"
message_admins("[key_name_admin(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].[hl]")
log_game("[key_name(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].")
trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
to_chat(user, "\blue You transfer [trans] units of the solution.")
if(src.reagents.total_volume<=0)
filled = 0
icon_state = "[initial(icon_state)]"
else
if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
to_chat(user, "\red You cannot directly remove reagents from [target].")
return
if(!target.reagents.total_volume)
to_chat(user, "\red [target] is empty.")
return
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
to_chat(user, "\blue You fill the [src] with [trans] units of the solution.")
filled = 1
icon_state = "[initial(icon_state)][filled]"
/obj/item/weapon/reagent_containers/dropper/cyborg
name = "Industrial Dropper"
desc = "A larger dropper. Transfers 10 units."
@@ -12,80 +12,81 @@
var/label_text = ""
New()
..()
src.pixel_x = rand(-10.0, 10) //Randomizes postion
src.pixel_y = rand(-10.0, 10)
base_name = name
/obj/item/weapon/reagent_containers/drugs/New()
..()
src.pixel_x = rand(-10.0, 10) //Randomizes postion
src.pixel_y = rand(-10.0, 10)
base_name = name
afterattack(obj/target, mob/user, proximity)
if(!proximity) return
/obj/item/weapon/reagent_containers/drugs/afterattack(obj/target, mob/user, proximity)
if(!proximity)
return
if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
if(!target.reagents.total_volume && target.reagents)
to_chat(user, "\red [target] is empty.")
return
if(reagents.total_volume >= reagents.maximum_volume)
to_chat(user, "\red [src] is full.")
return
for(var/datum/reagent/A in target.reagents.reagent_list)
if(A.reagent_state != 1)
to_chat(user, "\red You can only put powders in [src].")
return
var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
to_chat(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)
to_chat(user, "\red [src] is empty.")
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
to_chat(user, "\red [target] is full.")
return
// /vg/: Logging transfers of bad things
if(target.reagents_to_log.len)
var/list/badshit=list()
for(var/bad_reagent in target.reagents_to_log)
if(reagents.has_reagent(bad_reagent))
badshit += reagents_to_log[bad_reagent]
if(badshit.len)
var/hl = "<span class='danger'>([english_list(badshit)])</span>"
message_admins("[key_name_admin(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].[hl]")
log_game("[key_name(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].")
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
to_chat(user, "\blue You transfer [trans] units of the solution to [target].")
//Safety for dumping stuff into a ninja suit. It handles everything through attackby() and this is unnecessary.
/*else if(istype(target, /obj/machinery/bunsen_burner))
if(!target.reagents.total_volume && target.reagents)
to_chat(user, "\red [target] is empty.")
return
else if(istype(target, /obj/machinery/radiocarbon_spectrometer))
return*/
if(reagents.total_volume >= reagents.maximum_volume)
to_chat(user, "\red [src] is full.")
return
for(var/datum/reagent/A in target.reagents.reagent_list)
if(A.reagent_state != 1)
to_chat(user, "\red You can only put powders in [src].")
return
var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
to_chat(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)
to_chat(user, "\red [src] is empty.")
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
to_chat(user, "\red [target] is full.")
return
// /vg/: Logging transfers of bad things
if(target.reagents_to_log.len)
var/list/badshit=list()
for(var/bad_reagent in target.reagents_to_log)
if(reagents.has_reagent(bad_reagent))
badshit += reagents_to_log[bad_reagent]
if(badshit.len)
var/hl = "<span class='danger'>([english_list(badshit)])</span>"
message_admins("[key_name_admin(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].[hl]")
log_game("[key_name(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].")
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
to_chat(user, "\blue You transfer [trans] units of the solution to [target].")
//Safety for dumping stuff into a ninja suit. It handles everything through attackby() and this is unnecessary.
/*else if(istype(target, /obj/machinery/bunsen_burner))
return
else if(istype(target, /obj/machinery/radiocarbon_spectrometer))
return*/
attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen))
var/tmp_label = sanitize(input(user, "Enter a label for [src.name]","Label",src.label_text))
if(length(tmp_label) > 10)
to_chat(user, "\red The label can be at most 10 characters long.")
else
to_chat(user, "\blue You set the label to \"[tmp_label]\".")
src.label_text = tmp_label
src.update_name_label()
proc/update_name_label()
if(src.label_text == "")
src.name = src.base_name
/obj/item/weapon/reagent_containers/drugs/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen))
var/tmp_label = sanitize(input(user, "Enter a label for [src.name]","Label",src.label_text))
if(length(tmp_label) > 10)
to_chat(user, "\red The label can be at most 10 characters long.")
else
src.name = "[src.base_name] ([src.label_text])"
to_chat(user, "\blue You set the label to \"[tmp_label]\".")
src.label_text = tmp_label
src.update_name_label()
/obj/item/weapon/reagent_containers/drugs/proc/update_name_label()
if(src.label_text == "")
src.name = src.base_name
else
src.name = "[src.base_name] ([src.label_text])"
/obj/item/weapon/reagent_containers/drugs/baggie
name = "baggie"
@@ -94,39 +95,42 @@
icon_state = "baggie"
item_state = "beaker"
on_reagent_change()
update_icon()
pickup(mob/user)
..()
update_icon()
dropped(mob/user)
..()
update_icon()
attack_hand()
..()
update_icon()
/obj/item/weapon/reagent_containers/drugs/on_reagent_change()
update_icon()
overlays.Cut()
if(reagents.total_volume)
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]2")
/obj/item/weapon/reagent_containers/drugs/pickup(mob/user)
..()
update_icon()
switch(reagents.total_volume)
if(0 to 2) filling.icon_state = "[icon_state]2"
if(3 to 4) filling.icon_state = "[icon_state]4"
if(5 to 6) filling.icon_state = "[icon_state]6"
if(7 to 8) filling.icon_state = "[icon_state]8"
if(9 to 10) filling.icon_state = "[icon_state]10"
/obj/item/weapon/reagent_containers/drugs/dropped(mob/user)
..()
update_icon()
/obj/item/weapon/reagent_containers/drugs/attack_hand()
..()
update_icon()
/obj/item/weapon/reagent_containers/drugs/update_icon()
overlays.Cut()
if(reagents.total_volume)
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]2")
switch(reagents.total_volume)
if(0 to 2)
filling.icon_state = "[icon_state]2"
if(3 to 4)
filling.icon_state = "[icon_state]4"
if(5 to 6)
filling.icon_state = "[icon_state]6"
if(7 to 8)
filling.icon_state = "[icon_state]8"
if(9 to 10)
filling.icon_state = "[icon_state]10"
filling.icon += mix_color_from_reagents(reagents.reagent_list)
overlays += filling
filling.icon += mix_color_from_reagents(reagents.reagent_list)
overlays += filling
/obj/item/weapon/reagent_containers/drugs/baggie/meth
New()
..()
reagents.add_reagent("methamphetamine", 10)
list_reagents = list("methamphetamine" = 10)
@@ -13,6 +13,6 @@
var/instant_application = 0 //if we want to bypass the forcedfeed delay
/obj/item/weapon/reagent_containers/food/New()
..()
src.pixel_x = rand(-10.0, 10) //Randomizes postion
src.pixel_y = rand(-10.0, 10)
..()
pixel_x = rand(-10, 10) //Randomizes postion
pixel_y = rand(-10, 10)
@@ -12,190 +12,158 @@
flags = OPENCONTAINER
volume = 30
New()
..()
if(!icon_state)
icon_state = "bottle[rand(1,20)]"
/obj/item/weapon/reagent_containers/glass/bottle/New()
..()
if(!icon_state)
icon_state = "bottle[rand(1,20)]"
//Copypasta from /obj/item/weapon/reagent_containers/glass/beaker
on_reagent_change()
update_icon()
pickup(mob/user)
..()
update_icon()
dropped(mob/user)
..()
update_icon()
attack_hand()
..()
update_icon()
/obj/item/weapon/reagent_containers/glass/bottle/on_reagent_change()
update_icon()
overlays.Cut()
if(reagents.total_volume)
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
/obj/item/weapon/reagent_containers/glass/bottle/pickup(mob/user)
..()
update_icon()
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 24) filling.icon_state = "[icon_state]10"
if(25 to 49) filling.icon_state = "[icon_state]25"
if(50 to 74) filling.icon_state = "[icon_state]50"
if(75 to 90) filling.icon_state = "[icon_state]75"
if(91 to INFINITY) filling.icon_state = "[icon_state]100"
/obj/item/weapon/reagent_containers/glass/bottle/dropped(mob/user)
..()
update_icon()
filling.icon += mix_color_from_reagents(reagents.reagent_list)
overlays += filling
/obj/item/weapon/reagent_containers/glass/bottle/attack_hand()
..()
update_icon()
if(!is_open_container())
var/image/lid = image(icon, src, "lid_bottle")
overlays += lid
/obj/item/weapon/reagent_containers/glass/bottle/update_icon()
overlays.Cut()
if(reagents.total_volume)
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 24)
filling.icon_state = "[icon_state]10"
if(25 to 49)
filling.icon_state = "[icon_state]25"
if(50 to 74)
filling.icon_state = "[icon_state]50"
if(75 to 90)
filling.icon_state = "[icon_state]75"
if(91 to INFINITY)
filling.icon_state = "[icon_state]100"
filling.icon += mix_color_from_reagents(reagents.reagent_list)
overlays += filling
if(!is_open_container())
var/image/lid = image(icon, src, "lid_bottle")
overlays += lid
/obj/item/weapon/reagent_containers/glass/bottle/toxin
name = "toxin bottle"
desc = "A small bottle of toxins. Do not drink, it is poisonous."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle12"
New()
..()
reagents.add_reagent("toxin", 30)
list_reagents = list("toxin" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/cyanide
name = "cyanide bottle"
desc = "A small bottle of cyanide. Bitter almonds?"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle12"
New()
..()
reagents.add_reagent("cyanide", 30)
list_reagents = list("cyanide" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/mutagen
name = "unstable mutagen bottle"
desc = "A small bottle of unstable mutagen. Randomly changes the DNA structure of whoever comes in contact."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle20"
New()
..()
reagents.add_reagent("mutagen", 30)
list_reagents = list("mutagen" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/ammonia
name = "ammonia bottle"
desc = "A small bottle."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle20"
New()
..()
reagents.add_reagent("ammonia", 30)
list_reagents = list("ammonia" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/diethylamine
name = "diethylamine bottle"
desc = "A small bottle."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle17"
New()
..()
reagents.add_reagent("diethylamine", 30)
list_reagents = list("diethylamine" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/facid
name = "Fluorosulfuric Acid Bottle"
desc = "A small bottle. Contains a small amount of Fluorosulfuric Acid"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle17"
New()
..()
reagents.add_reagent("facid", 30)
list_reagents = list("facid" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine
name = "Adminordrazine Bottle"
desc = "A small bottle. Contains the liquid essence of the gods."
icon = 'icons/obj/drinks.dmi'
icon_state = "holyflask"
New()
..()
reagents.add_reagent("adminordrazine", 30)
list_reagents = list("adminordrazine" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/capsaicin
name = "Capsaicin Bottle"
desc = "A small bottle. Contains hot sauce."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle3"
New()
..()
reagents.add_reagent("capsaicin", 30)
list_reagents = list("capsaicin" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/frostoil
name = "Frost Oil Bottle"
desc = "A small bottle. Contains cold sauce."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle17"
New()
..()
reagents.add_reagent("frostoil", 30)
list_reagents = list("frostoil" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/morphine
name = "Morphine Bottle"
desc = "A small bottle. Contains morphine."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle17"
New()
..()
reagents.add_reagent("morphine", 30)
list_reagents = list("morphine" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/ether
name = "Ether Bottle"
desc = "A small bottle. Contains ether."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle17"
New()
..()
reagents.add_reagent("ether", 30)
list_reagents = list("ether" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/charcoal
name = "Charcoal Bottle"
desc = "A small bottle. Contains charcoal."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle17"
New()
..()
reagents.add_reagent("charcoal", 30)
list_reagents = list("charcoal" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/epinephrine
name = "Epinephrine Bottle"
desc = "A small bottle. Contains epinephrine."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle17"
New()
..()
reagents.add_reagent("epinephrine", 30)
list_reagents = list("epinephrine" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/pancuronium
name = "Pancuronium Bottle"
desc = "A small bottle of pancuronium."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle14"
New()
..()
reagents.add_reagent("pancuronium", 30)
list_reagents = list("pancuronium" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/sulfonal
name = "Sulfonal Bottle"
desc = "A small bottle of Sulfonal."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle19"
New()
..()
reagents.add_reagent("sulfonal", 30)
list_reagents = list("sulfonal" = 30)
//Reagent bottles
@@ -209,86 +177,64 @@
name = "Oil Bottle"
desc = "A reagent bottle. Contains oil."
icon_state = "rbottle1"
New()
..()
reagents.add_reagent("oil", 50)
list_reagents = list("oil" = 50)
/obj/item/weapon/reagent_containers/glass/bottle/reagent/phenol
name = "Phenol Bottle"
desc = "A reagent bottle. Contains phenol."
icon_state = "rbottle2"
New()
..()
reagents.add_reagent("phenol", 50)
list_reagents = list("phenol" = 50)
/obj/item/weapon/reagent_containers/glass/bottle/reagent/acetone
name = "Acetone Bottle"
desc = "A reagent bottle. Contains acetone."
icon_state = "rbottle3"
New()
..()
reagents.add_reagent("acetone", 50)
list_reagents = list("acetone" = 50)
/obj/item/weapon/reagent_containers/glass/bottle/reagent/ammonia
name = "Ammonia Bottle"
desc = "A reagent bottle. Contains ammonia."
icon_state = "rbottle4"
New()
..()
reagents.add_reagent("ammonia", 50)
list_reagents = list("ammonia" = 50)
/obj/item/weapon/reagent_containers/glass/bottle/reagent/diethylamine
name = "Diethylamine Bottle"
desc = "A reagent bottle. Contains diethylamine."
icon_state = "rbottle5"
New()
..()
reagents.add_reagent("diethylamine", 50)
list_reagents = list("diethylamine" = 50)
/obj/item/weapon/reagent_containers/glass/bottle/reagent/acid
name = "Acid Bottle"
desc = "A reagent bottle. Contains sulfuric acid."
icon_state = "rbottle6"
New()
..()
reagents.add_reagent("sacid", 50)
list_reagents = list("sacid" = 50)
/obj/item/weapon/reagent_containers/glass/bottle/reagent/formaldehyde
name = "Formaldehyde Bottle"
desc = "A reagent bottle. Contains formaldehyde."
icon_state = "rbottle"
New()
..()
reagents.add_reagent("formaldehyde", 50)
list_reagents = list("formaldehyde" = 50)
/obj/item/weapon/reagent_containers/glass/bottle/reagent/morphine
name = "Morphine Bottle"
desc = "A reagent bottle. Contains morphine."
New()
..()
reagents.add_reagent("morphine", 50)
list_reagents = list("morphine" = 50)
/obj/item/weapon/reagent_containers/glass/bottle/reagent/insulin
name = "Insulin Bottle"
desc = "A reagent bottle. Contains insulin."
New()
..()
reagents.add_reagent("insulin", 50)
list_reagents = list("insulin" = 50)
/obj/item/weapon/reagent_containers/glass/bottle/reagent/hairgrownium
name = "Hair Grow Gel"
desc = "A bottle full of a stimulative hair growth formula"
New()
..()
reagents.add_reagent("hairgrownium", 50)
list_reagents = list("hairgrownium" = 50)
/obj/item/weapon/reagent_containers/glass/bottle/reagent/hair_dye
name = "Quantum Hair Dye Bottle"
desc = "A bottle of the ever-changing quantum hair dye."
New()
..()
reagents.add_reagent("hair_dye", 50)
list_reagents = list("hair_dye" = 50)
////////////////////Traitor Poison Bottle//////////////////////////////
@@ -297,9 +243,9 @@
possible_transfer_amounts = list(5,10,15,25,30,40)
volume = 40
New()
..()
reagents.add_reagent(pick_list("chemistry_tools.json", "traitor_poison_bottle"), 40)
/obj/item/weapon/reagent_containers/glass/bottle/traitor/New()
..()
reagents.add_reagent(pick_list("chemistry_tools.json", "traitor_poison_bottle"), 40)
/obj/item/weapon/reagent_containers/glass/bottle/plasma
name = "plasma dust bottle"
@@ -1,32 +0,0 @@
/obj/item/weapon/reagent_containers/glass/bottle/robot
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,50,100)
flags = OPENCONTAINER
volume = 60
var/reagent = ""
/obj/item/weapon/reagent_containers/glass/bottle/robot/epinephrine
name = "internal epinephrine bottle"
desc = "A small bottle. Contains epinephrine - used to stabilize patients."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
reagent = "epinephrine"
/obj/item/weapon/reagent_containers/glass/bottle/robot/epinephrine/New()
..()
reagents.add_reagent("epinephrine", 60)
return
/obj/item/weapon/reagent_containers/glass/bottle/robot/charcoal
name = "internal charcoal bottle"
desc = "A small bottle of charcoal. Counters poisons and repairs damage."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle17"
reagent = "charcoal"
/obj/item/weapon/reagent_containers/glass/bottle/robot/charcoal/New()
..()
reagents.add_reagent("charcoal", 60)
return
@@ -268,7 +268,7 @@
if(assembly)
assembly.Crossed(AM)
/obj/item/weapon/reagent_containers/glass/beaker/on_found(mob/finder as mob) //for mousetraps
/obj/item/weapon/reagent_containers/glass/beaker/on_found(mob/finder) //for mousetraps
if(assembly)
assembly.on_found(finder)
@@ -319,20 +319,14 @@
possible_transfer_amounts = list(5,10,15,25,30,50,100,300)
flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone/New()
..()
reagents.add_reagent("cryoxadone", 30)
update_icon()
/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone
list_reagents = list("cryoxadone" = 30)
/obj/item/weapon/reagent_containers/glass/beaker/sulphuric/New()
..()
reagents.add_reagent("sacid", 50)
update_icon()
/obj/item/weapon/reagent_containers/glass/beaker/sulphuric
list_reagents = list("sacid" = 50)
/obj/item/weapon/reagent_containers/glass/beaker/slime/New()
..()
reagents.add_reagent("slimejelly", 50)
update_icon()
/obj/item/weapon/reagent_containers/glass/beaker/slime
list_reagents = list("slimejelly" = 50)
/obj/item/weapon/reagent_containers/glass/bucket
desc = "It's a bucket."
@@ -347,7 +341,7 @@
volume = 120
flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/bucket/attackby(var/obj/D, mob/user as mob, params)
/obj/item/weapon/reagent_containers/glass/bucket/attackby(obj/D, mob/user, params)
if(isprox(D))
to_chat(user, "You add [D] to [src].")
qdel(D)
@@ -365,52 +359,4 @@
volume = 15
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(1,5,15)
flags = OPENCONTAINER
/*
/obj/item/weapon/reagent_containers/glass/blender_jug
name = "Blender Jug"
desc = "A blender jug, part of a blender."
icon = 'icons/obj/kitchen.dmi'
icon_state = "blender_jug_e"
volume = 100
on_reagent_change()
switch(src.reagents.total_volume)
if(0)
icon_state = "blender_jug_e"
if(1 to 75)
icon_state = "blender_jug_h"
if(76 to 100)
icon_state = "blender_jug_f"
/obj/item/weapon/reagent_containers/glass/canister //not used apparantly
desc = "It's a canister. Mainly used for transporting fuel."
name = "canister"
icon = 'icons/obj/tank.dmi'
icon_state = "canister"
item_state = "canister"
materials = list(MAT_METAL=300)
w_class = 4
amount_per_transfer_from_this = 20
possible_transfer_amounts = list(10,20,30,60)
volume = 120
/obj/item/weapon/reagent_containers/glass/dispenser
name = "reagent glass"
desc = "A reagent glass."
icon = 'icons/obj/chemical.dmi'
icon_state = "beaker0"
amount_per_transfer_from_this = 10
flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/dispenser/surfactant
name = "reagent glass (surfactant)"
icon_state = "liquid"
New()
..()
reagents.add_reagent("fluorosurfactant", 20)
*/
flags = OPENCONTAINER
@@ -43,11 +43,8 @@
var/trans = reagents.trans_to(M, amount_per_transfer_from_this)
to_chat(user, "\blue [trans] units injected. [reagents.total_volume] units remaining in [src].")
return
/obj/item/weapon/reagent_containers/hypospray/CMO/New()
..()
reagents.add_reagent("omnizine", 30)
/obj/item/weapon/reagent_containers/hypospray/CMO
list_reagents = list("omnizine" = 30)
/obj/item/weapon/reagent_containers/hypospray/combat
name = "combat stimulant injector"
@@ -55,21 +52,14 @@
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(10)
icon_state = "combat_hypo"
volume = 60
volume = 75
ignore_flags = 1 // So they can heal their comrades.
/obj/item/weapon/reagent_containers/hypospray/combat/New()
..()
reagents.add_reagent("synaptizine", 30)
list_reagents = list("epinephrine" = 30, "omnizine" = 30, "teporone" = 15)
/obj/item/weapon/reagent_containers/hypospray/combat/nanites
name = "combat stimulant injector"
desc = "A modified air-needle autoinjector filled with expensive regeneration nanites."
desc = "A modified air-needle autoinjector for use in combat situations. Prefilled with expensive medical nanites for rapid healing."
volume = 100
/obj/item/weapon/reagent_containers/hypospray/combat/nanites/New()
..()
reagents.add_reagent("nanites", 70)
list_reagents = list("nanites" = 100)
/obj/item/weapon/reagent_containers/hypospray/autoinjector
name = "emergency autoinjector"
@@ -81,56 +71,41 @@
volume = 10
ignore_flags = 1 //so you can medipen through hardsuits
flags = null
list_reagents = list("epinephrine" = 10)
/obj/item/weapon/reagent_containers/hypospray/autoinjector/New()
..()
reagents.add_reagent("epinephrine", 10)
update_icon()
return
/obj/item/weapon/reagent_containers/hypospray/autoinjector/attack(mob/M as mob, mob/user as mob)
/obj/item/weapon/reagent_containers/hypospray/autoinjector/attack(mob/M, mob/user)
if(!reagents.total_volume)
to_chat(user, "<span class='warning'>[src] is empty!</span>")
return
..()
update_icon()
return
/obj/item/weapon/reagent_containers/hypospray/autoinjector/update_icon()
if(reagents.total_volume > 0)
icon_state = "[initial(icon_state)]1"
icon_state = initial(icon_state)
else
icon_state = "[initial(icon_state)]0"
/obj/item/weapon/reagent_containers/hypospray/autoinjector/examine(mob/user)
..(user)
/obj/item/weapon/reagent_containers/hypospray/autoinjector/examine()
..()
if(reagents && reagents.reagent_list.len)
to_chat(user, "\blue It is currently loaded.")
to_chat(usr, "<span class='notice'>It is currently loaded.</span>")
else
to_chat(user, "\blue It is spent.")
to_chat(usr, "<span class='notice'>It is spent.</span>")
/obj/item/weapon/reagent_containers/hypospray/autoinjector/teporone //basilisks
name = "teporone autoinjector"
desc = "A rapid way to regulate your body's temperature in the event of a hardsuit malfunction at the cost of some shortness of breath."
desc = "A rapid way to regulate your body's temperature in the event of a hardsuit malfunction."
icon_state = "lepopen"
/obj/item/weapon/reagent_containers/hypospray/autoinjector/teporone/New()
..()
reagents.remove_reagent("epinephrine", 10)
reagents.add_reagent("teporone", 9)
reagents.add_reagent("lexorin", 1)
update_icon()
return
list_reagents = list("teporone" = 10)
/obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack //goliath kiting
name = "stimpack autoinjector"
desc = "A rapid way to stimulate your body's adrenaline, allowing for freer movement in restrictive armor at the cost of some shortness of breath."
desc = "A rapid way to stimulate your body's adrenaline, allowing for freer movement in restrictive armor."
icon_state = "stimpen"
/obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack/New()
..()
reagents.remove_reagent("epinephrine", 10)
reagents.add_reagent("methamphetamine", 9)
reagents.add_reagent("lexorin", 1)
update_icon()
return
volume = 20
amount_per_transfer_from_this = 20
list_reagents = list("methamphetamine" = 10, "coffee" = 10)
/obj/item/weapon/reagent_containers/hypospray/autoinjector/stimulants
name = "Stimulants autoinjector"
@@ -139,10 +114,4 @@
amount_per_transfer_from_this = 50
possible_transfer_amounts = list(50)
volume = 50
/obj/item/weapon/reagent_containers/hypospray/autoinjector/stimulants/New()
..()
reagents.remove_reagent("epinephrine", 10)
reagents.add_reagent("stimulants", 50)
update_icon()
return
list_reagents = list("stimulants" = 50)
@@ -11,14 +11,15 @@
volume = 50
consume_sound = null
New()
..()
if(!icon_state)
icon_state = "pill[rand(1,20)]"
/obj/item/weapon/reagent_containers/food/pill/New()
..()
if(!icon_state)
icon_state = "pill[rand(1,20)]"
/obj/item/weapon/reagent_containers/food/pill/attack_self(mob/user as mob)
/obj/item/weapon/reagent_containers/food/pill/attack_self(mob/user)
return
/obj/item/weapon/reagent_containers/food/pill/attack(var/mob/living/carbon/M, mob/user as mob, def_zone)
/obj/item/weapon/reagent_containers/food/pill/attack(mob/living/carbon/M, mob/user, def_zone)
if(!istype(M))
return 0
bitesize = reagents.total_volume
@@ -29,7 +30,8 @@
return 0
/obj/item/weapon/reagent_containers/food/pill/afterattack(obj/target, mob/user, proximity)
if(!proximity) return
if(!proximity)
return
if(target.is_open_container() != 0 && target.reagents)
if(!target.reagents.total_volume)
@@ -65,89 +67,64 @@
name = "Toxins pill"
desc = "Highly toxic."
icon_state = "pill5"
New()
..()
reagents.add_reagent("toxin", 50)
list_reagents = list("toxin" = 50)
/obj/item/weapon/reagent_containers/food/pill/initropidril
name = "initropidril pill"
desc = "Don't swallow this."
icon_state = "pill5"
New()
..()
reagents.add_reagent("initropidril", 50)
list_reagents = list("initropidril" = 50)
/obj/item/weapon/reagent_containers/food/pill/adminordrazine
name = "Adminordrazine pill"
desc = "It's magic. We don't have to explain it."
icon_state = "pill16"
New()
..()
reagents.add_reagent("adminordrazine", 50)
list_reagents = list("adminordrazine" = 50)
/obj/item/weapon/reagent_containers/food/pill/methamphetamine
name = "Methamphetamine pill"
desc = "Helps improve the ability to concentrate."
icon_state = "pill8"
New()
..()
reagents.add_reagent("methamphetamine", 5)
list_reagents = list("methamphetamine" = 5)
/obj/item/weapon/reagent_containers/food/pill/haloperidol
name = "Haloperidol pill"
desc = "Haloperidol is an anti-psychotic use to treat psychiatric problems."
icon_state = "pill8"
New()
..()
reagents.add_reagent("haloperidol", 15)
list_reagents = list("haloperidol" = 15)
/obj/item/weapon/reagent_containers/food/pill/paroxetine
name = "Paroxetine pill"
desc = "Heavy anti-depressant."
icon_state = "pill8"
New()
..()
reagents.add_reagent("paroxetine", 15)
list_reagents = list("paroxetine" = 15)
/obj/item/weapon/reagent_containers/food/pill/happy
name = "Happy pill"
desc = "Happy happy joy joy!"
icon_state = "pill18"
New()
..()
reagents.add_reagent("space_drugs", 15)
reagents.add_reagent("sugar", 15)
list_reagents = list("space_drugs" = 15, "sugar" = 15)
/obj/item/weapon/reagent_containers/food/pill/zoom
name = "Zoom pill"
desc = "Zoooom!"
icon_state = "pill18"
New()
..()
reagents.add_reagent("synaptizine", 5)
reagents.add_reagent("methamphetamine", 5)
list_reagents = list("synaptizine" = 5, "methamphetamine" = 5)
/obj/item/weapon/reagent_containers/food/pill/charcoal
name = "Charcoal pill"
desc = "Neutralizes many common toxins."
icon_state = "pill17"
New()
..()
reagents.add_reagent("charcoal", 25)
list_reagents = list("charcoal" = 25)
/obj/item/weapon/reagent_containers/food/pill/salicylic
name = "Salicylic Acid pill"
desc = "Commonly used to treat moderate pain and fevers."
icon_state = "pill4"
New()
..()
reagents.add_reagent("sal_acid", 20)
list_reagents = list("sal_acid" = 20)
/obj/item/weapon/reagent_containers/food/pill/salbutamol
name = "Salbutamol pill"
desc = "Used to treat respiratory distress."
icon_state = "pill8"
New()
..()
reagents.add_reagent("salbutamol", 20)
list_reagents = list("salbutamol" = 20)
@@ -17,7 +17,7 @@
possible_transfer_amounts = null
/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user as mob)
/obj/item/weapon/reagent_containers/spray/afterattack(atom/A, mob/user)
if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/rack) || istype(A, /obj/structure/closet) \
|| istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart) || istype(A, /obj/machinery/portable_atmospherics/hydroponics))
return
@@ -103,20 +103,13 @@
/obj/item/weapon/reagent_containers/spray/cleaner
name = "space cleaner"
desc = "BLAM!-brand non-foaming space cleaner!"
/obj/item/weapon/reagent_containers/spray/cleaner/New()
..()
reagents.add_reagent("cleaner", 250)
list_reagents = list("cleaner" = 250)
/obj/item/weapon/reagent_containers/spray/cleaner/drone
name = "space cleaner"
desc = "BLAM!-brand non-foaming space cleaner!"
volume = 50
/obj/item/weapon/reagent_containers/spray/cleaner/New()
..()
reagents.add_reagent("cleaner", src.volume)
list_reagents = list("cleaner" = 50)
//pepperspray
/obj/item/weapon/reagent_containers/spray/pepper
@@ -128,11 +121,7 @@
volume = 40
spray_maxrange = 4
amount_per_transfer_from_this = 5
/obj/item/weapon/reagent_containers/spray/pepper/New()
..()
reagents.add_reagent("condensedcapsaicin", 40)
list_reagents = list("condensedcapsaicin" = 40)
//water flower
/obj/item/weapon/reagent_containers/spray/waterflower
@@ -143,12 +132,9 @@
item_state = "sunflower"
amount_per_transfer_from_this = 1
volume = 10
list_reagents = list("water" = 10)
/obj/item/weapon/reagent_containers/spray/waterflower/New()
..()
reagents.add_reagent("water", 10)
/obj/item/weapon/reagent_containers/spray/waterflower/attack_self(var/mob/user) //Don't allow changing how much the flower sprays
/obj/item/weapon/reagent_containers/spray/waterflower/attack_self(mob/user) //Don't allow changing how much the flower sprays
return
//chemsprayer
@@ -218,14 +204,10 @@
icon_state = "plantbgone"
item_state = "plantbgone"
volume = 100
list_reagents = list("atrazine" = 100)
/obj/item/weapon/reagent_containers/spray/plantbgone/New()
..()
reagents.add_reagent("atrazine", 100)
/obj/item/weapon/reagent_containers/spray/plantbgone/afterattack(atom/A as mob|obj, mob/user as mob, proximity)
/obj/item/weapon/reagent_containers/spray/plantbgone/afterattack(atom/A, mob/user, proximity)
if(!proximity) return
if(istype(A, /obj/machinery/portable_atmospherics/hydroponics)) // We are targeting hydrotray
@@ -19,6 +19,12 @@
var/mode = SYRINGE_DRAW
var/projectile_type = /obj/item/projectile/bullet/dart/syringe
/obj/item/weapon/reagent_containers/syringe/New()
..()
if(list_reagents) //syringe starts in inject mode if its already got something inside
mode = SYRINGE_INJECT
update_icon()
/obj/item/weapon/reagent_containers/syringe/on_reagent_change()
update_icon()
@@ -30,8 +36,7 @@
..()
update_icon()
/obj/item/weapon/reagent_containers/syringe/attack_self(mob/user as mob)
/obj/item/weapon/reagent_containers/syringe/attack_self(mob/user)
switch(mode)
if(SYRINGE_DRAW)
mode = SYRINGE_INJECT
@@ -45,10 +50,10 @@
..()
update_icon()
/obj/item/weapon/reagent_containers/syringe/attack(mob/living/M as mob, mob/living/user as mob, def_zone)
/obj/item/weapon/reagent_containers/syringe/attack(mob/living/M, mob/living/user, def_zone)
return
/obj/item/weapon/reagent_containers/syringe/attackby(obj/item/I as obj, mob/user as mob, params)
/obj/item/weapon/reagent_containers/syringe/attackby(obj/item/I, mob/user, params)
if(istype(I,/obj/item/weapon/storage/bag))
..()
return
@@ -66,13 +71,6 @@
to_chat(user, "\red This syringe is broken!")
return
/* if(user.a_intent == I_HARM && ismob(target))
if((CLUMSY in user.mutations) && prob(50))
target = user
syringestab(target, user)
return */
switch(mode)
if(SYRINGE_DRAW)
@@ -286,60 +284,6 @@
filling.icon += mix_color_from_reagents(reagents.reagent_list)
overlays += filling
/obj/item/weapon/reagent_containers/syringe/proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob)
user.attack_log += "\[[time_stamp()]\]<font color='red'> Attacked [target.name] ([target.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>"
target.attack_log += "\[[time_stamp()]\]<font color='orange'> Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>"
if(target.ckey)
msg_admin_attack("[key_name_admin(user)] attacked [key_name_admin(target)] with [src.name] (INTENT: [uppertext(user.a_intent)])")
if(!iscarbon(user))
target.LAssailant = null
else
target.LAssailant = user
if(istype(target, /mob/living/carbon/human))
var/target_zone = ran_zone(check_zone(user.zone_sel.selecting, target))
var/obj/item/organ/external/affecting = target:get_organ(target_zone)
if(!affecting || (affecting.status & ORGAN_DESTROYED) || affecting.is_stump())
to_chat(user, "<span class='danger'>They are missing that limb!</span>")
return
var/hit_area = affecting.name
var/mob/living/carbon/human/H = target
if((user != target) && H.check_shields(7, "the [src.name]"))
return
if(target != user && target.getarmor(target_zone, "melee") > 5 && prob(50))
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red <B>[user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!</B>"), 1)
user.unEquip(src)
qdel(src)
return
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red <B>[user] stabs [target] in \the [hit_area] with [src.name]!</B>"), 1)
if(affecting.take_damage(3))
target:UpdateDamageIcon()
else
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red <B>[user] stabs [target] with [src.name]!</B>"), 1)
target.take_organ_damage(3)// 7 is the same as crowbar punch
src.reagents.reaction(target, INGEST)
var/syringestab_amount_transferred = rand(0, (reagents.total_volume - 5)) //nerfed by popular demand
src.reagents.trans_to(target, syringestab_amount_transferred)
src.desc += " It is broken."
src.mode = SYRINGE_BROKEN
src.add_blood(target)
src.add_fingerprint(usr)
src.update_icon()
/obj/item/weapon/reagent_containers/ld50_syringe
name = "Lethal Injection Syringe"
desc = "A syringe used for lethal injections."
@@ -351,104 +295,101 @@
volume = 50
var/mode = SYRINGE_DRAW
on_reagent_change()
update_icon()
/obj/item/weapon/reagent_containers/ld50_syringe/on_reagent_change()
update_icon()
pickup(mob/user)
..()
update_icon()
/obj/item/weapon/reagent_containers/ld50_syringe/pickup(mob/user)
..()
update_icon()
dropped(mob/user)
..()
update_icon()
/obj/item/weapon/reagent_containers/ld50_syringe/dropped(mob/user)
..()
update_icon()
attack_self(mob/user as mob)
mode = !mode
update_icon()
/obj/item/weapon/reagent_containers/ld50_syringe/attack_self(mob/user)
mode = !mode
update_icon()
attack_hand()
..()
update_icon()
/obj/item/weapon/reagent_containers/ld50_syringe/attack_hand()
..()
update_icon()
/obj/item/weapon/reagent_containers/ld50_syringe/attackby(obj/item/I, mob/user)
return
attackby(obj/item/I as obj, mob/user as mob)
/obj/item/weapon/reagent_containers/ld50_syringe/afterattack(obj/target, mob/user , flag)
if(!target.reagents)
return
afterattack(obj/target, mob/user , flag)
if(!target.reagents) return
switch(mode)
if(SYRINGE_DRAW)
switch(mode)
if(SYRINGE_DRAW)
if(reagents.total_volume >= reagents.maximum_volume)
to_chat(user, "\red The syringe is full.")
return
if(reagents.total_volume >= reagents.maximum_volume)
to_chat(user, "\red The syringe is full.")
if(ismob(target))
if(istype(target, /mob/living/carbon))//I Do not want it to suck 50 units out of people
to_chat(usr, "This needle isn't designed for drawing blood.")
return
else //if not mob
if(!target.reagents.total_volume)
to_chat(user, "\red [target] is empty.")
return
if(ismob(target))
if(istype(target, /mob/living/carbon))//I Do not want it to suck 50 units out of people
to_chat(usr, "This needle isn't designed for drawing blood.")
return
else //if not mob
if(!target.reagents.total_volume)
to_chat(user, "\red [target] is empty.")
return
if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
to_chat(user, "\red You cannot directly remove reagents from this object.")
return
if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
to_chat(user, "\red You cannot directly remove reagents from this object.")
return
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares?
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares?
to_chat(user, "\blue You fill the syringe with [trans] units of the solution.")
if(reagents.total_volume >= reagents.maximum_volume)
mode=!mode
update_icon()
to_chat(user, "\blue You fill the syringe with [trans] units of the solution.")
if(reagents.total_volume >= reagents.maximum_volume)
mode=!mode
if(SYRINGE_INJECT)
if(!reagents.total_volume)
to_chat(user, "\red The Syringe is empty.")
return
if(istype(target, /obj/item/weapon/implantcase/chem))
return
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food))
to_chat(user, "\red You cannot directly fill this object.")
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
to_chat(user, "\red [target] is full.")
return
if(ismob(target) && target != user)
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red <B>[] is trying to inject [] with a giant syringe!</B>", user, target), 1)
if(!do_mob(user, target, 300)) return
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red [] injects [] with a giant syringe!", user, target), 1)
src.reagents.reaction(target, INGEST)
if(ismob(target) && target == user)
src.reagents.reaction(target, INGEST)
spawn(5)
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
to_chat(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()
/obj/item/weapon/reagent_containers/ld50_syringe/update_icon()
var/rounded_vol = round(reagents.total_volume,50)
if(ismob(loc))
var/mode_t
switch(mode)
if(SYRINGE_DRAW)
mode_t = "d"
if(SYRINGE_INJECT)
if(!reagents.total_volume)
to_chat(user, "\red The Syringe is empty.")
return
if(istype(target, /obj/item/weapon/implantcase/chem))
return
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food))
to_chat(user, "\red You cannot directly fill this object.")
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
to_chat(user, "\red [target] is full.")
return
if(ismob(target) && target != user)
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red <B>[] is trying to inject [] with a giant syringe!</B>", user, target), 1)
if(!do_mob(user, target, 300)) return
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red [] injects [] with a giant syringe!", user, target), 1)
src.reagents.reaction(target, INGEST)
if(ismob(target) && target == user)
src.reagents.reaction(target, INGEST)
spawn(5)
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
to_chat(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,50)
if(ismob(loc))
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]"
mode_t = "i"
icon_state = "[mode_t][rounded_vol]"
else
icon_state = "[rounded_vol]"
item_state = "syringe_[rounded_vol]"
////////////////////////////////////////////////////////////////////////////////
@@ -459,85 +400,27 @@
/obj/item/weapon/reagent_containers/syringe/antiviral
name = "Syringe (spaceacillin)"
desc = "Contains antiviral agents."
New()
..()
reagents.add_reagent("spaceacillin", 15)
mode = SYRINGE_INJECT
update_icon()
list_reagents = list("spaceacillin" = 15)
/obj/item/weapon/reagent_containers/ld50_syringe/lethal
New()
..()
reagents.add_reagent("cyanide", 10)
reagents.add_reagent("neurotoxin2", 40)
mode = SYRINGE_INJECT
update_icon()
//Robot syringes
//Not special in any way, code wise. They don't have added variables or procs.
/obj/item/weapon/reagent_containers/syringe/robot/charcoal
name = "Syringe (charcoal)"
desc = "Contains charcoal."
New()
..()
reagents.add_reagent("charcoal", 15)
mode = SYRINGE_INJECT
update_icon()
/obj/item/weapon/reagent_containers/syringe/robot/epinephrine
name = "Syringe (Epinephrine)"
desc = "Contains epinephrine - used to stabilize patients."
New()
..()
reagents.add_reagent("epinephrine", 15)
mode = SYRINGE_INJECT
update_icon()
/obj/item/weapon/reagent_containers/syringe/robot/mixed
name = "Syringe (mixed)"
desc = "Contains epinephrine & charcoal."
New()
..()
reagents.add_reagent("epinephrine", 7)
reagents.add_reagent("charcoal", 8)
mode = SYRINGE_INJECT
update_icon()
list_reagents = list("cyanide" = 10, "neurotoxin2" = 40)
/obj/item/weapon/reagent_containers/syringe/charcoal
name = "Syringe (charcoal)"
desc = "Contains charcoal - used to treat toxins and damage from toxins."
New()
..()
reagents.add_reagent("charcoal", 15)
mode = SYRINGE_INJECT
update_icon()
list_reagents = list("charcoal" = 15)
/obj/item/weapon/reagent_containers/syringe/epinephrine
name = "Syringe (Epinephrine)"
desc = "Contains epinephrine - used to stabilize patients."
New()
..()
reagents.add_reagent("epinephrine", 15)
mode = SYRINGE_INJECT
update_icon()
list_reagents = list("epinephrine" = 15)
/obj/item/weapon/reagent_containers/syringe/insulin
name = "Syringe (insulin)"
desc = "Contains insulin - used to treat diabetes."
New()
..()
reagents.add_reagent("insulin", 15)
mode = SYRINGE_INJECT
update_icon()
list_reagents = list("insulin" = 15)
/obj/item/weapon/reagent_containers/syringe/bioterror
name = "bioterror syringe"
desc = "Contains several paralyzing reagents."
New()
..()
reagents.add_reagent("neurotoxin", 5)
reagents.add_reagent("capulettium_plus", 5)
reagents.add_reagent("sodium_thiopental", 5)
mode = SYRINGE_INJECT
update_icon()
list_reagents = list("neurotoxin" = 5, "capulettium_plus" = 5, "sodium_thiopental" = 5)
+2 -2
View File
@@ -12,7 +12,7 @@
var/amount_per_transfer_from_this = 10
var/possible_transfer_amounts = list(10,25,50,100)
/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W, mob/user, params)
return
/obj/structure/reagent_dispensers/New()
@@ -139,7 +139,7 @@
rig = null
overlays = new/list()
/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W,/obj/item/device/assembly_holder) && accepts_rig)
if(rig)
to_chat(user, "\red There is another device in the way.")