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
This commit is contained in:
n3ophyt3@gmail.com
2011-03-12 00:35:03 +00:00
parent 06654b7a11
commit c48804b204
8 changed files with 38 additions and 12 deletions

View File

@@ -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"

View File

@@ -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"

View File

@@ -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 <b>Clone generation process initiated.</b>"
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

View File

@@ -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.

View File

@@ -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 <b>Warning: Virus Detected.</b>\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"))

View File

@@ -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 = "<span class='game say'><span class='name'>[M.name]: </span> <span class='message'>[text]</span></span>"
mo.show_message(rendered, 2)
*/
return
/proc/is_type_in_list(var/atom/A, var/list/L)

View File

@@ -106,6 +106,12 @@
else
usr << "\red <B>[src.name] looks severely injured!</B>"
if (src.cloneloss)
if (src.cloneloss < 30)
usr << "\red [src.name] looks slightly... unfinished?"
else
usr << "\red <B>[src.name] looks very... unfinished?</B>"
if (src.fireloss)
if (src.fireloss < 30)
usr << "\red [src.name] looks slightly burned!"

View File

@@ -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)