From a3ed7fc033401046a20beb8913d3d278299b206b Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 3 Apr 2015 05:41:33 -0700 Subject: [PATCH 01/14] Should fix the head and hair issues from the organ rewrite. --- code/game/dna/dna2_helpers.dm | 1 + code/game/dna/dna_misc.dm | 4 +- .../mob/living/carbon/human/human_organs.dm | 6 +- .../mob/living/carbon/human/update_icons.dm | 36 +++++---- code/modules/mob/new_player/new_player.dm | 1 + code/modules/organs/organ.dm | 2 +- code/modules/organs/organ_external.dm | 6 +- code/modules/organs/organ_icon.dm | 80 ++++++++++--------- code/modules/organs/organ_internal.dm | 39 +++------ 9 files changed, 84 insertions(+), 91 deletions(-) diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index e1fda4965c..ce6320cd88 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -166,6 +166,7 @@ H.f_style = facial_hair_styles_list[beard] H.force_update_limbs() + H.update_eyes() H.update_hair() return 1 diff --git a/code/game/dna/dna_misc.dm b/code/game/dna/dna_misc.dm index 1362aa6888..b314852214 100644 --- a/code/game/dna/dna_misc.dm +++ b/code/game/dna/dna_misc.dm @@ -235,9 +235,9 @@ H.r_eyes = hex2num(getblock(structure,8,3)) H.g_eyes = hex2num(getblock(structure,9,3)) H.b_eyes = hex2num(getblock(structure,10,3)) + if(H.internal_organs_by_name["eyes"]) - var/obj/item/organ/eyes/eyes = H.internal_organs_by_name["eyes"] - eyes.eye_colour = list(H.r_eyes,H.g_eyes,H.b_eyes) + H.update_eyes() if (isblockon(getblock(structure, 11,3),11 , 1)) H.gender = FEMALE diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index de7a982b1a..def0d3726b 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -1,7 +1,7 @@ /mob/living/carbon/human/proc/update_eyes() - if(internal_organs_by_name["eyes"]) - var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"] - eyes.eye_colour = list(r_eyes,g_eyes,b_eyes) + var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"] + if(eyes) + eyes.update_colour() regenerate_icons() /mob/living/carbon/var/list/internal_organs = list() diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 0882c558c7..dbc78f513c 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -237,24 +237,30 @@ var/global/list/damage_icon_parts = list() //CACHING: Generate an index key from visible bodyparts. //0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic. - //Create a new, blank icon for our mob to use. if(stand_icon) del(stand_icon) stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank") + var/icon_key = "[species.race_key][g][s_tone][r_skin][g_skin][b_skin]" + var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"] - var/icon_key = "[species.race_key][g][s_tone]" - for(var/obj/item/organ/external/part in organs) - if(part.is_stump() || (part.status & ORGAN_DESTROYED)) - icon_key = "[icon_key]0" + if(eyes) + icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]" + else + icon_key += "#000000" + + for(var/organ_tag in species.has_limbs) + var/obj/item/organ/external/part = organs_by_name[organ_tag] + if(isnull(part) || part.is_stump() || (part.status & ORGAN_DESTROYED)) + icon_key += "0" else if(part.status & ORGAN_ROBOT) - icon_key = "[icon_key]2[part.model ? "-[part.model]": ""]" + icon_key += "2[part.model ? "-[part.model]": ""]" else if(part.status & ORGAN_DEAD) - icon_key = "[icon_key]3" + icon_key += "3" else - icon_key = "[icon_key]1" + icon_key += "1" - icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0][s_tone]" + icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]" var/icon/base_icon if(human_icon_cache[icon_key]) @@ -784,11 +790,11 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/update_inv_r_hand(var/update_icons=1) if(r_hand) r_hand.screen_loc = ui_rhand //TODO - + var/t_icon = INV_R_HAND_DEF_ICON if(r_hand.item_icons && (icon_r_hand in r_hand.item_icons)) t_icon = r_hand.item_icons[icon_r_hand] - + var/t_state = r_hand.item_state //useful for clothing that changes icon_state but retains the same sprite on the mob when held in hand if(!t_state) t_state = r_hand.icon_state if(r_hand.icon_override) @@ -800,18 +806,18 @@ var/global/list/damage_icon_parts = list() if (handcuffed) drop_r_hand() else overlays_standing[R_HAND_LAYER] = null - + if(update_icons) update_icons() /mob/living/carbon/human/update_inv_l_hand(var/update_icons=1) if(l_hand) l_hand.screen_loc = ui_lhand //TODO - + var/t_icon = INV_L_HAND_DEF_ICON if(l_hand.item_icons && (icon_l_hand in l_hand.item_icons)) t_icon = l_hand.item_icons[icon_l_hand] - + var/t_state = l_hand.item_state //useful for clothing that changes icon_state but retains the same sprite on the mob when held in hand if(!t_state) t_state = l_hand.icon_state if(l_hand.icon_override) @@ -823,7 +829,7 @@ var/global/list/damage_icon_parts = list() if (handcuffed) drop_l_hand() else overlays_standing[L_HAND_LAYER] = null - + if(update_icons) update_icons() /mob/living/carbon/human/proc/update_tail_showing(var/update_icons=1) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 1d67b712f5..299caf37c5 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -474,6 +474,7 @@ // Do the initial caching of the player's body icons. new_character.force_update_limbs() + new_character.update_eyes() new_character.regenerate_icons() new_character.key = key //Manually transfer the key to log them in diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index f97df89080..78e7f64db3 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -286,7 +286,7 @@ var/list/organ_cache = list() target.r_eyes = eye_colour[1] target.g_eyes = eye_colour[2] target.b_eyes = eye_colour[3] - target.update_body() + target.update_eyes() ..() /obj/item/organ/proc/bitten(mob/user) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index d8ba25d750..718051dd7f 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -243,10 +243,10 @@ status &= ~ORGAN_BROKEN perma_injury = 0 - if((brute || burn) && children && children.len && (owner.species.flags & REGENERATES_LIMBS)) + /*if((brute || burn) && children && children.len && (owner.species.flags & REGENERATES_LIMBS)) var/obj/item/organ/external/stump/S = locate() in children if(S) - world << "Extra healing to go around ([brute+burn]) and [owner] needs a replacement limb." + world << "Extra healing to go around ([brute+burn]) and [owner] needs a replacement limb."*/ //Sync the organ's damage with its wounds src.update_damages() @@ -656,9 +656,9 @@ Note that amputating the affected organ does in fact remove the infection from t parent = null spawn(1) - owner.update_body() owner.updatehealth() owner.UpdateDamageIcon() + owner.regenerate_icons() dir = 2 switch(disintegrate) diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm index b0e23df3d2..6749f67574 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/organs/organ_icon.dm @@ -23,6 +23,49 @@ var/global/list/limb_icon_cache = list() if(human.species.flags & HAS_SKIN_COLOR) s_col = list(human.r_skin, human.g_skin, human.b_skin) +/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() + +/obj/item/organ/external/head/removed() + get_icon() + ..() + +/obj/item/organ/external/head/get_icon() + + ..() + if(owner.species.has_organ["eyes"]) + var/obj/item/organ/eyes/eyes = owner.internal_organs_by_name["eyes"] + if(owner.species.eyes) + var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', owner.species.eyes) + if(eyes) + eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD) + else + eyes_icon.Blend(rgb(128,0,0), ICON_ADD) + mob_icon.Blend(eyes_icon, ICON_OVERLAY) + + if(owner.lip_style && (owner.species && (owner.species.flags & HAS_LIPS))) + mob_icon.Blend(new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s"), ICON_OVERLAY) + + if(owner.f_style) + var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style] + if(facial_hair_style && facial_hair_style.species_allowed && (owner.species.name in facial_hair_style.species_allowed)) + var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") + if(facial_hair_style.do_colouration) + facial_s.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_ADD) + overlays |= facial_s + + if(owner.h_style && !(owner.head && (owner.head.flags & BLOCKHEADHAIR))) + var/datum/sprite_accessory/hair_style = hair_styles_list[owner.h_style] + if(hair_style && (owner.species.name in hair_style.species_allowed)) + var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") + if(hair_style.do_colouration) + hair_s.Blend(rgb(owner.r_hair, owner.g_hair, owner.b_hair), ICON_ADD) + overlays |= hair_s + + return mob_icon + /obj/item/organ/external/proc/get_icon(var/skeletal) var/gender @@ -66,43 +109,6 @@ var/global/list/limb_icon_cache = list() return mob_icon -/obj/item/organ/external/head/get_icon(var/skeletal) - - if(skeletal || !owner) - return - - ..() - - if(owner.species.has_organ["eyes"]) - var/obj/item/organ/eyes/eyes = owner.internal_organs_by_name["eyes"] - if(eyes && owner.species.eyes) - var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', owner.species.eyes) - eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD) - mob_icon.Blend(eyes_icon, ICON_OVERLAY) - - if(owner.lip_style && (owner.species && (owner.species.flags & HAS_LIPS))) - mob_icon.Blend(new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s"), ICON_OVERLAY) - - if(owner.f_style) - var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style] - if(facial_hair_style) - var/icon/facial = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - if(facial_hair_style.do_colouration) - facial.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_ADD) - mob_icon.Blend(facial, ICON_OVERLAY) - - if(owner.h_style && !(owner.head && (owner.head.flags & BLOCKHEADHAIR))) - var/datum/sprite_accessory/hair_style = hair_styles_list[owner.h_style] - if(hair_style) - var/icon/hair = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") - if(hair_style.do_colouration) - hair.Blend(rgb(owner.r_hair, owner.g_hair, owner.b_hair), ICON_ADD) - - mob_icon.Blend(hair, ICON_OVERLAY) - - icon = mob_icon - return mob_icon - // new damage icon system // adjusted to set damage_state to brute/burn code only (without r_name0 as before) /obj/item/organ/external/update_icon() diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 46e22e1e5f..bed05e35ad 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -69,6 +69,15 @@ parent_organ = "head" var/list/eye_colour = list(0,0,0) +/obj/item/organ/eyes/proc/update_colour() + if(!owner) + return + eye_colour = list( + owner.r_eyes ? owner.r_eyes : 0, + owner.g_eyes ? owner.g_eyes : 0, + owner.b_eyes ? owner.b_eyes : 0 + ) + /obj/item/organ/eyes/process() //Eye damage replaces the old eye_stat var. ..() if(!owner) @@ -78,36 +87,6 @@ if(is_broken()) owner.eye_blind = 20 -/obj/item/organ/eyes/New() - ..() - if(owner) - eye_colour = list( - owner.r_eyes ? owner.r_eyes : 0, - owner.g_eyes ? owner.g_eyes : 0, - owner.b_eyes ? owner.b_eyes : 0 - ) - -/obj/item/organ/eyes/removed(var/mob/living/target,var/mob/living/user) - - if(!eye_colour) - eye_colour = list(0,0,0) - - ..() //Make sure target is set so we can steal their eye colour for later. - var/mob/living/carbon/human/H = target - if(istype(H)) - eye_colour = list( - H.r_eyes ? H.r_eyes : 0, - H.g_eyes ? H.g_eyes : 0, - H.b_eyes ? H.b_eyes : 0 - ) - - // Leave bloody red pits behind! - H.r_eyes = 128 - H.g_eyes = 0 - H.b_eyes = 0 - H.update_body() - - /obj/item/organ/liver name = "liver" icon_state = "liver" From 6ce278a48697860cf0a890a49749e691f6d95d7e Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 3 Apr 2015 05:42:07 -0700 Subject: [PATCH 02/14] How did this sneak back in? Removes a monkey file. --- .../mob/living/carbon/monkey/update_icons.dm | 141 ------------------ 1 file changed, 141 deletions(-) delete mode 100644 code/modules/mob/living/carbon/monkey/update_icons.dm diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm deleted file mode 100644 index 1b3da8f49a..0000000000 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ /dev/null @@ -1,141 +0,0 @@ -//Monkey Overlays Indexes//////// -#define M_MASK_LAYER 1 -#define M_BACK_LAYER 2 -#define M_HANDCUFF_LAYER 3 -#define M_L_HAND_LAYER 4 -#define M_R_HAND_LAYER 5 -#define TARGETED_LAYER 6 -#define M_FIRE_LAYER 6 -#define M_TOTAL_LAYERS 7 -///////////////////////////////// - -/mob/living/carbon/monkey - var/list/overlays_lying[M_TOTAL_LAYERS] - var/list/overlays_standing[M_TOTAL_LAYERS] - -/mob/living/carbon/monkey/regenerate_icons() - ..() - update_inv_wear_mask(0) - update_inv_back(0) - update_inv_r_hand(0) - update_inv_l_hand(0) - update_inv_handcuffed(0) - update_fire(0) - update_icons() - //Hud Stuff - update_hud() - return - -/mob/living/carbon/monkey/update_icons() - update_hud() - lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again - overlays.Cut() - for(var/image/I in overlays_standing) - overlays += I - - if(lying) - var/matrix/M = matrix() - M.Turn(90) - M.Translate(1,-6) - src.transform = M - else - var/matrix/M = matrix() - src.transform = M - - -//////// -/mob/living/carbon/monkey/update_inv_wear_mask(var/update_icons=1) - if( wear_mask && istype(wear_mask, /obj/item/clothing/mask) ) - overlays_standing[M_MASK_LAYER] = image("icon" = 'icons/mob/monkey.dmi', "icon_state" = "[wear_mask.icon_state]") - wear_mask.screen_loc = ui_monkey_mask - else - overlays_standing[M_MASK_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/monkey/update_inv_r_hand(var/update_icons=1) - if(r_hand) - var/t_icon = INV_R_HAND_DEF_ICON - if(r_hand.item_icons && (icon_r_hand in r_hand.item_icons)) - t_icon = r_hand.item_icons[icon_r_hand] - - var/t_state = r_hand.item_state - if(!t_state) t_state = r_hand.icon_state - - overlays_standing[M_R_HAND_LAYER] = image("icon" = t_icon, "icon_state" = t_state) - r_hand.screen_loc = ui_rhand - if (handcuffed) drop_r_hand() - else - overlays_standing[M_R_HAND_LAYER] = null - - if(update_icons) update_icons() - - -/mob/living/carbon/monkey/update_inv_l_hand(var/update_icons=1) - if(l_hand) - var/t_icon = INV_L_HAND_DEF_ICON - if(l_hand.item_icons && (icon_l_hand in l_hand.item_icons)) - t_icon = l_hand.item_icons[icon_l_hand] - - var/t_state = l_hand.item_state - if(!t_state) t_state = l_hand.icon_state - - overlays_standing[M_L_HAND_LAYER] = image("icon" = t_icon, "icon_state" = t_state) - l_hand.screen_loc = ui_lhand - if (handcuffed) drop_l_hand() - else - overlays_standing[M_L_HAND_LAYER] = null - - if(update_icons) update_icons() - - -/mob/living/carbon/monkey/update_inv_back(var/update_icons=1) - if(back) - overlays_standing[M_BACK_LAYER] = image("icon" = 'icons/mob/back.dmi', "icon_state" = "[back.icon_state]") - back.screen_loc = ui_monkey_back - else - overlays_standing[M_BACK_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/monkey/update_inv_handcuffed(var/update_icons=1) - if(handcuffed) - drop_r_hand() - drop_l_hand() - stop_pulling() - overlays_standing[M_HANDCUFF_LAYER] = image("icon" = 'icons/mob/monkey.dmi', "icon_state" = "handcuff1") - else - overlays_standing[M_HANDCUFF_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/monkey/update_hud() - if (client) - client.screen |= contents - -//Call when target overlay should be added/removed -/mob/living/carbon/monkey/update_targeted(var/update_icons=1) - if (targeted_by && target_locked) - overlays_standing[TARGETED_LAYER] = target_locked - else if (!targeted_by && target_locked) - del(target_locked) - if (!targeted_by) - overlays_standing[TARGETED_LAYER] = null - if(update_icons) update_icons() - -/mob/living/carbon/monkey/update_fire(var/update_icons=1) - if(on_fire) - overlays_standing[M_FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing", "layer"= -M_FIRE_LAYER) - else - overlays_standing[M_FIRE_LAYER] = null - if(update_icons) update_icons() -//Monkey Overlays Indexes//////// -#undef M_MASK_LAYER -#undef M_BACK_LAYER -#undef M_HANDCUFF_LAYER -#undef M_L_HAND_LAYER -#undef M_R_HAND_LAYER -#undef TARGETED_LAYER -#undef M_FIRE_LAYER -#undef M_TOTAL_LAYERS - From eeee0dfb9fae2b7693c205f890c0d0d9e23e0b1a Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 3 Apr 2015 06:12:36 -0700 Subject: [PATCH 03/14] 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 From 67c6c4321fb8f83da90e617f821662f5f86eaef3 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 3 Apr 2015 06:18:34 -0700 Subject: [PATCH 04/14] Fixes an issue with internal organ transplants. --- code/modules/organs/organ.dm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index e0e888b109..6ff9d07e5d 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -278,9 +278,8 @@ var/list/organ_cache = list() target.internal_organs |= src affected.internal_organs |= src target.internal_organs_by_name[organ_tag] = src - status |= ORGAN_CUT_AWAY - - del(src) + if(robotic) + status |= ORGAN_ROBOT /obj/item/organ/eyes/replaced(var/mob/living/carbon/human/target) @@ -301,7 +300,6 @@ var/list/organ_cache = list() var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list blood_splatter(src,B,1) - user.drop_from_inventory(src) var/obj/item/weapon/reagent_containers/food/snacks/organ/O = new(get_turf(src)) O.name = name From 29cd70cbdd9b8e24e4996fb6295a7807192b94c7 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 3 Apr 2015 06:44:52 -0700 Subject: [PATCH 05/14] Fixes robot limbs not spawning subparts. --- code/modules/surgery/robolimbs.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/surgery/robolimbs.dm b/code/modules/surgery/robolimbs.dm index e845d8bb7b..843469e381 100644 --- a/code/modules/surgery/robolimbs.dm +++ b/code/modules/surgery/robolimbs.dm @@ -37,11 +37,11 @@ user.visible_message("\blue [user] has attached \the [tool] to [target].", \ "\blue You have attached \the [tool] to [target].") - if(L.part) + if(L.part)http://i.imgur.com/g19Dq0G.png for(var/part_name in L.part) if(!isnull(target.get_organ(part_name))) continue - var/list/organ_data = target.species.has_limbs["[target_zone]"] + var/list/organ_data = target.species.has_limbs["[part_name]"] if(!organ_data) continue var/new_limb_type = organ_data["path"] From 2ae7c935820c1ab688dc693c9f5126211b64d442 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 3 Apr 2015 18:47:59 -0700 Subject: [PATCH 06/14] God dammit copypaste before commit. --- code/modules/surgery/robolimbs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/robolimbs.dm b/code/modules/surgery/robolimbs.dm index 843469e381..578833e418 100644 --- a/code/modules/surgery/robolimbs.dm +++ b/code/modules/surgery/robolimbs.dm @@ -37,7 +37,7 @@ user.visible_message("\blue [user] has attached \the [tool] to [target].", \ "\blue You have attached \the [tool] to [target].") - if(L.part)http://i.imgur.com/g19Dq0G.png + if(L.part) for(var/part_name in L.part) if(!isnull(target.get_organ(part_name))) continue From 78925ebd79868d9f73de4a5de9346325148a642b Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 3 Apr 2015 18:48:49 -0700 Subject: [PATCH 07/14] Minor loc oversight. --- code/modules/organs/organ.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 6ff9d07e5d..fe631af041 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -274,6 +274,7 @@ var/list/organ_cache = list() transplant_data["blood_DNA"] = transplant_blood.data["blood_DNA"] owner = target + loc = owner processing_objects -= src target.internal_organs |= src affected.internal_organs |= src From 05e85fc13460a940a6e344537c40e9c9e504dba7 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 3 Apr 2015 19:11:35 -0700 Subject: [PATCH 08/14] Should fix the limb spam issue. --- code/modules/organs/organ.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index fe631af041..75bfc64d68 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -244,7 +244,7 @@ var/list/organ_cache = list() var/obj/item/organ/external/affected = owner.get_organ(parent_organ) if(affected) affected.internal_organs -= src - loc = owner.loc + loc = get_turf(owner) processing_objects |= src rejecting = null var/datum/reagent/blood/organ_blood = locate(/datum/reagent/blood) in reagents.reagent_list @@ -258,6 +258,8 @@ var/list/organ_cache = list() msg_admin_attack("[user.name] ([user.ckey]) removed a vital organ ([src]) from [owner.name] ([owner.ckey]) (INTENT: [uppertext(user.a_intent)]) (JMP)") owner.death() + owner = null + /obj/item/organ/proc/replaced(var/mob/living/carbon/human/target,var/obj/item/organ/external/affected) if(!istype(target)) return From ee657d64f8e106f251ff3c9196e0010c675b4e4a Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 3 Apr 2015 19:15:47 -0700 Subject: [PATCH 09/14] Fixes handle_grasp() spam. --- code/modules/mob/living/carbon/human/human_organs.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index def0d3726b..e40b915226 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -104,8 +104,12 @@ if(E.is_broken()) if(E.body_part == HAND_LEFT) + if(!l_hand) + continue drop_from_inventory(l_hand) else + if(!r_hand) + continue drop_from_inventory(r_hand) var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ") From be270bb0d3e08becbc69be532ef82ce0b15a623e Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 3 Apr 2015 20:12:40 -0700 Subject: [PATCH 10/14] Runtime fixes. --- code/modules/organs/organ.dm | 1 - code/modules/organs/organ_external.dm | 76 +++++++++++++++------------ code/modules/organs/organ_icon.dm | 4 -- 3 files changed, 41 insertions(+), 40 deletions(-) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 75bfc64d68..5f676b2c20 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -52,7 +52,6 @@ var/list/organ_cache = list() /obj/item/organ/proc/die() if(status & ORGAN_ROBOT) return - name = "dead [name]" damage = max_damage processing_objects -= src if(dead_icon) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 718051dd7f..61a92a6c57 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -634,8 +634,9 @@ Note that amputating the affected organ does in fact remove the infection from t "Your [src.name] explodes in a shower of gore!",\ "You hear the sickening splatter of gore.") - src.removed(null, ignore_children) - owner.traumatic_shock += 60 + var/mob/living/carbon/human/victim = owner //Keep a reference for post-removed(). + removed(null, ignore_children) + victim.traumatic_shock += 60 wounds.Cut() if(parent) @@ -649,22 +650,22 @@ Note that amputating the affected organ does in fact remove the infection from t parent.wounds |= W parent.update_damages() else - var/obj/item/organ/external/stump/stump = new (owner, 0, src) + var/obj/item/organ/external/stump/stump = new (victim, 0, src) stump.wounds |= W - owner.organs |= stump + victim.organs |= stump stump.update_damages() parent = null spawn(1) - owner.updatehealth() - owner.UpdateDamageIcon() - owner.regenerate_icons() + victim.updatehealth() + victim.UpdateDamageIcon() + victim.regenerate_icons() dir = 2 switch(disintegrate) if(DROPLIMB_EDGE) compile_icon() - add_blood(owner) + add_blood(victim) var/matrix/M = matrix() M.Turn(rand(180)) src.transform = M @@ -675,13 +676,13 @@ Note that amputating the affected organ does in fact remove the infection from t dir = 2 return if(DROPLIMB_BURN) - new /obj/effect/decal/cleanable/ash(get_turf(owner)) + new /obj/effect/decal/cleanable/ash(get_turf(victim)) if(DROPLIMB_BLUNT) - var/obj/effect/decal/cleanable/blood/gibs/gore = new owner.species.single_gib_type(get_turf(owner)) - if(owner.species.flesh_color) - gore.fleshcolor = owner.species.flesh_color - if(owner.species.blood_color) - gore.basecolor = owner.species.blood_color + var/obj/effect/decal/cleanable/blood/gibs/gore = new owner.species.single_gib_type(get_turf(victim)) + if(victim.species.flesh_color) + gore.fleshcolor = victim.species.flesh_color + if(victim.species.blood_color) + gore.basecolor = victim.species.blood_color gore.update_icon() gore.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30) @@ -704,20 +705,21 @@ Note that amputating the affected organ does in fact remove the infection from t icon = mob_icon return ..() -/obj/item/organ/external/proc/release_restraints() - if (owner.handcuffed && body_part in list(ARM_LEFT, ARM_RIGHT, HAND_LEFT, HAND_RIGHT)) - owner.visible_message(\ - "\The [owner.handcuffed.name] falls off of [owner.name].",\ - "\The [owner.handcuffed.name] falls off you.") - - owner.drop_from_inventory(owner.handcuffed) - - if (owner.legcuffed && body_part in list(FOOT_LEFT, FOOT_RIGHT, LEG_LEFT, LEG_RIGHT)) - owner.visible_message(\ - "\The [owner.legcuffed.name] falls off of [owner.name].",\ - "\The [owner.legcuffed.name] falls off you.") - - owner.drop_from_inventory(owner.legcuffed) +/obj/item/organ/external/proc/release_restraints(var/mob/living/carbon/human/holder) + if(!holder) + holder = owner + if(!holder) + return + if (holder.handcuffed && body_part in list(ARM_LEFT, ARM_RIGHT, HAND_LEFT, HAND_RIGHT)) + holder.visible_message(\ + "\The [holder.handcuffed.name] falls off of [holder.name].",\ + "\The [holder.handcuffed.name] falls off you.") + holder.drop_from_inventory(holder.handcuffed) + if (holder.legcuffed && body_part in list(FOOT_LEFT, FOOT_RIGHT, LEG_LEFT, LEG_RIGHT)) + holder.visible_message(\ + "\The [holder.legcuffed.name] falls off of [holder.name].",\ + "\The [holder.legcuffed.name] falls off you.") + holder.drop_from_inventory(holder.legcuffed) /obj/item/organ/external/proc/bandage() var/rval = 0 @@ -859,11 +861,15 @@ Note that amputating the affected organ does in fact remove the infection from t /obj/item/organ/external/removed(var/mob/living/user, var/ignore_children) + if(!owner) + return var/is_robotic = status & ORGAN_ROBOT + var/mob/living/carbon/human/victim = owner + get_icon() ..() status |= ORGAN_DESTROYED - owner.bad_external_organs -= src + victim.bad_external_organs -= src for(var/implant in implants) //todo: check if this can be left alone del(implant) @@ -880,19 +886,19 @@ Note that amputating the affected organ does in fact remove the infection from t organ.removed() organ.loc = src - release_restraints() - owner.organs -= src - owner.organs_by_name[limb_name] = null // Remove from owner's vars. + release_restraints(victim) + victim.organs -= src + victim.organs_by_name[limb_name] = null // Remove from owner's vars. //Robotic limbs explode if sabotaged. if(is_robotic && sabotaged) - owner.visible_message( - "\The [owner]'s [src.name] explodes violently!",\ + victim.visible_message( + "\The [victim]'s [src.name] explodes violently!",\ "Your [src.name] explodes!",\ "You hear an explosion!") explosion(get_turf(owner),-1,-1,2,3) var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, owner) + spark_system.set_up(5, 0, victim) spark_system.attach(owner) spark_system.start() spawn(10) diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm index db0a180291..1b25698c4a 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/organs/organ_icon.dm @@ -28,10 +28,6 @@ var/global/list/limb_icon_cache = list() var/obj/item/organ/eyes/eyes = owner.internal_organs_by_name["eyes"] if(eyes) eyes.update_colour() -/obj/item/organ/external/head/removed() - get_icon() - ..() - /obj/item/organ/external/head/get_icon() ..() From 3493b60fafe3fd0b4261af479014aafe40bcb98b Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 3 Apr 2015 21:03:06 -0700 Subject: [PATCH 11/14] Attempting to fix icon procs for organs. --- code/modules/organs/organ_external.dm | 7 +------ code/modules/organs/organ_icon.dm | 9 ++++++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 61a92a6c57..65399273a3 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -700,11 +700,6 @@ Note that amputating the affected organ does in fact remove the infection from t /obj/item/organ/external/proc/is_stump() return 0 -/obj/item/organ/external/replaced() - get_icon() - icon = mob_icon - return ..() - /obj/item/organ/external/proc/release_restraints(var/mob/living/carbon/human/holder) if(!holder) holder = owner @@ -865,7 +860,7 @@ Note that amputating the affected organ does in fact remove the infection from t return var/is_robotic = status & ORGAN_ROBOT var/mob/living/carbon/human/victim = owner - get_icon() + ..() status |= ORGAN_DESTROYED diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm index 1b25698c4a..d05a269f28 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/organs/organ_icon.dm @@ -5,13 +5,12 @@ var/global/list/limb_icon_cache = list() /obj/item/organ/external/proc/compile_icon() overlays.Cut() - get_icon() // This is a kludge, only one icon has more than one generation of children though. for(var/obj/item/organ/external/organ in contents) if(organ.children && organ.children.len) for(var/obj/item/organ/external/child in organ.children) - overlays += child.get_icon() - overlays += organ.get_icon() + overlays += child.mob_icon + overlays += organ.mob_icon /obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/carbon/human/human) s_tone = null @@ -28,6 +27,10 @@ var/global/list/limb_icon_cache = list() var/obj/item/organ/eyes/eyes = owner.internal_organs_by_name["eyes"] if(eyes) eyes.update_colour() +/obj/item/organ/external/head/removed() + get_icon() + ..() + /obj/item/organ/external/head/get_icon() ..() From b197cb69fadbfe1de6b06af335275b922d46fdc2 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 3 Apr 2015 21:36:47 -0700 Subject: [PATCH 12/14] More organ fixes. Yay. --- code/modules/organs/organ_external.dm | 2 ++ code/modules/organs/organ_internal.dm | 21 ++++++++++----------- code/modules/organs/wound.dm | 6 +++--- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 65399273a3..09c1c539ae 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -110,6 +110,8 @@ if(owner) replaced(owner) sync_colour_to_human(owner) + spawn(1) + get_icon() /obj/item/organ/external/replaced(var/mob/living/carbon/human/target) owner = target diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 4cb1dc9653..f7875a1e25 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -158,14 +158,13 @@ /obj/item/organ/appendix/removed() - ..() - - var/inflamed = 0 - for(var/datum/disease/appendicitis/appendicitis in owner.viruses) - inflamed = 1 - appendicitis.cure() - owner.resistances += appendicitis - - if(inflamed) - icon_state = "appendixinflamed" - name = "inflamed appendix" \ No newline at end of file + if(owner) + var/inflamed = 0 + for(var/datum/disease/appendicitis/appendicitis in owner.viruses) + inflamed = 1 + appendicitis.cure() + owner.resistances += appendicitis + if(inflamed) + icon_state = "appendixinflamed" + name = "inflamed appendix" + ..() \ No newline at end of file diff --git a/code/modules/organs/wound.dm b/code/modules/organs/wound.dm index 9d4a5364ae..1d34ed7284 100644 --- a/code/modules/organs/wound.dm +++ b/code/modules/organs/wound.dm @@ -209,9 +209,9 @@ /** WOUND DEFINITIONS **/ -//Note that the MINIMUM damage before a wound can be applied should correspond to +//Note that the MINIMUM damage before a wound can be applied should correspond to //the damage amount for the stage with the same name as the wound. -//e.g. /datum/wound/cut/deep should only be applied for 15 damage and up, +//e.g. /datum/wound/cut/deep should only be applied for 15 damage and up, //because in it's stages list, "deep cut" = 15. /proc/get_wound_type(var/type = CUT, var/damage) switch(type) @@ -323,4 +323,4 @@ datum/wound/cut/massive return 0 //cannot be merged /datum/wound/lost_limb/small - stages = list("ripped stump" = 40, "bloody stump" = 30, "clotted stump" = 15, "scarred stump" = 0) + stages = list("ripped hole" = 40, "bloody hole" = 30, "clotted hole" = 15, "scarred hole" = 0) From fa8ee581836617f1feaa6560260ca68323119ad7 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 4 Apr 2015 19:50:49 -0700 Subject: [PATCH 13/14] Fixes a monkey runtime and updates head reattachment surgery. --- code/modules/mob/living/carbon/human/human.dm | 5 ++++- .../mob/living/carbon/human/human_attackhand.dm | 4 ++-- .../mob/living/carbon/human/species/species.dm | 4 ++++ .../living/carbon/human/species/station/monkey.dm | 7 ++----- code/modules/surgery/headreattach.dm | 13 +++++++------ 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e03dec1617..85ba2e2410 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -21,7 +21,10 @@ set_species() if(species) - name = species.get_random_name(gender) + real_name = species.get_random_name(gender) + name = real_name + if(mind) + mind.name = real_name var/datum/reagents/R = new/datum/reagents(1000) reagents = R diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index ebdfbd8b5a..89cb1e9a1d 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -100,9 +100,9 @@ var/hit_zone = H.zone_sel.selecting var/obj/item/organ/external/affecting = get_organ(hit_zone) - if(!affecting || affecting.status & ORGAN_DESTROYED) + if(affecting.is_stump() || !affecting || affecting.status & ORGAN_DESTROYED) M << "They are missing that limb!" - return + return 1 switch(src.a_intent) if(I_HELP) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index b97e8ceed6..6fddbd92ec 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -168,6 +168,10 @@ /datum/species/proc/get_random_name(var/gender) var/datum/language/species_language = all_languages[language] + if(!species_language) + species_language = all_languages[default_language] + if(!species_language) + return "unknown" return species_language.get_random_name(gender) /datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs. diff --git a/code/modules/mob/living/carbon/human/species/station/monkey.dm b/code/modules/mob/living/carbon/human/species/station/monkey.dm index 0166900a0f..64e12eadfa 100644 --- a/code/modules/mob/living/carbon/human/species/station/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/station/monkey.dm @@ -45,11 +45,8 @@ if(prob(1)) H.emote(pick("scratch","jump","roll","tail")) -/datum/species/monkey/handle_post_spawn(var/mob/living/carbon/human/H) - H.real_name = "[lowertext(name)] ([rand(100,999)])" - H.name = H.real_name - - ..() +/datum/species/monkey/get_random_name() + return "[lowertext(name)] ([rand(100,999)])" /datum/species/monkey/tajaran name = "Farwa" diff --git a/code/modules/surgery/headreattach.dm b/code/modules/surgery/headreattach.dm index 9957ee8b78..ad47b14429 100644 --- a/code/modules/surgery/headreattach.dm +++ b/code/modules/surgery/headreattach.dm @@ -1,5 +1,6 @@ //This is an uguu head restoration surgery TOTALLY not yoinked from chinsky's limb reattacher /datum/surgery_step/attach_head/ + priority = 3 // Must be higher than /datum/surgery_step/internal allowed_tools = list(/obj/item/organ/external/head = 100) can_infect = 0 @@ -7,20 +8,20 @@ max_duration = 100 can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(..()) - var/obj/item/organ/external/head = target.get_organ(target_zone) - return !head && target_zone == "head" + var/obj/item/organ/external/head = target.get_organ(target_zone) + return isnull(head) && target_zone == "head" && !isnull(target.species.has_limbs["head"]) begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts attaching [tool] to [target]'s reshaped neck.", \ - "You start attaching [tool] to [target]'s reshaped neck.") + user.visible_message("[user] starts attaching [tool] to [target]'s neck.", \ + "You start attaching [tool] to [target]'s neck.") end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("\blue [user] has attached [target]'s head to the body.", \ "\blue You have attached [target]'s head to the body.") var/obj/item/organ/external/head = tool - head.loc = target + user.drop_from_inventory(head) head.replaced(target) + head.loc = target head.status = 0 target.update_body() target.updatehealth() From d254725766cf6b19cfebdf9f5715ed0e15f4dc35 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 4 Apr 2015 21:49:05 -0700 Subject: [PATCH 14/14] Oversights. --- code/modules/mob/living/carbon/human/human_attackhand.dm | 2 +- .../living/carbon/human/species/xenomorphs/alien_species.dm | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 89cb1e9a1d..291ab0d38a 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -100,7 +100,7 @@ var/hit_zone = H.zone_sel.selecting var/obj/item/organ/external/affecting = get_organ(hit_zone) - if(affecting.is_stump() || !affecting || affecting.status & ORGAN_DESTROYED) + if(!affecting || affecting.is_stump() || (affecting.status & ORGAN_DESTROYED)) M << "They are missing that limb!" return 1 diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm index 913e3e71ad..e94db830d7 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm @@ -61,6 +61,9 @@ var/weeds_heal_rate = 1 // Health regen on weeds. var/weeds_plasma_rate = 5 // Plasma regen on weeds. +/datum/species/xenos/get_random_name() + return "alien [caste_name] ([alien_number])" + /datum/species/xenos/can_understand(var/mob/other) if(istype(other,/mob/living/carbon/alien/larva))