From eeee0dfb9fae2b7693c205f890c0d0d9e23e0b1a Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 3 Apr 2015 06:12:36 -0700 Subject: [PATCH] Numerous runtime/oversight fixes. --- code/modules/mob/living/carbon/human/human.dm | 17 ++----------- code/modules/organs/organ.dm | 25 +++++++++++-------- code/modules/organs/organ_icon.dm | 2 +- code/modules/organs/organ_internal.dm | 1 + code/modules/surgery/organs_internal.dm | 6 ++--- 5 files changed, 21 insertions(+), 30 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 1e693fd63f..e03dec1617 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -926,23 +926,12 @@ germ_level += n /mob/living/carbon/human/revive() - for (var/obj/item/organ/external/O in organs) - O.status &= ~ORGAN_BROKEN - O.status &= ~ORGAN_BLEEDING - O.status &= ~ORGAN_SPLINTED - O.status &= ~ORGAN_CUT_AWAY - O.status &= ~ORGAN_ATTACHABLE - O.wounds.Cut() - O.heal_damage(1000,1000,1,1) - - var/obj/item/organ/external/head/h = organs_by_name["head"] - h.disfigured = 0 if(species && !(species.flags & NO_BLOOD)) vessel.add_reagent("blood",560-vessel.total_volume) fixblood() - // Fix up any missing organs. + // Fix up all organs. // This will ignore any prosthetics in the prefs currently. species.create_organs(src) @@ -954,11 +943,9 @@ H.brainmob.mind.transfer_to(src) del(H) - for(var/obj/item/organ/I in internal_organs) - I.damage = 0 - for (var/datum/disease/virus in viruses) virus.cure() + for (var/ID in virus2) var/datum/disease2/disease/V = virus2[ID] V.cure(src) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 78e7f64db3..e0e888b109 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -3,7 +3,7 @@ var/list/organ_cache = list() /obj/item/organ name = "organ" icon = 'icons/obj/surgery.dmi' - + var/dead_icon var/mob/living/carbon/human/owner = null var/status = 0 var/vital //Lose a vital limb, die immediately. @@ -50,11 +50,13 @@ var/list/organ_cache = list() holder.internal_organs |= src /obj/item/organ/proc/die() - name = "dead [initial(name)]" - health = 0 + if(status & ORGAN_ROBOT) + return + name = "dead [name]" + damage = max_damage processing_objects -= src - //TODO: Grey out the icon state. - //TODO: Inject an organ with peridaxon to make it alive again. + if(dead_icon) + icon_state = dead_icon /obj/item/organ/process() @@ -75,10 +77,10 @@ var/list/organ_cache = list() if(B && prob(40)) reagents.remove_reagent("blood",0.1) blood_splatter(src,B,1) - - health -= rand(1,3) - if(health <= 0) + damage += rand(1,3) + if(damage >= max_damage) die() + else if(owner.bodytemperature >= 170) //cryo stops germs from moving and doing their bad stuffs //** Handle antibiotics and curing infections handle_antibiotics() @@ -179,9 +181,10 @@ var/list/organ_cache = list() else src.damage += amount - var/obj/item/organ/external/parent = owner.get_organ(parent_organ) - if (!silent) - owner.custom_pain("Something inside your [parent.name] hurts a lot.", 1) + if(owner && parent_organ) + var/obj/item/organ/external/parent = owner.get_organ(parent_organ) + if(parent && !silent) + owner.custom_pain("Something inside your [parent.name] hurts a lot.", 1) /obj/item/organ/proc/robotize() //Being used to make robutt hearts, etc robotic = 2 diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm index 6749f67574..db0a180291 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/organs/organ_icon.dm @@ -26,7 +26,7 @@ var/global/list/limb_icon_cache = list() /obj/item/organ/external/head/sync_colour_to_human(var/mob/living/carbon/human/human) ..() var/obj/item/organ/eyes/eyes = owner.internal_organs_by_name["eyes"] - eyes.update_colour() + if(eyes) eyes.update_colour() /obj/item/organ/external/head/removed() get_icon() diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index bed05e35ad..4cb1dc9653 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -11,6 +11,7 @@ icon_state = "heart-on" organ_tag = "heart" parent_organ = "chest" + dead_icon = "heart-off" /obj/item/organ/lungs name = "lungs" diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 8f5d7155dd..182c3eac2a 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -228,7 +228,7 @@ var/list/attached_organs = list() for(var/organ in target.internal_organs_by_name) var/obj/item/organ/I = target.internal_organs_by_name[organ] - if(!I.status && I.parent_organ == target_zone) + if(I && !I.status && I.parent_organ == target_zone) attached_organs |= organ var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs @@ -347,7 +347,7 @@ return 0 else if(target.species.has_organ[O.organ_tag]) - if(O.is_damaged()) + if(O.damage > (O.max_damage * 0.75)) user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted." return 2 @@ -410,7 +410,7 @@ var/list/removable_organs = list() for(var/organ in target.internal_organs_by_name) var/obj/item/organ/I = target.internal_organs_by_name[organ] - if(I.status & ORGAN_CUT_AWAY && I.parent_organ == target_zone) + if(I && I.status & ORGAN_CUT_AWAY && I.parent_organ == target_zone) removable_organs |= organ var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs