This commit is contained in:
Linzolle
2019-12-08 14:17:00 -06:00
378 changed files with 12243 additions and 8059 deletions
+1 -1
View File
@@ -843,7 +843,7 @@
return FALSE
if (D.id == "water" && !no_react && !istype(my_atom, /obj/item/reagent_containers/food)) //Do like an otter, add acid to water, but also don't blow up botany.
if (pH <= 2)
if (pH < 2)
SSblackbox.record_feedback("tally", "fermi_chem", 1, "water-acid explosions")
var/datum/effect_system/smoke_spread/chem/s = new
var/turf/T = get_turf(my_atom)
@@ -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))
@@ -406,10 +407,6 @@
glass_name = "glass of Nuka Cola"
glass_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland."
/datum/reagent/consumable/nuka_cola/on_mob_metabolize(mob/living/L)
..()
L.add_movespeed_modifier(id, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
/datum/reagent/consumable/nuka_cola/on_mob_end_metabolize(mob/living/L)
L.remove_movespeed_modifier(id)
..()
@@ -881,40 +881,49 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
/datum/reagent/medicine/strange_reagent
name = "Strange Reagent"
id = "strange_reagent"
description = "A miracle drug capable of bringing the dead back to life. Only functions if the target has less than 100 brute and burn damage (independent of one another), and causes slight damage to the living."
description = "A miracle drug capable of bringing the dead back to life. Only functions when applied by patch or spray, if the target has less than 100 brute and burn damage (independent of one another) and hasn't been husked. Causes slight damage to the living."
reagent_state = LIQUID
color = "#A0E85E"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
taste_description = "magnets"
pH = 0
/datum/reagent/medicine/strange_reagent/reaction_mob(mob/living/carbon/human/M, method=TOUCH, reac_volume)
/datum/reagent/medicine/strange_reagent/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(M.stat == DEAD)
if(M.getBruteLoss() >= 100 || M.getFireLoss() >= 100)
M.visible_message("<span class='warning'>[M]'s body convulses a bit, and then falls still once more.</span>")
if(M.suiciding || M.hellbound) //they are never coming back
M.visible_message("<span class='warning'>[M]'s body does not react...</span>")
return
M.visible_message("<span class='warning'>[M]'s body convulses a bit.</span>")
if(!M.suiciding && !(HAS_TRAIT(M, TRAIT_NOCLONE)) && !M.hellbound)
if(!M)
return
if(M.notify_ghost_cloning(source = M))
spawn (100) //so the ghost has time to re-enter
return
if(M.getBruteLoss() >= 100 || M.getFireLoss() >= 100 || HAS_TRAIT(M, TRAIT_HUSK)) //body is too damaged to be revived
M.visible_message("<span class='warning'>[M]'s body convulses a bit, and then falls still once more.</span>")
M.do_jitter_animation(10)
return
else
M.visible_message("<span class='warning'>[M]'s body starts convulsing!</span>")
M.notify_ghost_cloning(source = M)
M.do_jitter_animation(10)
addtimer(CALLBACK(M, /mob/living/carbon.proc/do_jitter_animation, 10), 40) //jitter immediately, then again after 4 and 8 seconds
addtimer(CALLBACK(M, /mob/living/carbon.proc/do_jitter_animation, 10), 80)
spawn(100) //so the ghost has time to re-enter
if(iscarbon(M))
var/mob/living/carbon/C = M
if(!(C.dna && C.dna.species && (NOBLOOD in C.dna.species.species_traits)))
C.blood_volume = max(C.blood_volume, BLOOD_VOLUME_NORMAL*C.blood_ratio) //so you don't instantly re-die from a lack of blood
for(var/organ in C.internal_organs)
var/obj/item/organ/O = organ
if(O.damage > O.maxHealth/2)
O.setOrganDamage(O.maxHealth/2) //so you don't instantly die from organ damage when being revived
else
M.adjustOxyLoss(-20, 0)
M.adjustToxLoss(-20, 0)
var/mob/living/carbon/H = M
for(var/organ in H.internal_organs)
var/obj/item/organ/O = organ
O.setOrganDamage(0)
M.updatehealth()
if(M.revive())
M.grab_ghost()
M.emote("gasp")
log_combat(M, M, "revived", src)
..()
/datum/reagent/medicine/strange_reagent/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(0.5*REM, 0)
M.adjustFireLoss(0.5*REM, 0)
@@ -940,6 +949,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)
@@ -1509,5 +1533,5 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
/datum/reagent/medicine/polypyr/overdose_process(mob/living/M)
M.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.5)
..()
. = 1
. = 1
@@ -1654,7 +1654,7 @@
description = "Cheap and extremely common type of plant nutriment."
color = "#376400" // RBG: 50, 100, 0
tox_prob = 10
pH = 2
pH = 2.5
/datum/reagent/plantnutriment/left4zednutriment
name = "Left 4 Zed"
@@ -1662,7 +1662,7 @@
description = "Unstable nutriment that makes plants mutate more often than usual."
color = "#1A1E4D" // RBG: 26, 30, 77
tox_prob = 25
pH = 1.5
pH = 3.5
/datum/reagent/plantnutriment/robustharvestnutriment
name = "Robust Harvest"
@@ -1670,7 +1670,7 @@
description = "Very potent nutriment that prevents plants from mutating."
color = "#9D9D00" // RBG: 157, 157, 0
tox_prob = 15
pH = 1
pH = 2.5
// GOON OTHERS
@@ -33,7 +33,7 @@
toxpwr = 0
taste_description = "slime"
taste_mult = 0.9
pH = 2
pH = 2.3
/datum/reagent/toxin/mutagen/reaction_mob(mob/living/carbon/M, method=TOUCH, reac_volume)
if(!..())
@@ -220,7 +220,7 @@
color = "#49002E" // rgb: 73, 0, 46
toxpwr = 1
taste_mult = 1
pH = 2
pH = 2.7
/datum/reagent/toxin/plantbgone/reaction_obj(obj/O, reac_volume)
if(istype(O, /obj/structure/alien/weeds))
@@ -986,4 +986,3 @@
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)
@@ -99,7 +99,6 @@
/datum/chemical_reaction/reagent_explosion/blackpowder_explosion/on_reaction(datum/reagents/holder, created_volume)
var/turf/T = get_turf(holder.my_atom)
sleep(rand(50,100))
..(holder, created_volume, T)
/datum/chemical_reaction/thermite
@@ -77,6 +77,11 @@
desc = "A small bottle of charcoal, which removes toxins and other chemicals from the bloodstream."
list_reagents = list("charcoal" = 30)
/obj/item/reagent_containers/glass/bottle/cryoxadone
name = "cryoxadone bottle"
desc = "A small bottle of cryoxadone, heals most types of damage when used in extremely cold enviornments."
list_reagents = list("cryoxadone" = 30)
/obj/item/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."
@@ -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)
. += "<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)