From 622a6232b0d6c2b4c69c15104a9d03ad649191da Mon Sep 17 00:00:00 2001 From: Archie Date: Sun, 3 Jan 2021 07:15:51 -0300 Subject: [PATCH] Chem master analyze fix, synthtissue update --- code/modules/reagents/chemistry/holder.dm | 3 +- .../chemistry/machinery/chem_master.dm | 19 +++-- code/modules/reagents/chemistry/reagents.dm | 1 - .../reagents/chemistry/recipes/medicine.dm | 5 +- .../reagents/chemistry/reagents/healing.dm | 70 ++++++++++++++++--- 5 files changed, 76 insertions(+), 22 deletions(-) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index bf3c4220..fa99489c 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -237,7 +237,7 @@ src.handle_reactions() return amount -/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 +/datum/reagents/proc/trans_id_to(obj/target, reagent, amount = 1, preserve_data = TRUE)//Not sure why this proc didn't exist before. It does now! /N var/list/cached_reagents = reagent_list if (!target) return @@ -257,7 +257,6 @@ if(preserve_data) trans_data = current_reagent.data R.add_reagent(current_reagent.type, amount, trans_data, chem_temp, current_reagent.purity, pH, no_react = TRUE) - remove_reagent(current_reagent.type, amount, 1) break diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index e6b19417..90e540f0 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -148,8 +148,8 @@ /obj/machinery/chem_master/on_deconstruction() var/atom/A = drop_location() - beaker.forceMove(A) - bottle.forceMove(A) + beaker?.forceMove(A) + bottle?.forceMove(A) return ..() /obj/machinery/chem_master/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ @@ -216,15 +216,18 @@ if(beaker) var/reagent = GLOB.name2reagent[params["id"]] var/amount = text2num(params["amount"]) + message_admins("[amount] + [reagent]") if (amount > 0) end_fermi_reaction() beaker.reagents.trans_id_to(src, reagent, amount) + message_admins("Passed Transfer Phase") . = TRUE else if (amount == -1) // -1 means custom amount useramount = input("Enter the Amount you want to transfer:", name, useramount) as num|null if (useramount > 0) end_fermi_reaction() beaker.reagents.trans_id_to(src, reagent, useramount) + message_admins("Passed Transfer Phase") . = TRUE if("transferFromBuffer") @@ -434,11 +437,11 @@ state = "Gas" var/const/P = 3 //The number of seconds between life ticks var/T = initial(R.metabolization_rate) * (60 / P) - var/datum/chemical_reaction/Rcr = get_chemical_reaction(R.type) + var/datum/chemical_reaction/Rcr = get_chemical_reaction(R) if(Rcr && Rcr.FermiChem) fermianalyze = TRUE var/pHpeakCache = (Rcr.OptimalpHMin + Rcr.OptimalpHMax)/2 - var/datum/reagent/targetReagent = beaker.reagents.has_reagent(R.type) + var/datum/reagent/targetReagent = beaker.reagents.has_reagent(R) if(!targetReagent) CRASH("Tried to find a reagent that doesn't exist in the chem_master!") @@ -463,9 +466,9 @@ var/T = initial(R.metabolization_rate) * (60 / P) if(istype(R, /datum/reagent/fermi)) fermianalyze = TRUE - var/datum/chemical_reaction/Rcr = get_chemical_reaction(R.type) + var/datum/chemical_reaction/Rcr = get_chemical_reaction(R) var/pHpeakCache = (Rcr.OptimalpHMin + Rcr.OptimalpHMax)/2 - var/datum/reagent/targetReagent = reagents.has_reagent(R.type) + var/datum/reagent/targetReagent = reagents.has_reagent(R) if(!targetReagent) CRASH("Tried to find a reagent that doesn't exist in the chem_master!") @@ -483,7 +486,9 @@ /obj/machinery/chem_master/proc/end_fermi_reaction()//Ends any reactions upon moving. - if(beaker.reagents.fermiIsReacting) + message_admins("fermi reaction end called") + if(beaker && beaker.reagents.fermiIsReacting) + message_admins("fermi is reacting, calling end") beaker.reagents.fermiEnd() /obj/machinery/chem_master/proc/isgoodnumber(num) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 5eb2c135..4aabd82d 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -1,5 +1,4 @@ #define REM REAGENTS_EFFECT_MULTIPLIER - GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) /proc/build_name2reagent() diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index 2571dfaf..37b42570 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -86,7 +86,7 @@ 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 @@ -101,7 +101,8 @@ if(St.purity < 1) St.volume *= St.purity St.purity = 1 - N.volume -= 0.002 + var/amount = CLAMP(0.002, 0, N.volume) + N.volume -= amount St.data["grown_volume"] = St.data["grown_volume"] + added_volume St.name = "[initial(St.name)] [round(St.data["grown_volume"], 0.1)]u colony" diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm index be765cfc..7d5f71aa 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm @@ -95,22 +95,41 @@ name = "Synthtissue" description = "Synthetic tissue used for grafting onto damaged organs during surgery, or for treating limb damage. Has a very tight growth window between 305-320, any higher and the temperature will cause the cells to die. Additionally, growth time is considerably long, so chemists are encouraged to leave beakers with said reaction ongoing, while they tend to their other duties." pH = 7.6 - metabolization_rate = 0.05 // gives time to craft by lowing it from .1 + metabolization_rate = 0.05 //Give them time to graft data = list("grown_volume" = 0, "injected_vol" = 0) + var/borrowed_health + color = "#FFDADA" /datum/reagent/synthtissue/reaction_mob(mob/living/M, method=TOUCH, reac_volume,show_message = 1) if(iscarbon(M)) - var/target = M.zone_selected - if (M.stat == DEAD) - show_message = 0 + var/mob/living/carbon/C = M + var/healing_factor = (((data["grown_volume"] / 100) + 1)*reac_volume) if(method in list(PATCH, TOUCH)) - M.apply_damage(reac_volume*-1.5, BRUTE, target) - M.apply_damage(reac_volume*-1.5, BURN, target) - if(show_message) - to_chat(M, "You feel your [target] heal! It stings like hell!") + if (M.stat == DEAD) + M.visible_message("The synthetic tissue rapidly grafts into [M]'s wounds, attemping to repair the damage as quickly as possible.") + borrowed_health += healing_factor + M.adjustBruteLoss(-healing_factor*2) + M.adjustFireLoss(-healing_factor*2) + M.adjustToxLoss(-healing_factor) + M.adjustCloneLoss(-healing_factor) + M.updatehealth() + if(data["grown_volume"] > 135 && ((C.health + C.oxyloss)>=80)) + if(M.revive()) + M.emote("gasp") + borrowed_health *= 2 + if(borrowed_health < 100) + borrowed_health = 100 + log_combat(M, M, "revived", src) + else + M.adjustBruteLoss(-healing_factor) + M.adjustFireLoss(-healing_factor) + to_chat(M, "You feel your flesh merge with the synthetic tissue! It stings like hell!") SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "painful_medicine", /datum/mood_event/painful_medicine) - if(method==INJECT) - data["injected_vol"] = reac_volume + if(method==INJECT) + data["injected_vol"] = reac_volume + var/obj/item/organ/heart/H = C.getorganslot(ORGAN_SLOT_HEART) + if(data["grown_volume"] > 50 && H.organ_flags & ORGAN_FAILING) + H.applyOrganDamage(-20) ..() /datum/reagent/synthtissue/on_mob_life(mob/living/carbon/C) @@ -124,6 +143,10 @@ to_chat(C, "You feel something reform inside of you!") data["injected_vol"] -= metabolization_rate + if(borrowed_health) + C.adjustToxLoss(1) + C.adjustCloneLoss(1) + borrowed_health -= 1 ..() /datum/reagent/synthtissue/on_merge(passed_data) @@ -134,6 +157,7 @@ if(iscarbon(holder.my_atom)) data["injected_vol"] = data["injected_vol"] + passed_data["injected_vol"] passed_data["injected_vol"] = 0 + update_name() ..() /datum/reagent/synthtissue/on_new(passed_data) @@ -141,6 +165,32 @@ return ..() if(passed_data["grown_volume"] > data["grown_volume"]) data["grown_volume"] = passed_data["grown_volume"] + update_name() ..() +/datum/reagent/synthtissue/proc/update_name() //They are but babes on creation and have to grow unto godhood + switch(data["grown_volume"]) + if(-INFINITY to 50) + name = "Induced Synthtissue Colony" + if(50 to 80) + name = "Oligopotent Synthtissue Colony" + if(80 to 135) + name = "Pluripotent Synthtissue Colony" + if(135 to 175) + name = "SuperSomatic Synthtissue Colony" + if(175 to INFINITY) + name = "Omnipotent Synthtissue Colony" + +/datum/reagent/synthtissue/on_mob_delete(mob/living/M) + if(!iscarbon(M)) + return + var/mob/living/carbon/C = M + C.adjustBruteLoss(borrowed_health*1.25) + C.adjustToxLoss(borrowed_health*1.25) + C.adjustCloneLoss(borrowed_health*1.25) + C.adjustAllOrganLoss(borrowed_health*0.25) + M.updatehealth() + if(borrowed_health && C.health < -20) + M.stat = DEAD + M.visible_message("The synthetic tissue degrades off [M]'s wounds as they collapse to the floor.") //NEEDS ON_MOB_DEAD()