From a3089f90170c62d4c48de362e994326bfbb04924 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Thu, 10 May 2012 00:53:05 +0100 Subject: [PATCH] TG: Changed the way facial scarring works. Instead of setting your real_name to "Unknown" it uses the disfigured variable of a human's head organ to dictate the human's name variable. This means real_name is now somewhat back to being a reliable source of the mob's actual name. It should eliminate a lot of the "cloning as unknown" bugs. It also means I could simplify that god-awful name updating stuff into a nice and simple helper proc. Some original_name stuff was added here and there, mainly during cloning. A lot of the "getting random ghost names" should be fixed now. Still loads to do though, particularly with transforms and such. >_> Fixed a runtime with Tajarans trying to use a variable that doesn't exist for PDAs. Removed that variable from IDs as it's only used by furries. Revision: r3546 Author: elly1...@rocketmail.com --- .../Cael_Aislinn/Tajara/tajaran.dm | 31 +--------- code/datums/datumvars.dm | 1 + code/game/machinery/cloning.dm | 2 +- code/modules/chemical/Chemistry-Reagents.dm | 14 +---- code/modules/mob/living/carbon/human/death.dm | 5 +- code/modules/mob/living/carbon/human/human.dm | 62 +++++++------------ .../mob/living/carbon/human/human_damage.dm | 10 +++ code/modules/mob/living/carbon/human/life.dm | 7 +-- .../mob/living/carbon/human/whisper.dm | 2 +- code/modules/mob/living/say.dm | 2 +- 10 files changed, 49 insertions(+), 87 deletions(-) diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm index 6e2cac4529c..d07228e056b 100644 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm +++ b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm @@ -354,37 +354,8 @@ overlays += image("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) belt.screen_loc = ui_belt - if ((wear_mask && !(wear_mask.see_face)) || (head && !(head.see_face))) // can't see the face - if (wear_id) - if (istype(wear_id, /obj/item/weapon/card/id)) - var/obj/item/weapon/card/id/id = wear_id - if (id.registered_name) - name = id.registered_name - else - name = "Unknown" - else if (istype(wear_id, /obj/item/device/pda)) - var/obj/item/device/pda/pda = wear_id - if (pda.owner) - name = pda.owner - else - name = "Unknown" - else - name = "Unknown" - else - if (wear_id) - if (istype(wear_id, /obj/item/weapon/card/id)) - var/obj/item/weapon/card/id/id = wear_id - if (id.registered_name != real_name) - name = "[real_name] (as [id.registered_name])" - - else if (istype(wear_id, /obj/item/device/pda)) - var/obj/item/device/pda/pda = wear_id - if (pda.owner) - if (pda.owner != real_name) - name = "[real_name] (as [pda.owner])" - else - name = real_name + name = get_visible_name() if (wear_id) wear_id.screen_loc = ui_id diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 59765bcf6d8..0686f3292f9 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -417,6 +417,7 @@ client M.real_name = new_name M.name = new_name M.original_name = new_name + M.original_name = new_name href_list["datumrefresh"] = href_list["rename"] else if (href_list["varnameedit"]) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 038e89d5568..09b258edff3 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -149,9 +149,9 @@ if(clonename) src.occupant.real_name = clonename + src.occupant.original_name = clonename //we don't want random ghost names should we die again. else src.occupant.real_name = "clone" //No null names!! - src.occupant.original_name = original_name var/datum/mind/clonemind = (locate(mindref) in ticker.minds) diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm index c8f93e7c8cb..94ce4d73519 100644 --- a/code/modules/chemical/Chemistry-Reagents.dm +++ b/code/modules/chemical/Chemistry-Reagents.dm @@ -744,9 +744,7 @@ datum affecting.take_damage(25, 0) M:UpdateDamageIcon() M:emote("scream") - M << "\red Your face has become disfigured!" - M.real_name = "Unknown" - M.warn_flavor_changed() + M:disfigure_face() else M.take_organ_damage(min(15, volume * 2)) // uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl else @@ -798,10 +796,7 @@ datum M:UpdateDamageIcon() M:emote("scream") if(prob(15)) - M << "\red Your face has become disfigured!" - M.real_name = "Unknown" - M.warn_flavor_changed() - affecting.disfigured = 1 + M:disfigure_face() else if(istype(M, /mob/living/carbon/monkey) && M:wear_mask) del (M:wear_mask) @@ -819,10 +814,7 @@ datum M:UpdateDamageIcon() M:emote("scream") if(prob(15)) - M << "\red Your face has become disfigured!" - M.real_name = "Unknown" - M.warn_flavor_changed() - affecting.disfigured = 1 + M:disfigure_face() else M.take_organ_damage(min(15, volume * 4)) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index c5245daa4f3..a2599014cd9 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -102,8 +102,11 @@ /mob/living/carbon/human/proc/ChangeToHusk() if(mutations & HUSK) return + var/datum/organ/external/head/head = get_organ("head") + if(head) + head.disfigured = 1 + name = get_visible_name() mutations |= HUSK - real_name = "Unknown" update_body() return diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 4ac8972b60c..0e6d660e76d 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1189,37 +1189,8 @@ overlays += image("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) belt.screen_loc = ui_belt - if ((wear_mask && !(wear_mask.see_face)) || (head && !(head.see_face))) // can't see the face - if (wear_id) - if (istype(wear_id, /obj/item/weapon/card/id)) - var/obj/item/weapon/card/id/id = wear_id - if (id.registered_name) - name = id.registered_name - else - name = "Unknown" - else if (istype(wear_id, /obj/item/device/pda)) - var/obj/item/device/pda/pda = wear_id - if (pda.owner) - name = pda.owner - else - name = "Unknown" - else - name = "Unknown" - else - if (wear_id) - if (istype(wear_id, /obj/item/weapon/card/id)) - var/obj/item/weapon/card/id/id = wear_id - if (id.registered_name != real_name) - name = "[real_name] (as [id.registered_name])" - - else if (istype(wear_id, /obj/item/device/pda)) - var/obj/item/device/pda/pda = wear_id - if (pda.owner) - if (pda.owner != real_name) - name = "[real_name] (as [pda.owner])" - else - name = real_name + name = get_visible_name() if (wear_id) wear_id.screen_loc = ui_id @@ -2364,18 +2335,33 @@ It can still be worn/put on as normal. return if_no_id return +//repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a seperate proc as it'll be useful elsewhere +/mob/living/carbon/human/proc/get_visible_name() + if ((wear_mask && !(wear_mask.see_face)) || (head && !(head.see_face))) // can't see their face + return get_id_name("Unknown") + else + var/face_name = get_face_name() + var/id_name = get_id_name("") + if(id_name && (id_name != face_name)) + return "[face_name] as ([id_name])" + return face_name + +//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when polyacided or when updating a human's name variable +/mob/living/carbon/human/proc/get_face_name() + var/datum/organ/external/head/head = get_organ("head") + if(!head || head.disfigured) //no face! + return "Unknown" + else + return "[real_name]" + //gets name from ID or PDA itself, ID inside PDA doesn't matter //Useful when player is being seen by other mobs -/mob/living/carbon/human/proc/get_visible_name(var/if_no_id = "Unknown") +/mob/living/carbon/human/proc/get_id_name(var/if_no_id = "Unknown") var/obj/item/device/pda/pda = wear_id var/obj/item/weapon/card/id/id = wear_id - if (istype(pda)) - . = pda.owner - else if (istype(id)) - . = id.registered_name - else - return if_no_id - return + if(istype(pda)) return pda.owner + if(istype(id)) return id.registered_name + return if_no_id //gets ID card object from special clothes slot or null. /mob/living/carbon/human/proc/get_idcard() diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index b674bc2b990..bfa163f82e6 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -1,3 +1,13 @@ +//Instead of setting real_name = "Unknown", use this when necessary. +//It will prevent the cloned-as-unknown bug and various other derpy things. +/mob/living/carbon/human/proc/disfigure_face() + var/datum/organ/external/head/head = get_organ("head") + if(head && !head.disfigured) + head.disfigured = 1 + name = get_visible_name() + src << "\red Your face has become disfigured." + warn_flavor_changed() + /mob/living/carbon/human/proc/HealDamage(zone, brute, burn) var/datum/organ/external/E = get_organ(zone) if(istype(E, /datum/organ/external)) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 1d5156013d2..167ec30586e 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1021,15 +1021,14 @@ if (stuttering) stuttering-- if (slurring) slurring-- + //Carn: marker 4# var/datum/organ/external/head/head = organs["head"] if(head && !head.disfigured) if(head.brute_dam >= 45 || head.burn_dam >= 45) - head.disfigured = 1 emote("scream") - real_name = "Unknown" - src << "\red Your face has become disfigured." + disfigure_face() face_op_stage = 0.0 - warn_flavor_changed() + var/blood_max = 0 for(var/name in organs) var/datum/organ/external/temp = organs[name] diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm index 3e79062b3f5..2d5f675b973 100644 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ b/code/modules/mob/living/carbon/human/whisper.dm @@ -20,7 +20,7 @@ var/alt_name = "" if (istype(src, /mob/living/carbon/human) && src.name != src.real_name) var/mob/living/carbon/human/H = src - alt_name = " (as [H.get_visible_name()])" + alt_name = " (as [H.get_id_name("Unknown")])" // Mute disability if (src.disabilities & 64) return diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 3c4a44e8a42..6aac5e6ab71 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -67,7 +67,7 @@ var/alt_name = "" if (istype(src, /mob/living/carbon/human) && name != real_name) var/mob/living/carbon/human/H = src - alt_name = " (as [H.get_visible_name()])" + alt_name = " (as [H.get_id_name("Unknown")])" var/italics = 0 var/message_range = null var/message_mode = null