Moved radiation and light processing to organs.

This commit is contained in:
Zuhayr
2014-09-30 11:58:40 +09:30
parent c0c4b99b34
commit 74eae5a6bd
9 changed files with 134 additions and 89 deletions
-13
View File
@@ -75,19 +75,6 @@
for(var/datum/organ/internal/I in internal_organs)
I.process()
// Also handles some internal organ processing when the organs are missing completely.
// Only handles missing liver and kidneys for now.
// This is a bit harsh, but really if you're missing an entire bodily organ you're in deep shit.
if(species.has_organ["liver"])
var/datum/organ/internal/liver = internal_organs_by_name["liver"]
if(!liver || liver.status & ORGAN_CUT_AWAY)
reagents.add_reagent("toxin", rand(1,3))
if(species.has_organ["kidneys"])
var/datum/organ/internal/kidney = internal_organs_by_name["kidneys"]
if(!kidney || kidney.status & ORGAN_CUT_AWAY)
reagents.add_reagent("toxin", rand(1,3))
if(!force_process && !bad_external_organs.len)
return
+27 -8
View File
@@ -5,18 +5,10 @@
/datum/organ/internal/diona/process()
return
/datum/organ/internal/diona/nutrients
name = "nutrient vessel"
parent_organ = "chest"
/datum/organ/internal/diona/strata
name = "neural strata"
parent_organ = "chest"
/datum/organ/internal/diona/node
name = "receptor node"
parent_organ = "head"
/datum/organ/internal/diona/bladder
name = "gas bladder"
parent_organ = "head"
@@ -29,10 +21,21 @@
name = "anchoring ligament"
parent_organ = "groin"
/datum/organ/internal/diona/node
name = "receptor node"
parent_organ = "head"
removed_type = /obj/item/organ/diona/node
/datum/organ/internal/diona/nutrients
name = "nutrient vessel"
parent_organ = "chest"
removed_type = /obj/item/organ/diona/nutrients
/obj/item/organ/diona
name = "diona nymph"
icon = 'icons/obj/objects.dmi'
icon_state = "nymph"
organ_tag = "special" // Turns into a nymph instantly, no transplanting possible.
/obj/item/organ/diona/removed(var/mob/living/target,var/mob/living/user)
@@ -53,6 +56,22 @@
del(src)
//These are different to the standard diona organs as they have a purpose in other
// species (absorbing radiation and light respectively)
/obj/item/organ/diona/nutrients
name = "nutrient vessel"
organ_tag = "nutrient vessel"
/obj/item/organ/diona/nutrients/removed()
return
/obj/item/organ/diona/node
name = "receptor node"
organ_tag = "receptor node"
/obj/item/organ/diona/node/removed()
return
//CORTICAL BORER ORGANS.
/datum/organ/internal/borer
name = "cortical borer"
+47 -17
View File
@@ -1,3 +1,5 @@
#define PROCESS_ACCURACY 10
/****************************************************
INTERNAL ORGANS
****************************************************/
@@ -21,7 +23,7 @@
return damage >= min_bruised_damage
/datum/organ/internal/proc/is_broken()
return damage >= min_broken_damage
return damage >= min_broken_damage || status & ORGAN_CUT_AWAY
/datum/organ/internal/New(mob/living/carbon/human/H)
..()
@@ -163,11 +165,12 @@
/datum/organ/internal/liver
name = "liver"
parent_organ = "chest"
var/process_accuracy = 10
removed_type = /obj/item/organ/liver
process()
..()
if (germ_level > INFECTION_LEVEL_ONE)
if(prob(1))
owner << "\red Your skin itches."
@@ -175,40 +178,67 @@
if(prob(1))
spawn owner.vomit()
if(owner.life_tick % process_accuracy == 0)
if(src.damage < 0)
src.damage = 0
if(owner.life_tick % PROCESS_ACCURACY == 0)
//High toxins levels are dangerous
if(owner.getToxLoss() >= 60 && !owner.reagents.has_reagent("anti_toxin"))
//Healthy liver suffers on its own
if (src.damage < min_broken_damage)
src.damage += 0.2 * process_accuracy
src.damage += 0.2 * PROCESS_ACCURACY
//Damaged one shares the fun
else
var/datum/organ/internal/O = pick(owner.internal_organs)
if(O)
O.damage += 0.2 * process_accuracy
O.damage += 0.2 * PROCESS_ACCURACY
//Detox can heal small amounts of damage
if (src.damage && src.damage < src.min_bruised_damage && owner.reagents.has_reagent("anti_toxin"))
src.damage -= 0.2 * process_accuracy
src.damage -= 0.2 * PROCESS_ACCURACY
// Damaged liver means some chemicals are very dangerous
if(src.damage >= src.min_bruised_damage)
for(var/datum/reagent/R in owner.reagents.reagent_list)
// Ethanol and all drinks are bad
if(istype(R, /datum/reagent/ethanol))
owner.adjustToxLoss(0.1 * process_accuracy)
// Can't cope with toxins at all
if(istype(R, /datum/reagent/toxin))
owner.adjustToxLoss(0.3 * process_accuracy)
if(src.damage < 0)
src.damage = 0
// Get the effectiveness of the liver.
var/filter_effect = 3
if(is_bruised())
filter_effect -= 1
if(is_broken())
filter_effect -= 2
// Do some reagent filtering/processing.
for(var/datum/reagent/R in owner.reagents.reagent_list)
// Damaged liver means some chemicals are very dangerous
// The liver is also responsible for clearing out alcohol and toxins.
// Ethanol and all drinks are bad.K
if(istype(R, /datum/reagent/ethanol))
if(filter_effect < 3)
owner.adjustToxLoss(0.1 * PROCESS_ACCURACY)
owner.reagents.remove_reagent(R.id, R.custom_metabolism*filter_effect)
// Can't cope with toxins at all
else if(istype(R, /datum/reagent/toxin))
if(filter_effect < 3)
owner.adjustToxLoss(0.3 * PROCESS_ACCURACY)
owner.reagents.remove_reagent(R.id, ALCOHOL_METABOLISM*filter_effect)
/datum/organ/internal/kidney
name = "kidneys"
parent_organ = "groin"
removed_type = /obj/item/organ/kidneys
process()
..()
// Coffee is really bad for you with busted kidneys.
// This should probably be expanded in some way, but fucked if I know
// what else kidneys can process in our reagent list.
var/datum/reagent/coffee = locate(/datum/reagent/drink/coffee) in owner.reagents.reagent_list
if(coffee)
if(is_bruised())
owner.adjustToxLoss(0.1 * PROCESS_ACCURACY)
else if(is_broken())
owner.adjustToxLoss(0.3 * PROCESS_ACCURACY)
/datum/organ/internal/brain
name = "brain"
parent_organ = "head"