From c48804b204a5346154f82dce8cfb9aa6ca45f455 Mon Sep 17 00:00:00 2001 From: "n3ophyt3@gmail.com" Date: Sat, 12 Mar 2011 00:35:03 +0000 Subject: [PATCH] Made a change to the cloner, since I was getting reports of people abusing quirks in the damage system to pop clones out way early without having to muck about with things like cryo. Mobs now have a "cloneloss" var, used to represent the fact that they aren't done being cloned. There are exactly 2 ways to heal cloneloss outside of badminnery. 1) Don't get popped out of the tube early. 2) Load a cryo tube with Clonexadone (mix Cyroxadone, Plasma, and Sodium to make) and hop in. Clonexadone also happens to heal regular damages twice as fast as cryoxadone, so it has more use than just fixing quickclones. PDA medscanners aren't sophisticated enough to detect cloning imperfections, but the ones found in medkits are. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1178 316c924e-a436-60f5-8080-3fe189b3f50e --- code/WorkInProgress/Chemistry-Reagents.dm | 16 ++++++++++++++++ code/WorkInProgress/Chemistry-Recipes.dm | 7 +++++++ code/WorkInProgress/cloning.dm | 14 +++----------- code/defines/mob/mob.dm | 1 + code/game/objects/devices/scanners.dm | 2 ++ code/game/objects/items/helper_procs.dm | 2 ++ code/modules/mob/living/carbon/human/examine.dm | 6 ++++++ code/modules/mob/living/carbon/human/life.dm | 2 +- 8 files changed, 38 insertions(+), 12 deletions(-) diff --git a/code/WorkInProgress/Chemistry-Reagents.dm b/code/WorkInProgress/Chemistry-Reagents.dm index 2a1c618ecd6..4435062fcaf 100644 --- a/code/WorkInProgress/Chemistry-Reagents.dm +++ b/code/WorkInProgress/Chemistry-Reagents.dm @@ -1010,6 +1010,22 @@ datum ..() return + clonexadone + name = "Clonexadone" + id = "clonexadone" + description = "A liquid compound similar to that used in the cloning process. Can be used to 'finish' clones that get ejected early when used in conjunction with a cryo tube." + reagent_state = LIQUID + on_mob_life(var/mob/M) + if(!M) M = holder.my_atom + if(M.bodytemperature < 170) + if(M:cloneloss) M:cloneloss = max(0, M:cloneloss-6) + if(M:oxyloss) M:oxyloss = max(0, M:oxyloss-6) + if(M:bruteloss) M:bruteloss = max(0, M:bruteloss-6) + if(M:fireloss) M:fireloss = max(0, M:fireloss-6) + if(M:toxloss) M:toxloss = max(0, M:toxloss-6) + ..() + return + spaceacillin name = "Spaceacillin" id = "spaceacillin" diff --git a/code/WorkInProgress/Chemistry-Recipes.dm b/code/WorkInProgress/Chemistry-Recipes.dm index eb05a3d6f7f..65d6cfe36e7 100644 --- a/code/WorkInProgress/Chemistry-Recipes.dm +++ b/code/WorkInProgress/Chemistry-Recipes.dm @@ -217,6 +217,13 @@ datum required_reagents = list("dexalin" = 1, "water" = 1, "oxygen" = 1) result_amount = 10 + clonexadone + name = "Clonexadone" + id = "clonexadone" + result = "clonexadone" + required_reagents = list("plasma" = 1, "cryoxadone" = 1, "sodium" = 1) + result_amount = 10 + spaceacillin name = "Spaceacillin" id = "spaceacillin" diff --git a/code/WorkInProgress/cloning.dm b/code/WorkInProgress/cloning.dm index c27e2476db9..4c69c9f2c12 100644 --- a/code/WorkInProgress/cloning.dm +++ b/code/WorkInProgress/cloning.dm @@ -450,14 +450,12 @@ src.icon_state = "pod_1" //Get the clone body ready src.occupant.rejuv = 10 - src.occupant.bruteloss += 90 - src.occupant.toxloss += 50 - src.occupant.oxyloss += 40 + src.occupant.cloneloss += 190 //new damage var so you can't eject a clone early then stab them to abuse the current damage system --NeoFite src.occupant.brainloss += 90 src.occupant.paralysis += 4 //Here let's calculate their health so the pod doesn't immediately eject them!!! - src.occupant.health = (src.occupant.bruteloss + src.occupant.toxloss + src.occupant.oxyloss) + src.occupant.health = (src.occupant.bruteloss + src.occupant.toxloss + src.occupant.oxyloss + src.occupant.cloneloss) src.occupant << "\blue Clone generation process initiated." src.occupant << "\blue This will take a moment, please hold." @@ -536,10 +534,7 @@ src.occupant.paralysis = 4 //Slowly get that clone healed and finished. - src.occupant.bruteloss = max(src.occupant.bruteloss-1, 0) - - //At this rate one clone takes about 95 seconds to produce.(with heal_level 90) - src.occupant.toxloss = max(src.occupant.toxloss-0.5, 0) + src.occupant.cloneloss = max(src.occupant.cloneloss-1, 0) //Premature clones may have brain damage. src.occupant.brainloss = max(src.occupant.brainloss-1, 0) @@ -551,9 +546,6 @@ //Also heal some oxyloss ourselves because inaprovaline is so bad at preventing it!! src.occupant.oxyloss = max(src.occupant.oxyloss-2, 0) - //Stop baking in the tubes you jerks. - src.occupant.fireloss = max(src.occupant.fireloss-2, 0) - use_power(7500) //This might need tweaking. return diff --git a/code/defines/mob/mob.dm b/code/defines/mob/mob.dm index 07874221737..da28cdd6c82 100644 --- a/code/defines/mob/mob.dm +++ b/code/defines/mob/mob.dm @@ -106,6 +106,7 @@ var/r_epil = 0 var/r_ch_cou = 0 var/r_Tourette = 0 + var/cloneloss = 0 var/miming = null //checks if the guy is a mime var/silent = null //Can't talk. Value goes down every life proc. diff --git a/code/game/objects/devices/scanners.dm b/code/game/objects/devices/scanners.dm index 71dd99955b7..8f6ebf36588 100644 --- a/code/game/objects/devices/scanners.dm +++ b/code/game/objects/devices/scanners.dm @@ -171,6 +171,8 @@ MASS SPECTROMETER user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.toxloss > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.fireloss > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.bruteloss > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1) else user.show_message(text("\blue [] | [] | [] | []", M.oxyloss > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.toxloss > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.fireloss > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.bruteloss > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1) + if (M.cloneloss) + user.show_message(text("\red Subject appears to have been imperfectly cloned."), 1) if (M.virus) user.show_message(text("\red Warning: Virus Detected.\nName: [M.virus.name].\nType: [M.virus.spread].\nStage: [M.virus.stage]/[M.virus.max_stages].\nPossible Cure: [M.virus.cure]")) if (M.reagents:get_reagent_amount("inaprovaline")) diff --git a/code/game/objects/items/helper_procs.dm b/code/game/objects/items/helper_procs.dm index eddfee0b94e..58abbdfb227 100644 --- a/code/game/objects/items/helper_procs.dm +++ b/code/game/objects/items/helper_procs.dm @@ -66,10 +66,12 @@ return /obj/proc/hear_talk(mob/M as mob, text) +/* var/mob/mo = locate(/mob) in src if(mo) var/rendered = "[M.name]: [text]" mo.show_message(rendered, 2) + */ return /proc/is_type_in_list(var/atom/A, var/list/L) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 1f94b5b67a3..c8ab841aa98 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -106,6 +106,12 @@ else usr << "\red [src.name] looks severely injured!" + if (src.cloneloss) + if (src.cloneloss < 30) + usr << "\red [src.name] looks slightly... unfinished?" + else + usr << "\red [src.name] looks very... unfinished?" + if (src.fireloss) if (src.fireloss < 30) usr << "\red [src.name] looks slightly burned!" diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 63f607ce107..58b2509702a 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -599,7 +599,7 @@ handle_regular_status_updates() - health = 100 - (oxyloss + toxloss + fireloss + bruteloss) + health = 100 - (oxyloss + toxloss + fireloss + bruteloss + cloneloss) if(oxyloss > 50) paralysis = max(paralysis, 3)