Merge branch 'master' into tinytweaks

This commit is contained in:
Putnam3145
2019-12-01 23:24:56 -08:00
committed by GitHub
594 changed files with 4654 additions and 2602 deletions
@@ -88,20 +88,21 @@
return ..()
/obj/machinery/chem_dispenser/examine(mob/user)
..()
. = ..()
if(panel_open)
to_chat(user, "<span class='notice'>[src]'s maintenance hatch is open!</span>")
. += "<span class='notice'>[src]'s maintenance hatch is open!</span>"
if(in_range(user, src) || isobserver(user))
to_chat(user, "<span class='notice'>The status display reads: <br>Recharging <b>[recharge_amount]</b> power units per interval.<br>Power efficiency increased by <b>[(powerefficiency*1000)-100]%</b>.<span>")
. += "<span class='notice'>The status display reads: <br>Recharging <b>[recharge_amount]</b> power units per interval.<br>Power efficiency increased by <b>[(powerefficiency*1000)-100]%</b>.<span>"
switch(macrotier)
if(1)
to_chat(user, "<span class='notice'>Macro granularity at <b>5u</b>.<span>")
. += "<span class='notice'>Macro granularity at <b>5u</b>.<span>"
if(2)
to_chat(user, "<span class='notice'>Macro granularity at <b>3u</b>.<span>")
. += "<span class='notice'>Macro granularity at <b>3u</b>.<span>"
if(3)
to_chat(user, "<span class='notice'>Macro granularity at <b>2u</b>.<span>")
. += "<span class='notice'>Macro granularity at <b>2u</b>.<span>"
if(4)
to_chat(user, "<span class='notice'>Macro granularity at <b>1u</b>.<span>")
. += "<span class='notice'>Macro granularity at <b>1u</b>.<span>"
/obj/machinery/chem_dispenser/process()
if (recharge_counter >= 4)
if(!is_operational())
@@ -382,9 +383,10 @@
/obj/machinery/chem_dispenser/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker)
if(beaker)
beaker.forceMove(drop_location())
var/obj/item/reagent_containers/B = beaker
B.forceMove(drop_location())
if(user && Adjacent(user) && !issiliconoradminghost(user))
user.put_in_hands(beaker)
user.put_in_hands(B)
if(new_beaker)
beaker = new_beaker
else
@@ -396,7 +398,6 @@
cell = null
if(beaker)
beaker.forceMove(drop_location())
beaker = null
return ..()
/obj/machinery/chem_dispenser/proc/get_macro_resolution()
@@ -191,27 +191,27 @@
/obj/machinery/reagentgrinder/examine(mob/user)
. = ..()
if(!in_range(user, src) && !issilicon(user) && !isobserver(user))
to_chat(user, "<span class='warning'>You're too far away to examine [src]'s contents and display!</span>")
. += "<span class='warning'>You're too far away to examine [src]'s contents and display!</span>"
return
if(operating)
to_chat(user, "<span class='warning'>\The [src] is operating.</span>")
. += "<span class='warning'>\The [src] is operating.</span>"
return
if(beaker || length(holdingitems))
to_chat(user, "<span class='notice'>\The [src] contains:</span>")
. += "<span class='notice'>\The [src] contains:</span>"
if(beaker)
to_chat(user, "<span class='notice'>- \A [beaker].</span>")
. += "<span class='notice'>- \A [beaker].</span>"
for(var/i in holdingitems)
var/obj/item/O = i
to_chat(user, "<span class='notice'>- \A [O.name].</span>")
. += "<span class='notice'>- \A [O.name].</span>"
if(!(stat & (NOPOWER|BROKEN)))
to_chat(user, "<span class='notice'>The status display reads:</span>")
to_chat(user, "<span class='notice'>- Grinding reagents at <b>[speed*100]%</b>.<span>")
. += "<span class='notice'>The status display reads:</span>"
. += "<span class='notice'>- Grinding reagents at <b>[speed*100]%</b>.<span>"
if(beaker)
for(var/datum/reagent/R in beaker.reagents.reagent_list)
to_chat(user, "<span class='notice'>- [R.volume] units of [R.name].</span>")
. += "<span class='notice'>- [R.volume] units of [R.name].</span>"
/obj/machinery/reagentgrinder/proc/eject(mob/user)
for(var/i in holdingitems)
@@ -1830,6 +1830,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
value = 2
/datum/reagent/consumable/ethanol/peppermint_patty/on_mob_life(mob/living/carbon/M)
M.apply_status_effect(/datum/status_effect/throat_soothed)
M.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL)
..()
@@ -217,6 +217,7 @@
glass_icon_state = "glass_white"
glass_name = "glass of milk"
glass_desc = "White and nutritious goodness!"
pH = 6.5
/datum/reagent/consumable/milk/on_mob_life(mob/living/carbon/M)
if(HAS_TRAIT(M, TRAIT_CALCIUM_HEALER))
@@ -786,6 +787,10 @@
glass_name = "glass of menthol"
glass_desc = "Tastes naturally minty, and imparts a very mild numbing sensation."
/datum/reagent/consumable/menthol/on_mob_life(mob/living/L)
L.apply_status_effect(/datum/status_effect/throat_soothed)
..()
/datum/reagent/consumable/grenadine
name = "Grenadine"
id = "grenadine"
@@ -756,6 +756,30 @@
taste_description = "mournful honking"
pH = 9.2
/datum/reagent/consumable/liquidelectricity
name = "Liquid Electricity"
id = "liquidelectricity"
description = "The blood of Ethereals, and the stuff that keeps them going. Great for them, horrid for anyone else."
nutriment_factor = 5 * REAGENTS_METABOLISM
color = "#97ee63"
taste_description = "pure electricity"
/* //We don't have ethereals here, so I'll just comment it out.
/datum/reagent/consumable/liquidelectricity/reaction_mob(mob/living/M, method=TOUCH, reac_volume) //can't be on life because of the way blood works.
if((method == INGEST || method == INJECT || method == PATCH) && iscarbon(M))
var/mob/living/carbon/C = M
var/obj/item/organ/stomach/ethereal/stomach = C.getorganslot(ORGAN_SLOT_STOMACH)
if(istype(stomach))
stomach.adjust_charge(reac_volume * REM)
*/
/datum/reagent/consumable/liquidelectricity/on_mob_life(mob/living/carbon/M)
if(prob(25)) // && !isethereal(M))
M.electrocute_act(rand(10,15), "Liquid Electricity in their body", 1) //lmao at the newbs who eat energy bars
playsound(M, "sparks", 50, TRUE)
return ..()
/datum/reagent/consumable/astrotame
name = "Astrotame"
id = "astrotame"
@@ -940,6 +940,21 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
description = "Reacts with neural tissue, helping reform damaged connections. Can cure minor traumas."
color = "#EEFF8F"
/datum/reagent/medicine/neurine/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(!(method == INJECT))
return
var/obj/item/organ/brain/B = M.getorganslot(ORGAN_SLOT_BRAIN)
if(!B || (!(B.organ_flags & ORGAN_FAILING)))
return
B.applyOrganDamage(-20)
if(prob(80))
B.gain_trauma_type(BRAIN_TRAUMA_MILD)
else if(prob(50))
B.gain_trauma_type(BRAIN_TRAUMA_SEVERE)
else
B.gain_trauma_type(BRAIN_TRAUMA_SPECIAL)
/datum/reagent/medicine/neurine/on_mob_life(mob/living/carbon/C)
if(holder.has_reagent("neurotoxin"))
holder.remove_reagent("neurotoxin", 5)
@@ -1464,3 +1479,50 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
M.adjustToxLoss(1, 0)
..()
. = 1
/datum/reagent/medicine/silibinin
name = "Silibinin"
id = "silibinin"
description = "A thistle derrived hepatoprotective flavolignan mixture that help reverse damage to the liver."
reagent_state = SOLID
color = "#FFFFD0"
metabolization_rate = 1.5 * REAGENTS_METABOLISM
/datum/reagent/medicine/silibinin/on_mob_life(mob/living/carbon/M)
M.adjustOrganLoss(ORGAN_SLOT_LIVER, -2)//Add a chance to cure liver trauma once implemented.
..()
. = 1
/datum/reagent/medicine/polypyr //This is intended to be an ingredient in advanced chems.
name = "Polypyrylium Oligomers"
id = "polypyr"
description = "Apurple mixture of short polyelectrolyte chains not easily synthesized in the laboratory. It is valued as an intermediate in the synthesis of the cutting edge pharmaceuticals."
reagent_state = SOLID
color = "#9423FF"
metabolization_rate = 0.25 * REAGENTS_METABOLISM
overdose_threshold = 50
taste_description = "numbing bitterness"
/datum/reagent/medicine/polypyr/on_mob_life(mob/living/carbon/M) //I wnted a collection of small positive effects, this is as hard to obtain as coniine after all.
M.adjustOrganLoss(ORGAN_SLOT_LUNGS, -0.25)
M.adjustBruteLoss(-0.35, 0)
if(prob(50))
if(ishuman(M))
var/mob/living/carbon/human/H = M
H.bleed_rate = max(H.bleed_rate - 1, 0)
..()
. = 1
/datum/reagent/medicine/polypyr/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
if(M && ishuman(M) && reac_volume >= 0.5)
var/mob/living/carbon/human/H = M
H.hair_color = "92f"
H.facial_hair_color = "92f"
H.update_hair()
/datum/reagent/medicine/polypyr/overdose_process(mob/living/M)
M.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.5)
..()
. = 1
@@ -967,3 +967,23 @@
else
M.gain_trauma_type(BRAIN_TRAUMA_SPECIAL)
..()
/datum/reagent/toxin/bungotoxin
name = "Bungotoxin"
id = "bungotoxin"
description = "A horrible cardiotoxin that protects the humble bungo pit."
//silent_toxin = TRUE //I guess we don't really have the entire tox system ported.
color = "#EBFF8E"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
toxpwr = 0
taste_description = "tannin"
/datum/reagent/toxin/bungotoxin/on_mob_life(mob/living/carbon/M)
M.adjustOrganLoss(ORGAN_SLOT_HEART, 3)
M.confused = M.dizziness //add a tertiary effect here if this is isn't an effective poison.
if(current_cycle >= 12 && prob(8))
var/tox_message = pick("You feel your heart spasm in your chest.", "You feel faint.","You feel you need to catch your breath.","You feel a prickle of pain in your chest.")
to_chat(M, "<span class='notice'>[tox_message]</span>")
. = 1
..()
@@ -73,7 +73,7 @@
id = "synthtissue"
results = list("synthtissue" = 5)
required_reagents = list("synthflesh" = 1)
required_catalysts = list("nutriment" = 0.1)
required_catalysts = list("sugar" = 0.1)
//FermiChem vars:
OptimalTempMin = 305 // Lower area of bell curve for determining heat based rate reactions
OptimalTempMax = 315 // Upper end for above
@@ -86,13 +86,13 @@
CurveSharppH = 2.5 // How sharp the pH exponential curve is (to the power of value)
ThermicConstant = 0.01 // Temperature change per 1u produced
HIonRelease = 0.015 // pH change per 1u reaction (inverse for some reason)
RateUpLim = 0.05 // Optimal/max rate possible if all conditions are perfect
RateUpLim = 0.1 // Optimal/max rate possible if all conditions are perfect
FermiChem = TRUE // If the chemical uses the Fermichem reaction mechanics
PurityMin = 0
/datum/chemical_reaction/synthtissue/FermiCreate(datum/reagents/holder, added_volume, added_purity)
var/datum/reagent/synthtissue/St = holder.has_reagent("synthtissue")
var/datum/reagent/N = holder.has_reagent("nutriment")
var/datum/reagent/N = holder.has_reagent("sugar")
if(!St)
return
if(holder.chem_temp > 320)
@@ -173,7 +173,7 @@ GLOBAL_LIST_INIT(food_reagents, build_reagents_to_food()) //reagentid = related
/obj/item/paper/secretrecipe/examine(mob/user) //Extra secret
if(isobserver(user))
return
return list()
. = ..()
/obj/item/paper/secretrecipe/Initialize()
@@ -124,9 +124,8 @@ Borg Hypospray
return
/obj/item/reagent_containers/borghypo/examine(mob/user)
usr = user
..()
DescribeContents() //Because using the standardized reagents datum was just too cool for whatever fuckwit wrote this
. = ..()
. += DescribeContents() //Because using the standardized reagents datum was just too cool for whatever fuckwit wrote this
/obj/item/reagent_containers/borghypo/proc/DescribeContents()
var/empty = 1
@@ -134,11 +133,11 @@ Borg Hypospray
for(var/datum/reagents/RS in reagent_list)
var/datum/reagent/R = locate() in RS.reagent_list
if(R)
to_chat(usr, "<span class='notice'>It currently has [R.volume] unit\s of [R.name] stored.</span>")
. += "<span class='notice'>It currently has [R.volume] unit\s of [R.name] stored.</span>"
empty = 0
if(empty)
to_chat(usr, "<span class='warning'>It is currently empty! Allow some time for the internal syntheszier to produce more.</span>")
. += "<span class='warning'>It is currently empty! Allow some time for the internal syntheszier to produce more.</span>"
/obj/item/reagent_containers/borghypo/hacked
icon_state = "borghypo_s"
@@ -121,11 +121,11 @@
icon_state = "[initial(icon_state)]0"
/obj/item/reagent_containers/hypospray/medipen/examine()
..()
. = ..()
if(reagents && reagents.reagent_list.len)
to_chat(usr, "<span class='notice'>It is currently loaded.</span>")
. += "<span class='notice'>It is currently loaded.</span>"
else
to_chat(usr, "<span class='notice'>It is spent.</span>")
. += "<span class='notice'>It is spent.</span>"
/obj/item/reagent_containers/hypospray/medipen/stimulants
name = "illegal stimpack medipen"
@@ -296,10 +296,10 @@
/obj/item/hypospray/mkii/examine(mob/user)
. = ..()
if(vial)
to_chat(user, "[vial] has [vial.reagents.total_volume]u remaining.")
. += "[vial] has [vial.reagents.total_volume]u remaining."
else
to_chat(user, "It has no vial loaded in.")
to_chat(user, "[src] is set to [mode ? "Inject" : "Spray"] contents on application.")
. += "It has no vial loaded in."
. += "[src] is set to [mode ? "Inject" : "Spray"] contents on application."
/obj/item/hypospray/mkii/proc/unload_hypo(obj/item/I, mob/user)
if((istype(I, /obj/item/reagent_containers/glass/bottle/vial)))
@@ -100,3 +100,8 @@
name = "sterilizer spray"
desc = "Spray bottle loaded with non-toxic sterilizer. Useful in preparation for surgery."
list_reagents = list("sterilizine" = 60)
/obj/item/reagent_containers/medspray/synthtissue
name = "Synthtissue young culture spray"
desc = "Spray bottle loaded with synthtissue. Useful in synthtissue grafting surgeries."
list_reagents = list("synthtissue" = 60)
@@ -5,7 +5,7 @@
icon = 'icons/obj/toy.dmi'
icon_state = "rag"
item_flags = NOBLUDGEON
reagent_flags = OPENCONTAINER
reagent_flags = REFILLABLE | DRAINABLE
amount_per_transfer_from_this = 5
possible_transfer_amounts = list()
volume = 5
@@ -23,7 +23,7 @@
/obj/item/reagent_containers/rag/examine(mob/user)
. = ..()
if(reagents.total_volume)
to_chat(user, "<span class='notice'>Alt-Click to squeeze the liquids out of it.</span>")
. += "<span class='notice'>It's soaked. Alt-Click to squeeze it dry, and perhaps gather the liquids into another held open container.</span>"
/obj/item/reagent_containers/rag/afterattack(atom/A as obj|turf|area, mob/user,proximity)
. = ..()
@@ -85,15 +85,26 @@
/obj/item/reagent_containers/rag/AltClick(mob/user)
. = ..()
if(reagents.total_volume && user.canUseTopic(src, BE_CLOSE))
to_chat(user, "<span class='notice'>You start squeezing the liquids out of \the [src]...</span>")
to_chat(user, "<span class='notice'>You start squeezing \the [src] dry...</span>")
if(do_after(user, action_speed, TRUE, src))
to_chat(user, "<span class='notice'>You squeeze \the [src] dry.</span>")
var/atom/react_loc = get_turf(src)
if(ismob(react_loc))
react_loc = react_loc.loc
if(react_loc)
reagents.reaction(react_loc, TOUCH)
reagents.clear_reagents()
var/msg = "You squeeze \the [src]"
var/obj/item/target
if(Adjacent(user)) //Allows the user to drain the reagents into a beaker if adjacent (no telepathy).
for(var/obj/item/I in user.held_items)
if(I == src)
continue
if(I.is_open_container() && !I.reagents.holder_full())
target = I
break
if(!target)
msg += " dry"
reagents.reaction(get_turf(src), TOUCH)
reagents.clear_reagents()
else
msg += "'s liquids into \the [target]"
reagents.trans_to(target, reagents.total_volume)
to_chat(user, "<span class='notice'>[msg].</span>")
/obj/item/reagent_containers/rag/towel
name = "towel"
@@ -0,0 +1,11 @@
//Created if a sleeper is deconstructed, to contain the reagents within it.
/obj/item/reagent_containers/sleeper_buffer
name = "Sleeper buffer container"
desc = "A closed container for insertion in the Medical Sleepers."
icon_state = "sleeper_buffer"
volume = 500
reagent_flags = NO_REACT
spillable = TRUE
resistance_flags = ACID_PROOF
amount_per_transfer_from_this = 0
possible_transfer_amounts = list(0)
+4 -4
View File
@@ -71,13 +71,13 @@
var/paper_cups = 25 //Paper cups left from the cooler
/obj/structure/reagent_dispensers/water_cooler/examine(mob/user)
..()
. = ..()
if (paper_cups > 1)
to_chat(user, "There are [paper_cups] paper cups left.")
. += "There are [paper_cups] paper cups left."
else if (paper_cups == 1)
to_chat(user, "There is one paper cup left.")
. += "There is one paper cup left."
else
to_chat(user, "There are no paper cups left.")
. += "There are no paper cups left."
/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/living/user)
. = ..()