Rejuvenation Fix/Refactor Pass 1

This commit is contained in:
KasparoVy
2016-05-16 07:14:37 -04:00
parent f842b7d8e5
commit 4f05d7b3f5
3 changed files with 51 additions and 6 deletions
+42 -3
View File
@@ -1255,6 +1255,45 @@
else
germ_level += n
/mob/living/carbon/human/proc/check_and_regenerate_organs(var/mob/living/carbon/human/H) //Regenerates missing limbs/organs.
var/datum/species/S = H.species
var/list/species_organs = S.has_organ
var/list/species_limbs = S.has_limbs
var/list/types_of_int_organs = list()
for(var/obj/item/organ/internal/I in H.internal_organs)
types_of_int_organs |= I.type
//Removing stumps.
for(var/obj/item/organ/organ in H.contents)
if(istype(organ, /obj/item/organ/external/stump)) //Get rid of all stumps.
qdel(organ)
H.contents -= organ //Making sure the list entry is removed.
for(var/obj/item/organ/organ in H.organs)
if(istype(organ, /obj/item/organ/external/stump))
qdel(organ)
H.organs -= organ //Making sure the list entry is removed.
for(var/organ_name in H.organs_by_name)
var/obj/item/organ/organ = H.organs_by_name[organ_name]
if(istype(organ, /obj/item/organ/external/stump) || !organ) //The !organ is for IPC limb losses, since those are handled in a way that creates null list entries instead of stumps.
qdel(organ)
H.organs_by_name -= organ_name //Making sure the list entry is removed.
//Replacing lost limbs with the species default.
for(var/limb_type in species_limbs)
if(!(limb_type in H.organs_by_name))
var/list/organ_data = species_limbs[limb_type]
var/limb_path = organ_data["path"]
var/obj/item/organ/external/O = new limb_path(H)
O.owner = H
H.organs |= H.organs_by_name[O.limb_name]
//Replacing lost organs with the species default.
for(var/index in species_organs)
var/organ = species_organs[index]
if(!(organ in types_of_int_organs))
var/obj/item/organ/internal/I = new organ(H)
I.insert(H)
/mob/living/carbon/human/revive()
if(species && !(species.flags & NO_BLOOD))
@@ -1262,9 +1301,9 @@
vessel.add_reagent(blood_reagent, max_blood-vessel.total_volume)
fixblood()
// Fix up all organs.
// This will ignore any prosthetics in the prefs currently.
species.create_organs(src)
//Fix up all organs and replace lost ones.
restore_all_organs()
check_and_regenerate_organs(src)
if(!client || !key) //Don't boot out anyone already in the mob.
for (var/obj/item/organ/internal/brain/H in world)
+7 -2
View File
@@ -320,7 +320,6 @@
/mob/living/proc/revive()
rejuvenate()
buckled = initial(src.buckled)
if(iscarbon(src))
var/mob/living/carbon/C = src
@@ -380,7 +379,13 @@
fire_stacks = 0
on_fire = 0
suiciding = 0
buckled = initial(src.buckled)
if(buckled)
buckled.buckled_mob = null
buckled = null
anchored = initial(src.anchored)
update_canmove()
clear_alert("buckled")
post_buckle_mob(src)
if(iscarbon(src))
var/mob/living/carbon/C = src
@@ -308,7 +308,7 @@ This function completely restores a damaged organ to perfect condition.
*/
/obj/item/organ/external/rejuvenate()
damage_state = "00"
if(status & 128) //Robotic organs stay robotic. Fix because right click rejuvinate makes IPC's organs organic.
if(status & 128) //Robotic organs stay robotic. Fix because right click rejuvinate makes IPC's organs organic.
status = 128
else
status = 0
@@ -316,6 +316,7 @@ This function completely restores a damaged organ to perfect condition.
perma_injury = 0
brute_dam = 0
burn_dam = 0
wounds = list() //Clears all wounds! Good as new.
// handle internal organs
for(var/obj/item/organ/internal/current_organ in internal_organs)