From 721dfeda5710feef7e002b332d5703670c29b6bc Mon Sep 17 00:00:00 2001 From: Cael_Aislinn Date: Tue, 23 Oct 2012 23:14:38 +1000 Subject: [PATCH] removed old taj files Signed-off-by: Cael_Aislinn --- .../Cael_Aislinn/Tajara/examine.dm | 513 --------------- .../WorkInProgress/Cael_Aislinn/Tajara/say.dm | 511 --------------- .../Tajara/tajara_transformation.dm | 74 --- .../Cael_Aislinn/Tajara/tajaran.dm | 613 ------------------ .../Cael_Aislinn/Tajara/tajaran.dmi | Bin 28378 -> 0 bytes .../Cael_Aislinn/Tajara/tajaran_face.dmi | Bin 21188 -> 0 bytes .../Tajara/tajaran_placeholder.dm | 4 - .../Cael_Aislinn/Tajara/whisper.dm | 170 ----- 8 files changed, 1885 deletions(-) delete mode 100644 code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm delete mode 100644 code/WorkInProgress/Cael_Aislinn/Tajara/say.dm delete mode 100644 code/WorkInProgress/Cael_Aislinn/Tajara/tajara_transformation.dm delete mode 100644 code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm delete mode 100644 code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dmi delete mode 100644 code/WorkInProgress/Cael_Aislinn/Tajara/tajaran_face.dmi delete mode 100644 code/WorkInProgress/Cael_Aislinn/Tajara/tajaran_placeholder.dm delete mode 100644 code/WorkInProgress/Cael_Aislinn/Tajara/whisper.dm diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm deleted file mode 100644 index ca35d27f8ee..00000000000 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm +++ /dev/null @@ -1,513 +0,0 @@ -/mob/living/carbon/human/tajaran/examine() - set src in oview() - - if(!usr || !src) return - if(((usr.disabilities & 128) || usr.blinded || usr.stat) && !(istype(usr,/mob/dead/observer/))) - usr << "Something is there but you can't see it." - return - - var/skipgloves = 0 - var/skipsuitstorage = 0 - var/skipjumpsuit = 0 - var/skipshoes = 0 - var/skipmask = 0 - var/skipears = 0 - var/skipeyes = 0 - - //exosuits and helmets obscure our view and stuff. - if (src.wear_suit) - skipgloves = src.wear_suit.flags_inv & HIDEGLOVES - skipsuitstorage = src.wear_suit.flags_inv & HIDESUITSTORAGE - skipjumpsuit = src.wear_suit.flags_inv & HIDEJUMPSUIT - skipshoes = src.wear_suit.flags_inv & HIDESHOES - - if (src.head) - skipmask = src.head.flags_inv & HIDEMASK - skipeyes = src.head.flags_inv & HIDEEYES - skipears = src.head.flags_inv & HIDEEARS - - // crappy hacks because you can't do \his[src] etc. I'm sorry this proc is so unreadable, blame the text macros :< - var/t_He = "It" //capitalised for use at the start of each line. - var/t_his = "its" - var/t_him = "it" - var/t_has = "has" - var/t_is = "is" - - var/msg = "*---------*\nThis is " - - if( skipjumpsuit && (wear_mask || skipmask) ) //big suits/masks make it hard to tell their gender - t_He = "They" - t_his = "their" - t_him = "them" - t_has = "have" - t_is = "are" - else - if(src.icon) - msg += "\icon[src.icon] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated - switch(src.gender) - if(MALE) - t_He = "He" - t_his = "his" - t_him = "him" - if(FEMALE) - t_He = "She" - t_his = "her" - t_him = "her" - - msg += "\a [src], one of the cat-like Tajarans!\n" - - //uniform - if (src.w_uniform && !skipjumpsuit) - if (src.w_uniform.blood_DNA) - msg += "[t_He] [t_is] wearing \icon[src.w_uniform] [src.w_uniform.gender==PLURAL?"some":"a"] blood-stained [src.w_uniform.name]!\n" - else - msg += "[t_He] [t_is] wearing \icon[src.w_uniform] \a [src.w_uniform].\n" - - //head - if (src.head) - if (src.head.blood_DNA) - msg += "[t_He] [t_is] wearing \icon[src.head] [src.head.gender==PLURAL?"some":"a"] blood-stained [src.head.name] on [t_his] head!\n" - else - msg += "[t_He] [t_is] wearing \icon[src.head] \a [src.head] on [t_his] head.\n" - - //suit/armour - if (src.wear_suit) - if (src.wear_suit.blood_DNA) - msg += "[t_He] [t_is] wearing \icon[src.wear_suit] [src.wear_suit.gender==PLURAL?"some":"a"] blood-stained [src.wear_suit.name]!\n" - else - msg += "[t_He] [t_is] wearing \icon[src.wear_suit] \a [src.wear_suit].\n" - - //suit/armour storage - if(src.s_store && !skipsuitstorage) - if(src.s_store.blood_DNA) - msg += "[t_He] [t_is] carrying \icon[src.s_store] [src.s_store.gender==PLURAL?"some":"a"] blood-stained [src.s_store.name] on [t_his] [src.wear_suit.name]!\n" - else - msg += "[t_He] [t_is] carrying \icon[src.s_store] \a [src.s_store] on [t_his] [src.wear_suit.name].\n" - - //back - if (src.back) - if (src.back.blood_DNA) - msg += "[t_He] [t_has] \icon[src.back] [src.back.gender==PLURAL?"some":"a"] blood-stained [src.back] on [t_his] back.\n" - else - msg += "[t_He] [t_has] \icon[src.back] \a [src.back] on [t_his] back.\n" - - //left hand - if (src.l_hand) - if (src.l_hand.blood_DNA) - msg += "[t_He] [t_is] holding \icon[src.l_hand] [src.l_hand.gender==PLURAL?"some":"a"] blood-stained [src.l_hand.name] in [t_his] left hand!\n" - else - msg += "[t_He] [t_is] holding \icon[src.l_hand] \a [src.l_hand] in [t_his] left hand.\n" - - //right hand - if (src.r_hand) - if (src.r_hand.blood_DNA) - msg += "[t_He] [t_is] holding \icon[src.r_hand] [src.r_hand.gender==PLURAL?"some":"a"] blood-stained [src.r_hand.name] in [t_his] right hand!\n" - else - msg += "[t_He] [t_is] holding \icon[src.r_hand] \a [src.r_hand] in [t_his] right hand.\n" - - //gloves - if (src.gloves && !skipgloves) - if (src.gloves.blood_DNA) - msg += "[t_He] [t_has] \icon[src.gloves] [src.gloves.gender==PLURAL?"some":"a"] blood-stained [src.gloves.name] on [t_his] hands!\n" - else - msg += "[t_He] [t_has] \icon[src.gloves] \a [src.gloves] on [t_his] hands.\n" - else if (src.blood_DNA) - msg += "[t_He] [t_has] blood-stained hands!\n" - - //handcuffed? - if (src.handcuffed) - msg += "[t_He] [t_is] \icon[src.handcuffed] handcuffed!\n" - - //belt - if (src.belt) - if (src.belt.blood_DNA) - msg += "[t_He] [t_has] \icon[src.belt] [src.belt.gender==PLURAL?"some":"a"] blood-stained [src.belt.name] about [t_his] waist!\n" - else - msg += "[t_He] [t_has] \icon[src.belt] \a [src.belt] about [t_his] waist.\n" - - //shoes - if (src.shoes && !skipshoes) - if(src.shoes.blood_DNA) - msg += "[t_He] [t_is] wearing \icon[src.shoes] [src.shoes.gender==PLURAL?"some":"a"] blood-stained [src.shoes.name] on [t_his] feet!\n" - else - msg += "[t_He] [t_is] wearing \icon[src.shoes] \a [src.shoes] on [t_his] feet.\n" - - //mask - if (src.wear_mask && !skipmask) - if (src.wear_mask.blood_DNA) - msg += "[t_He] [t_has] \icon[src.wear_mask] [src.wear_mask.gender==PLURAL?"some":"a"] blood-stained [src.wear_mask.name] on [t_his] face!\n" - else - msg += "[t_He] [t_has] \icon[src.wear_mask] \a [src.wear_mask] on [t_his] face.\n" - - //eyes - if (src.glasses && !skipeyes) - if (src.glasses.blood_DNA) - msg += "[t_He] [t_has] \icon[src.glasses] [src.glasses.gender==PLURAL?"some":"a"] blood-stained [src.glasses] covering [t_his] eyes!\n" - else - msg += "[t_He] [t_has] \icon[src.glasses] \a [src.glasses] covering [t_his] eyes.\n" - - if (src.l_ear && !skipears) - msg += "[t_He] [t_has] has a \icon[src.l_ear] [src.l_ear.name] on [t_his] left ear.\n" - - if (src.r_ear && !skipears) - msg += "[t_He] [t_has] has a \icon[src.r_ear] [src.r_ear.name] on [t_his] right ear.\n" - - //ID - if (src.wear_id) - var/id - if(istype(src.wear_id, /obj/item/device/pda)) - var/obj/item/device/pda/pda = src.wear_id - id = pda.owner - else if(istype(src.wear_id, /obj/item/weapon/card/id)) //just in case something other than a PDA/ID card somehow gets in the ID slot :[ - var/obj/item/weapon/card/id/idcard = src.wear_id - id = idcard.registered_name - if (id && (id != src.real_name) && (get_dist(src, usr) <= 1) && prob(10)) - msg += "[t_He] [t_is] wearing \icon[src.wear_id] \a [src.wear_id] yet something doesn't seem right...\n" - else - msg += "[t_He] [t_is] wearing \icon[src.wear_id] \a [src.wear_id].\n" - - //Jitters - if (src.is_jittery) - if(src.jitteriness >= 300) - msg += "[t_He] [t_is] convulsing violently!\n" - else if(src.jitteriness >= 200) - msg += "[t_He] [t_is] extremely jittery.\n" - else if(src.jitteriness >= 100) - msg += "[t_He] [t_is] twitching ever so slightly.\n" - - var/distance = get_dist(usr,src) - if(istype(usr, /mob/dead/observer) || usr.stat == 2) // ghosts can see anything - distance = 1 - - if (src.stat == 1 || stat == 2) - msg += "[name] doesn't seem to be responding to anything around [t_him], [t_his] eyes closed as though asleep.\n" - if((!isbreathing || holdbreath) && distance <= 3) - msg += "[name] does not appear to be breathing.\n" - if(istype(usr, /mob/living/carbon/human) && usr.stat == 0 && src.stat == 1 && distance <= 1) - for(var/mob/O in viewers(usr.loc, null)) - O.show_message("[usr] checks [src]'s pulse.", 1) - spawn(15) - usr << "\blue [name] has a pulse!" - - if (src.stat == 2 || (changeling && changeling.changeling_fakedeath == 1)) - if(distance <= 1) - if(istype(usr, /mob/living/carbon/human) && usr.stat == 0) - for(var/mob/O in viewers(usr.loc, null)) - O.show_message("[usr] checks [src]'s pulse.", 1) - spawn(15) - usr << "\red [name] has no pulse!" - -/* if (src.getBruteLoss()) - if (src.getBruteLoss() < 30) - usr << "\red [src.name] looks slightly injured!" - else - usr << "\red [src.name] looks severely injured!"*/ - - if (src.cloneloss) - if (src.cloneloss < 30) - msg += "[src.name] looks slightly... unfinished?\n" - else - msg += "[src.name] looks very... unfinished?\n" - -/* if (src.getFireLoss()) - if (src.getFireLoss() < 30) - usr << "\red [src.name] looks slightly burned!" - else - usr << "\red [src.name] looks severely burned!"*/ - msg += "" - if (src.nutrition < 100) - msg += "[t_He] [t_is] severely malnourished.\n" - else if (src.nutrition >= 500) - if (usr.nutrition < 100) - msg += "[t_He] [t_is] plump and delicious looking - Like a fat little piggy. A tasty piggy.\n" - else - msg += "[t_He] [t_is] quite chubby.\n" - - msg += "" - - - if (src.getBrainLoss() >= 60 && !stat) - msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" - - if (!src.client) - msg += "[t_He] [t_has] a vacant, braindead stare...\n" - - var/list/wound_descriptions = list() - var/list/wound_flavor_text = list() - for(var/named in organs) - var/datum/organ/external/temp = organs[named] - if(temp) - if(temp.destroyed) - wound_flavor_text["[temp.display_name]"] = "[t_He] is missing [t_his] [temp.display_name].\n" - continue - if(temp.robot) - if(!(temp.brute_dam + temp.burn_dam)) - wound_flavor_text["[temp.display_name]"] = "[t_He] has a robot arm!\n" - else - wound_flavor_text["[temp.display_name]"] = "[t_He] has a robot arm, it has" - switch(temp.brute_dam) - if(0) - wound_flavor_text["[temp.display_name]"] += "" - else if(0 to 20) - wound_flavor_text["[temp.display_name]"] += " some dents" - else if(20 to INFINITY) - wound_flavor_text["[temp.display_name]"] += pick(" a lot of dents"," severe denting") - if(temp.brute_dam && temp.brute_dam) - wound_flavor_text["[temp.display_name]"] += " and" - switch(temp.burn_dam) - if(0) - wound_flavor_text["[temp.display_name]"] += "" - else if(0 to 20) - wound_flavor_text["[temp.display_name]"] += " some burns" - else if(20 to INFINITY) - wound_flavor_text["[temp.display_name]"] += pick(" a lot of burns"," severe melting") - wound_flavor_text["[temp.display_name]"] += "!\n" - else if(temp.wounds) - var/list/wounds = list(list(),list(),list(),list(),list(),list()) - for(var/datum/organ/wound/w in temp.wounds) - switch(w.healing_state) - if(0) - var/list/cut = wounds[1] - cut += w - wounds[1] = cut - if(1) - var/list/cut = wounds[2] - cut += w - wounds[2] = cut - if(2) - var/list/cut = wounds[3] - cut += w - wounds[3] = cut - if(3) - var/list/cut = wounds[4] - cut += w - wounds[4] = cut - if(4) - var/list/cut = wounds[5] - cut += w - wounds[5] = cut - if(5) - var/list/cut = wounds[6] - cut += w - wounds[6] = cut - wound_descriptions["[temp.display_name]"] = wounds - else - wound_flavor_text["[temp.display_name]"] = "" - //Now that we have a big list of all the wounds, on all the limbs. - var/list/is_bleeding = list() - for(var/named in wound_descriptions) - var/list/wound_states = wound_descriptions[named] - var/list/flavor_text = list() - for(var/i = 1, i <= 6, i++) - var/list/wound_state = wound_states[i] //All wounds at this level of healing. - var/list/tally = list("cut" = 0, "deep cut" = 0, "flesh wound" = 0, "gaping wound" = 0, "big gaping wound" = 0, "massive wound" = 0,\ - "tiny bruise" = 0, "small bruise" = 0, "moderate bruise" = 0, "large bruise" = 0, "huge bruise" = 0, "monumental bruise" = 0,\ - "small burn" = 0, "moderate burn" = 0, "large burn" = 0, "severe burn" = 0, "deep burn" = 0, "carbonised area" = 0) //How many wounds of what size. - for(var/datum/organ/wound/w in wound_state) - if(w.bleeding && !is_bleeding[named]) is_bleeding[named] = 1 - switch(w.wound_size) - if(1) - switch(w.wound_type) - if(0) - tally["cut"] += 1 - if(1) - tally["tiny bruise"] += 1 - if(2) - tally["small burn"] += 1 - if(2) - switch(w.wound_type) - if(0) - tally["deep cut"] += 1 - if(1) - tally["small bruise"] += 1 - if(2) - tally["moderate burn"] += 1 - if(3) - switch(w.wound_type) - if(0) - tally["flesh wound"] += 1 - if(1) - tally["moderate bruise"] += 1 - if(2) - tally["large burn"] += 1 - if(4) - switch(w.wound_type) - if(0) - tally["gaping wound"] += 1 - if(1) - tally["large bruise"] += 1 - if(2) - tally["severe burn"] += 1 - if(5) - switch(w.wound_type) - if(0) - tally["big gaping wound"] += 1 - if(1) - tally["huge bruise"] += 1 - if(2) - tally["deep burn"] += 1 - if(6) - switch(w.wound_type) - if(0) - tally["massive wound"] += 1 - if(1) - tally["monumental bruise"] += 1 - if(2) - tally["carbonised area"] += 1 - for(var/tallied in tally) - if(!tally[tallied]) - continue - //if(flavor_text_string && tally[tallied]) - // for( - // flavor_text_string += pick(list(", as well as", ", in addition to")) //add more later. - var/tallied_rename = list("cut" = "cut","deep cut" = "deep cut", "flesh wound" = "flesh wound",\ - "gaping wound" = "gaping wound", "big gaping wound" = "big gaping wound", "massive wound" = "massive wound",\ - "tiny bruise" = "tiny bruise", "small bruise" = "small bruise", "moderate bruise" = "moderate bruise",\ - "large bruise" = "large bruise", "huge bruise" = "huge bruise", "monumental bruise" = "monumental bruise",\ - "small burn" = "small burn", "moderate burn" = "moderate burn", "large burn" = "large burn",\ - "severe burn" = "severe burn", "deep burn" = "deep burn", "carbonised area" = "carbonised area") - switch(i) - if(2) //Healing wounds. - if(tallied in list("cut","tiny bruise","small burn")) - continue - tallied_rename = list("deep cut" = "clotted cut", "flesh wound" = "small bandaged wound",\ - "gaping wound" = "bandaged wound", "big gaping wound" = "gauze wrapped wound",\ - "massive wound" = "massive blood soaked bandage", "small bruise" = "small bruise",\ - "moderate bruise" = "moderate bruise", "large bruise" = "large bruise",\ - "huge bruise" = "huge bruise", "monumental bruise" = "monumental bruise",\ - "moderate burn" = "moderate salved burn", "large burn" = "large salved burn",\ - "severe burn" = "severe salved burn", "deep burn" = "deep salved burn",\ - "carbonised area" = "treated carbonised area") - if(3) - if(tallied in list("cut","tiny bruise","small burn")) - continue - tallied_rename = list("deep cut" = "fading cut", "flesh wound" = "small healing wound",\ - "gaping wound" = "healing wound", "big gaping wound" = "big healing wound",\ - "massive wound" = "massive healing wound", "small bruise" = "tiny bruise",\ - "moderate bruise" = "small bruise", "large bruise" = "moderate bruise",\ - "huge bruise" = "large bruise", "monumental bruise" = "huge bruise",\ - "moderate burn" = "healing moderate burn", "large burn" = "healing large burn",\ - "severe burn" = "healing severe burn", "deep burn" = "healing deep burn",\ - "carbonised area" = "slowly healing carbonised area") - if(4) - if(tallied in list("cut","deep cut","tiny bruise", "small bruise","small burn", "moderate burn")) - continue - tallied_rename = list("flesh wound" = "small red scar", "gaping wound" = "angry straight scar",\ - "big gaping wound" = "jagged angry scar", "massive wound" = "gigantic angry scar",\ - "moderate bruise" = "tiny bruise", "large bruise" = "small bruise",\ - "huge bruise" = "moderate bruise", "monumental bruise" = "large bruise",\ - "large burn" = "large burn scar", "severe burn" = "severe burn scar",\ - "deep burn" = "deep burn scar", "carbonised area" = "healing carbonised area") - if(5) - if(tallied in list("cut","deep cut","tiny bruise", "small bruise", "moderate bruise","small burn", "moderate burn")) - continue - tallied_rename = list("flesh wound" = "small scar", "gaping wound" = "straight scar",\ - "big gaping wound" = "jagged scar", "massive wound" = "gigantic scar",\ - "large bruise" = "tiny bruise",\ - "huge bruise" = "small bruise", "monumental bruise" = "moderate bruise",\ - "large burn" = "large burn scar", "severe burn" = "severe burn scar",\ - "deep burn" = "deep burn scar", "carbonised area" = "large scarred area") - if(6) - if(tallied in list("cut","deep cut","flesh wound","tiny bruise", "small bruise", "moderate bruise", "large bruise", "huge bruise","small burn", "moderate burn")) - continue - tallied_rename = list("gaping wound" = "straight scar",\ - "big gaping wound" = "jagged scar", "massive wound" = "gigantic scar",\ - "monumental bruise" = "tiny bruise",\ - "large burn" = "large burn scar", "severe burn" = "severe burn scar",\ - "deep burn" = "deep burn scar", "carbonised area" = "large scarred area") - var/list/no_exclude = list("gaping wound", "big gaping wound", "massive wound", "large bruise",\ - "huge bruise", "massive bruise", "severe burn", "large burn", "deep burn", "carbonised area") - switch(tally[tallied]) - if(1) - if(!flavor_text.len) - flavor_text += "\The [src] has[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]" - else - flavor_text += "[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]" - if(2) - if(!flavor_text.len) - flavor_text += "\The [src] has[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s" - else - flavor_text += "[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s" - if(3 to 5) - if(!flavor_text.len) - flavor_text += "\The [src] has several [tallied_rename[tallied]]s" - else - flavor_text += " several [tallied_rename[tallied]]s" - if(6 to INFINITY) - if(!flavor_text.len) - flavor_text += "\The [src] has a bunch of [tallied_rename[tallied]]s" - else - flavor_text += " a ton of [tallied_rename[tallied]]s" - if(flavor_text.len) - var/flavor_text_string = "" - for(var/text = 1, text <= flavor_text.len, text++) - if(text == flavor_text.len && flavor_text.len > 1) - flavor_text_string += ", and" - else if(flavor_text.len > 1) - flavor_text_string += "," - flavor_text_string += flavor_text[text] - flavor_text_string += " on [t_his] [named].
" - wound_flavor_text["[named]"] = flavor_text_string - var/display_chest = 0 - var/display_shoes = 0 - var/display_gloves = 0 - if(wound_flavor_text["head"] && (is_destroyed["head"] || (!skipmask && !(wear_mask && istype(wear_mask, /obj/item/clothing/mask/gas))))) - msg += wound_flavor_text["head"] - else if(is_bleeding["head"]) - msg += "[src] has blood running down [t_his] face!\n" - if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit) //No need. A missing chest gibs you. - msg += wound_flavor_text["chest"] - else if(is_bleeding["chest"]) - display_chest = 1 - if(wound_flavor_text["left arm"] && (is_destroyed["left arm"] || (!w_uniform && !skipjumpsuit))) - msg += wound_flavor_text["left arm"] - else if(is_bleeding["left arm"]) - display_chest = 1 - if(wound_flavor_text["left hand"] && (is_destroyed["left hand"] || (!gloves && !skipgloves))) - msg += wound_flavor_text["left hand"] - else if(is_bleeding["left hand"]) - display_gloves = 1 - if(wound_flavor_text["right arm"] && (is_destroyed["right arm"] || (!w_uniform && !skipjumpsuit))) - msg += wound_flavor_text["right arm"] - else if(is_bleeding["right arm"]) - display_chest = 1 - if(wound_flavor_text["right hand"] && (is_destroyed["right hand"] || (!gloves && !skipgloves))) - msg += wound_flavor_text["right hand"] - else if(is_bleeding["right hand"]) - display_gloves = 1 - if(wound_flavor_text["groin"] && (is_destroyed["groin"] || (!w_uniform && !skipjumpsuit))) - msg += wound_flavor_text["groin"] - else if(is_bleeding["groin"]) - display_chest = 1 - if(wound_flavor_text["left leg"] && (is_destroyed["left leg"] || (!w_uniform && !skipjumpsuit))) - msg += wound_flavor_text["left leg"] - else if(is_bleeding["left leg"]) - display_chest = 1 - if(wound_flavor_text["left foot"]&& (is_destroyed["left foot"] || (!shoes && !skipshoes))) - msg += wound_flavor_text["left foot"] - else if(is_bleeding["left foot"]) - display_shoes = 1 - if(wound_flavor_text["right leg"] && (is_destroyed["right leg"] || (!w_uniform && !skipjumpsuit))) - msg += wound_flavor_text["right leg"] - else if(is_bleeding["right leg"]) - display_chest = 1 - if(wound_flavor_text["right foot"]&& (is_destroyed["right foot"] || (!shoes && !skipshoes))) - msg += wound_flavor_text["right foot"] - else if(is_bleeding["right foot"]) - display_shoes = 1 - if(display_chest) - msg += "[src] has blood soaking through from under [t_his] clothing!\n" - if(display_shoes) - msg += "[src] has blood running from [t_his] shoes!\n" - if(display_gloves) - msg += "[src] has blood running from under [t_his] gloves!\n" - - -// if(w.bleeding) -// usr << "\red [src.name] is bleeding from a [sizetext] on [t_his] [temp.display_name]." -// continue - - msg += "[print_flavor_text()]\n" - - msg += "\blue *---------*" - usr << msg diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/say.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/say.dm deleted file mode 100644 index f350024247b..00000000000 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/say.dm +++ /dev/null @@ -1,511 +0,0 @@ -//their language needs to hook into radios as well - -/mob/living/carbon/human/tajaran/say_quote(var/text,var/is_speaking_taj) - //work out if the listener can understand or not - - var/ending = copytext(text, length(text)) - /*if (src.disease_symptoms & DISEASE_HOARSE) - return "rasps, \"[text]\"";*/ - if (src.stuttering) - return "stammers, \"[text]\""; - if (src.slurring) - return "slurrs, \"[text]\""; - if (src.brainloss >= 60) - return "gibbers, \"[text]\""; - - if(is_speaking_taj) - return "mrowls, \"[text]\""//pick("yowls, \"[text]\"", "growls, \"[text]\"","mewls, \"[text]\"", "mrowls, \"[text]\"", "meows, \"[text]\"", "purrs, \"[text]\""); - - if (ending == "?") - return "asks, \"[text]\""; - else if (ending == "!") - return "exclaims, \"[text]\""; - - return "says, \"[text]\""; - -//convert message to an indecipherable series of sounds for anyone who isnt tajaran -/mob/living/carbon/human/tajaran/proc/tajspeak(var/message) - //return stars(message) - var/te = html_decode(message) - var/t = "" - var/n = length(message) - var/p = 1 - while(p <= n) - if (copytext(te, p, p + 1) != " ") - t = text("[][]", t, pick(tajspeak_letters)) - p++ - return html_encode(t) - /*if (pr == null) - pr = 25 - if (pr <= 0) - return null - else - if (pr >= 100) - return n - var/te = html_decode(n) - var/t = "" - n = length(n) - var/p = null - p = 1 - while(p <= n) - if ((copytext(te, p, p + 1) == " " || prob(pr))) - t = text("[][]", t, copytext(te, p, p + 1)) - else - t = text("[]*", t) - p++ - return html_encode(t)*/ - -/mob/living/carbon/human/tajaran/say(var/message) - var/message_old = message - message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) - - if (!message) - return - - log_say("[name]/[key] : [message]") - - if (length(message) >= 1) - if (miming && copytext(message, 1, 2) != "*") - return - - if (stat == 2) - return say_dead(message) - - if (silent) - return - - if (src.client && (client.muted || src.client.muted_complete)) - src << "You are muted." - return - - // wtf? - if (stat) - return - - // Mute disability - if (disabilities & 64) - return - - if (istype(wear_mask, /obj/item/clothing/mask/muzzle)) - return - - // emotes - if (copytext(message, 1, 2) == "*" && !stat) - return emote(copytext(message, 2)) - - 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()])" - var/italics = 0 - var/message_range = null - var/message_mode = null - - if (brainloss >= 60 && prob(50)) - if (ishuman(src)) - message_mode = "headset" - // Special message handling - else if (copytext(message, 1, 2) == ";") - if (ishuman(src)) - message_mode = "headset" - else if(istype(src, /mob/living/silicon/pai) || istype(src, /mob/living/silicon/robot)) - message_mode = "pAI" - message = copytext(message, 2) - - else if (length(message) >= 2) - var/channel_prefix = copytext(message, 1, 3) - - message_mode = department_radio_keys[channel_prefix] - //world << "channel_prefix=[channel_prefix]; message_mode=[message_mode]" - if (message_mode) - message = trim(copytext(message, 3)) - if (!ishuman(src) && (message_mode=="department" || (message_mode in radiochannels))) - message_mode = null //only humans can use headsets - - if (!message) - return - - //work out if we're speaking tajaran or not - var/is_speaking_taj = 0 - if(copytext(message, 1, 3) == ":j" || copytext(message, 1, 3) == ":J") - message = copytext(message, 3) - if(taj_talk_understand || universal_speak) - is_speaking_taj = 1 - - if( !message_mode && (disease_symptoms & DISEASE_WHISPER)) - message_mode = "whisper" - - if(src.stunned > 0 || (traumatic_shock > 61 && prob(50))) - message_mode = "" //Stunned people shouldn't be able to physically turn on their radio/hold down the button to speak into it - - - message = capitalize(message) //capitalize the first letter of what they actually say - - // :downs: - if (brainloss >= 60) - message = dd_replacetext(message, " am ", " ") - message = dd_replacetext(message, " is ", " ") - message = dd_replacetext(message, " are ", " ") - message = dd_replacetext(message, "you", "u") - message = dd_replacetext(message, "help", "halp") - message = dd_replacetext(message, "grief", "grife") - message = dd_replacetext(message, "space", "spess") - message = dd_replacetext(message, "carp", "crap") - message = dd_replacetext(message, "reason", "raisin") - if(prob(50)) - message = uppertext(message) - message += "[stutter(pick("!", "!!", "!!!"))]" - if(!stuttering && prob(15)) - message = stutter(message) - - if (stuttering) - message = stutter(message) - if (slurring) - message = slur(message) - -/* //qw do not have beesease atm. - if(virus) - if(virus.name=="beesease" && virus.stage>=2) - if(prob(virus.stage*10)) - var/bzz = length(message) - message = "B" - for(var/i=0,i[gender=="male"?"Mr.":"Mrs."] [changeling.changelingID]: [message]" - return -////SPECIAL HEADSETS START - else - //world << "SPECIAL HEADSETS" - if (message_mode in radiochannels) - if (src:l_ear && istype(src:l_ear,/obj/item/device/radio)) - src:l_ear.talk_into(src, message, message_mode) - used_radios += src:l_ear - else if (src:r_ear) - src:r_ear.talk_into(src, message, message_mode) - used_radios += src:r_ear - message_range = 1 - italics = 1 -/////SPECIAL HEADSETS END - - var/list/listening -/* - if(istype(loc, /obj/item/device/aicard)) // -- TLE - var/obj/O = loc - if(istype(O.loc, /mob)) - var/mob/M = O.loc - listening = hearers(message_range, M) - else - listening = hearers(message_range, O) - else - listening = hearers(message_range, src) - - for (var/obj/O in view(message_range, src)) - for (var/mob/M in O) - listening += M // maybe need to check if M can hear src - spawn (0) - if (O) - O.hear_talk(src, message) - - if (!(src in listening)) - listening += src - -*/ - var/turf/T = get_turf(src) - listening = hearers(message_range, T) - var/list/V = view(message_range, T) - var/list/W = V - //find mobs in lockers, cryo, intellicards, brains, MMIs, and so on. - for (var/mob/M in world) - if (!M.client) - continue //skip monkeys and leavers - if (istype(M, /mob/new_player)) - continue - if (M.stat <2) //is alive - if (isturf(M.loc)) - continue //if M can hear us it was already found by hearers() - if (get_turf(M) in V) //this is slow, but I don't think we'd have a lot of wardrobewhores every round --rastaf0 - listening+=M - else - if (M.client && M.client.ghost_ears) - listening|=M - - var/list/eavesdroppers = get_mobs_in_view(7, src) - for(var/mob/M in listening) - eavesdroppers.Remove(M) - for(var/mob/M in eavesdroppers) - if(M.stat) - eavesdroppers.Remove(M) - - for (var/obj/O in ((W | contents)-used_radios)) - W |= O - - for (var/mob/M in W) - W |= M.contents - if(hasorgans(M)) - var/mob/living/carbon/G = M - for(var/name in G:organs) - var/datum/organ/external/F = G:organs[name] - for(var/obj/item/weapon/implant/I in F.implant) - W |= I - - for (var/obj/item/device/pda/M in W) - W |= M.contents - - for (var/obj/O in W) //radio in pocket could work, radio in backpack wouldn't --rastaf0 - spawn (0) - if(O && !istype(O.loc, /obj/item/weapon/storage)) - O.hear_talk(src, message) - - if(isbrain(src))//For brains to properly talk if they are in an MMI..or in a brain. Could be extended to other mobs I guess. - for(var/obj/O in loc)//Kinda ugly but whatever. - if(O) - spawn(0) - O.hear_talk(src, message) - - var/list/heard_a = list() // understood us - var/list/heard_b = list() // didn't understand us - - for (var/mob/M in listening) - //if speaking in tajaran, only let other tajs understand - if ( M.say_understands(src) && (M.taj_talk_understand || !is_speaking_taj || M.universal_speak) ) - heard_a += M - else - heard_b += M - - var/speech_bubble_test = say_test(message) - var/image/speech_bubble = image('talk.dmi',src,"h[speech_bubble_test]") - - var/rendered = null - if (length(heard_a)) - var/message_a = say_quote(message,is_speaking_taj) - if (italics) - message_a = "[message_a]" - if (!istype(src, /mob/living/carbon/human)) - rendered = "[name] [message_a]" - else if(istype(wear_mask, /obj/item/clothing/mask/gas/voice)) - if(wear_mask:vchange) - rendered = "[wear_mask:voice] [message_a]" - else - rendered = "[name] [message_a]" - else - rendered = "[real_name][alt_name] [message_a]" - - -/* - // Create speech bubble - var/obj/effect/speech_bubble/B = new/obj/effect/speech_bubble - B.icon = 'speechbubble.dmi' - B.parent = src - B.mouse_opacity = 0 - B.invisibility = invisibility - B.layer = 10 - - // Determine if the speech bubble's going to have a special look - var/presay = "" - if(istype(src, /mob/living/silicon)) - presay = "bot" - if(istype(src, /mob/living/carbon/alien)) - presay = "xeno" - if(istype(src, /mob/living/carbon/metroid)) - presay = "metroid" -*/ - for (var/mob/M in heard_a) - - M.show_message(rendered, 2) - M << speech_bubble - spawn(30) del(speech_bubble) - //spawn(30) del(speech_bubble) - /* - if(M.client) - - // If this client has bubbles disabled, obscure the bubble - if(!M.client.bubbles || M == src) - var/image/I = image('speechbubble.dmi', B, "override") - I.override = 1 - M << I - */ - - /* - // find the suffix, if bot, human or monkey - var/punctuation = "" - if(presay == "bot" || presay == "") - var/ending = copytext(text, length(text)) - if (ending == "?") - punctuation = "question" - else if (ending == "!") - punctuation = "exclamation" - else - punctuation = "" - - // flick the bubble - flick("[presay]say[punctuation]", B) - - if(istype(loc, /turf)) - B.loc = loc - else - B.loc = loc.loc - - spawn() - sleep(11) - del(B) - */ - - if (length(heard_b)) - var/message_b = tajspeak(message) - message_b = say_quote(message_b,1) - - if (italics) - message_b = "[message_b]" - - rendered = "[voice_name] [message_b]" - - - /* - // Create speech bubble - var/obj/effect/speech_bubble/B = new/obj/effect/speech_bubble - B.icon = 'speechbubble.dmi' - B.parent = src - B.mouse_opacity = 0 - B.invisibility = invisibility - B.layer = 10 - - // Determine if the speech bubble's going to have a special look - var/presay = "" - if(istype(src, /mob/living/silicon)) - presay = "bot" - if(istype(src, /mob/living/carbon/alien)) - presay = "xeno" - if(istype(src, /mob/living/carbon/metroid)) - presay = "metroid" - */ - - for (var/mob/M in heard_b) - M.show_message(rendered, 2) - M << speech_bubble - spawn(30) del(speech_bubble) - - /* - if(M.client) - - if(!M.client.bubbles || M == src) - var/image/I = image('speechbubble.dmi', B, "override") - I.override = 1 - M << I - - - flick("[presay]say", B) - - if(istype(loc, /turf)) - B.loc = loc - else - B.loc = loc.loc - - spawn() - sleep(11) - del(B) - */ - - if (length(eavesdroppers)) - - for (var/mob/M in eavesdroppers) - M << "\blue [src] speaks into their radio..." - M << speech_bubble - spawn(30) del(speech_bubble) - -/mob/living/carbon/human/tajaran/say_understands(var/other) - if (istype(other, /mob/living/silicon/ai)) - return 1 - if (istype(other, /mob/living/silicon/decoy)) - return 1 - if (istype(other, /mob/living/silicon/pai)) - return 1 - if (istype(other, /mob/living/silicon/robot)) - return 1 - if (istype(other, /mob/living/carbon/brain)) - return 1 - if (istype(other, /mob/living/carbon/metroid)) - return 1 - if (istype(other, /mob/living/carbon/human)) - return 1 - return ..() \ No newline at end of file diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajara_transformation.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/tajara_transformation.dm deleted file mode 100644 index 8a42b794f0a..00000000000 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/tajara_transformation.dm +++ /dev/null @@ -1,74 +0,0 @@ -/mob/living/carbon/human/proc/Tajaraize() - if (monkeyizing) - return - monkeyizing = 1 - canmove = 0 - icon = null - invisibility = 101 - overlays = list() - - var/atom/movable/overlay/animation = new /atom/movable/overlay( loc ) - animation.icon_state = "blank" - animation.icon = 'mob.dmi' - animation.master = src - flick("h2monkey", animation) - sleep(18) - //animation = null - var/mob/living/carbon/human/tajaran/O = new /mob/living/carbon/human/tajaran( loc ) - del(animation) - O.organs.Cut() - O.organs = organs - for(var/name in O.organs) //Ensuring organ trasnfer - var/datum/organ/external/organ = O.organs[name] - organ.owner = O - for(var/obj/item/weapon/implant/implant in organ.implant) - implant.imp_in = O - for(var/obj/hud/H in contents) //Lets not get a duplicate hud - del(H) - for(var/named in vars) //Making them keep their crap. - if(istype(vars[named], /obj/item)) - O.vars[named] = vars[named] - else if (named == "contents") - O.vars[named] = vars[named] - - O.real_name = real_name - O.name = name - O.dna = dna - updateappearance(O,O.dna.uni_identity) - O.loc = loc - O.viruses = viruses - O.s_tone = s_tone - viruses = list() - for(var/datum/disease/D in O.viruses) - D.affected_mob = O - O.flavor_text = flavor_text - O.universal_speak = 1 //hacky fix until someone can figure out how to make them only understand humans - - if (client) - client.mob = O - if(mind) - mind.transfer_to(O) - - del(O.stand_icon) //Force it to update. - del(O.lying_icon) - - O.update_body() - O.update_face() - spawn(1) - O.rebuild_appearance() - O << "You are now a Tajara." - spawn(0)//To prevent the proc from returning null. - del(src) - return - -/client/proc/make_tajaran(mob/living/carbon/human/H as mob) - set category = "Fun" - set name = "Make Tajaran" - set desc = "Make (mob) into a tajaran." - - if (!holder) - src << "Only administrators may use this command." - return - - if(istype(H)) - H:Tajaraize() \ No newline at end of file diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm deleted file mode 100644 index d000dba7c3a..00000000000 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm +++ /dev/null @@ -1,613 +0,0 @@ -/mob/living/carbon/human/tajaran - name = "tajaran" - real_name = "tajaran" - voice_name = "tajaran" - icon = 'tajaran.dmi' - icon_state = "m_none" - var/list/tajspeak_letters = list("~","*","-") - //universal_speak = 1 (I think I fixed it, need testy testy) hacky fix until someone can figure out how to make them only understand humans - taj_talk_understand = 1 - voice_message = "mrowls" - examine_text = "one of the cat-like Tajarans" - -/mob/living/carbon/human/tajaran/New() - var/g = "m" - if (gender == FEMALE) - g = "f" - - spawn (1) - if(!stand_icon) - stand_icon = new /icon('tajaran.dmi', "body_[g]_s") - if(!lying_icon) - lying_icon = new /icon('tajaran.dmi', "body_[g]_l") - icon = stand_icon - rebuild_appearance() - src << "\blue Your icons have been generated!" - - ..() - - spawn(33) - update_clothing() - update_body() - update_face() - -/mob/living/carbon/human/tajaran/rebuild_appearance() - update_clothing() - -/mob/living/carbon/human/tajaran/update_body_appearance() - update_clothing() - -/mob/living/carbon/human/tajaran/update_clothing() -// ..() - - if (monkeyizing) - return - - overlays = null - - // lol - var/fat = "" - /*if (FAT in mutation) - fat = "fat"*/ -/* - if (HULK in mutations) - overlays += image("icon" = 'genetics.dmi', "icon_state" = "hulk[fat][!lying ? "_s" : "_l"]") -*/ - if (COLD_RESISTANCE in mutations) - overlays += image("icon" = 'genetics.dmi', "icon_state" = "fire[fat][!lying ? "_s" : "_l"]") - - if (TK in mutations) - overlays += image("icon" = 'genetics.dmi', "icon_state" = "telekinesishead[fat][!lying ? "_s" : "_l"]") - - if (LASER in mutations) - overlays += image("icon" = 'genetics.dmi', "icon_state" = "lasereyes[!lying ? "_s" : "_l"]") - - if (mutantrace) - switch(mutantrace) - if("golem","metroid") - overlays += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace][fat][!lying ? "_s" : "_l"]") - if(face_standing) - del(face_standing) - if(face_lying) - del(face_lying) - if(stand_icon) - del(stand_icon) - if(lying_icon) - del(lying_icon) - if("lizard") - overlays += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace][fat]_[gender][!lying ? "_s" : "_l"]") - if(face_standing) - del(face_standing) - if(face_lying) - del(face_lying) - if(stand_icon) - del(stand_icon) - if(lying_icon) - del(lying_icon) - if("skrell") - body_overlays_standing += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace]_[gender]_s") - body_overlays_lying += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace]_[gender]_l") -// This needs to be matched up with humans, but I'm too lazy right now -// if(face_standing) -// del(face_standing) -// if(face_lying) -// del(face_lying) - if(stand_icon) - del(stand_icon) - if(lying_icon) - del(lying_icon) - if("plant") - if(stat != 2) //if not dead, that is - overlays += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace][fat]_[gender][!lying ? "_s" : "_l"]") - else - overlays += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace]_d") - if(face_standing) - del(face_standing) - if(face_lying) - del(face_lying) - if(stand_icon) - del(stand_icon) - if(lying_icon) - del(lying_icon) - else - if(!face_standing || !face_lying) - update_face() - if(!stand_icon || !lying_icon) - update_body() - - if(buckled) - if(istype(buckled, /obj/structure/stool/bed)) - lying = 1 - else - lying = 0 - - // Automatically drop anything in store / id / belt if you're not wearing a uniform. - if (!w_uniform) - for (var/obj/item/thing in list(r_store, l_store, wear_id, belt)) - if (thing) - u_equip(thing) - if (client) - client.screen -= thing - - if (thing) - thing.loc = loc - thing.dropped(src) - thing.layer = initial(thing.layer) - - - //if (zone_sel) - // zone_sel.overlays = null - // zone_sel.overlays += body_standing - // zone_sel.overlays += image("icon" = 'zone_sel.dmi', "icon_state" = text("[]", zone_sel.selecting)) - - if (lying) - icon = lying_icon - - overlays += damageicon_lying - - if (face_lying) - overlays += face_lying - else - icon = stand_icon - - overlays += damageicon_standing - - if (face_standing) - overlays += face_standing - - // Uniform - if(w_uniform) - /*if ((FAT in mutations) && !(w_uniform.flags & ONESIZEFITSALL)) - src << "\red You burst out of the [w_uniform.name]!" - var/obj/item/clothing/c = w_uniform - u_equip(c) - if(client) - client.screen -= c - if(c) - c:loc = loc - c:dropped(src) - c:layer = initial(c:layer)*/ - if(w_uniform)//I should really not need these - w_uniform.screen_loc = ui_iclothing - if(istype(w_uniform, /obj/item/clothing/under)) - var/t1 = w_uniform.color - if (!t1) - t1 = icon_state - /*if (FAT in mutations) - overlays += image("icon" = 'uniform_fat.dmi', "icon_state" = "[t1][!lying ? "_s" : "_l"]", "layer" = MOB_LAYER) - else*/ - overlays += image("icon" = 'uniform.dmi', "icon_state" = text("[][]",t1, (!(lying) ? "_s" : "_l")), "layer" = MOB_LAYER) - if (w_uniform.blood_DNA) - var/icon/stain_icon = icon('blood.dmi', "uniformblood[!lying ? "" : "2"]") - overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) - - if (wear_id) - if(wear_id.over_jumpsuit) - overlays += image("icon" = 'mob.dmi', "icon_state" = "id[!lying ? null : "2"]", "layer" = MOB_LAYER) - - if (client) - client.screen -= hud_used.intents - client.screen -= hud_used.mov_int - - - //Screenlocs for these slots are handled by the huds other_update() - //because theyre located on the 'other' inventory bar. - - // Gloves - var/datum/organ/external/lo = organs["l_hand"] - var/datum/organ/external/ro = organs["r_hand"] - if (!(lo.status & ORGAN_DESTROYED && ro.status & ORGAN_DESTROYED)) - if (gloves) - var/t1 = gloves.item_state - if (!t1) - t1 = gloves.icon_state - var/icon/gloves_icon = new /icon("icon" = 'hands.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2"))) - if(lo.status & ORGAN_DESTROYED) - gloves_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY) - else if(ro.status & ORGAN_DESTROYED) - gloves_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY) - overlays += image(gloves_icon, "layer" = MOB_LAYER) - if (gloves.blood_DNA) - var/icon/stain_icon = icon('blood.dmi', "bloodyhands[!lying ? "" : "2"]") - if(lo.status & ORGAN_DESTROYED) - stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY) - else if(ro.status & ORGAN_DESTROYED) - stain_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY) - overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) - else if (blood_DNA) - var/icon/stain_icon = icon('blood.dmi', "bloodyhands[!lying ? "" : "2"]") - if(lo.status & ORGAN_DESTROYED) - stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY) - else if(ro.status & ORGAN_DESTROYED) - stain_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY) - overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) - // Glasses - if (glasses) - var/t1 = glasses.icon_state - overlays += image("icon" = 'eyes.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) - // Ears - if (l_ear) - var/t1 = l_ear.icon_state - overlays += image("icon" = 'ears.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) - if (r_ear) - var/t1 = r_ear.icon_state - overlays += image("icon" = 'ears.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) - // Shoes - lo = organs["l_foot"] - ro = organs["r_foot"] - if (!(lo.status & ORGAN_DESTROYED && ro.status & ORGAN_DESTROYED) && shoes) - var/t1 = shoes.icon_state - var/icon/shoes_icon = new /icon("icon" = 'feet.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2"))) - if(lo.status & ORGAN_DESTROYED && !lying) - shoes_icon.Blend(new /icon('limb_mask.dmi', "right[lying?"_l":""]"), ICON_MULTIPLY) - else if(ro.status & ORGAN_DESTROYED && !lying) - shoes_icon.Blend(new /icon('limb_mask.dmi', "left[lying?"_l":""]"), ICON_MULTIPLY) - overlays += image(shoes_icon, "layer" = MOB_LAYER) - if (shoes.blood_DNA) - var/icon/stain_icon = icon('blood.dmi', "shoesblood[!lying ? "" : "2"]") - if(lo.status & ORGAN_DESTROYED) - stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY) - else if(ro.status & ORGAN_DESTROYED) - stain_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY) - overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) // Radio -/* if (w_radio) - overlays += image("icon" = 'ears.dmi', "icon_state" = "headset[!lying ? "" : "2"]", "layer" = MOB_LAYER) */ - - if (s_store) - var/t1 = s_store.item_state - if (!t1) - t1 = s_store.icon_state - if(!istype(wear_suit, /obj/item/clothing/suit/storage/armoredundersuit)) - overlays += image("icon" = 'belt_mirror.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) - s_store.screen_loc = ui_sstore1 - - if(client) hud_used.other_update() //Update the screenloc of the items on the 'other' inventory bar - //to hide / show them. - if (client) - if (i_select) - if (intent) - client.screen += hud_used.intents - - var/list/L = dd_text2list(intent, ",") - L[1] += ":-11" - i_select.screen_loc = dd_list2text(L,",") //ICONS4, FUCKING SHIT - else - i_select.screen_loc = null - if (m_select) - if (m_int) - client.screen += hud_used.mov_int - - var/list/L = dd_text2list(m_int, ",") - L[1] += ":-11" - m_select.screen_loc = dd_list2text(L,",") //ICONS4, FUCKING SHIT - else - m_select.screen_loc = null - - var/tail_shown = 1 - if (wear_suit) - /*if ((FAT in mutations) && !(wear_suit.flags & ONESIZEFITSALL)) - src << "\red You burst out of the [wear_suit.name]!" - var/obj/item/clothing/c = wear_suit - u_equip(c) - if(client) - client.screen -= c - if(c) - c:loc = loc - c:dropped(src) - c:layer = initial(c:layer)*/ - if (istype(wear_suit, /obj/item/clothing/suit)) - var/t1 = wear_suit.icon_state - overlays += image("icon" = 'suit.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) - if (wear_suit) - if (wear_suit.blood_DNA) - var/icon/stain_icon = null - if (istype(wear_suit, /obj/item/clothing/suit/armor/vest || /obj/item/clothing/suit/storage/wcoat)) - stain_icon = icon('blood.dmi', "armorblood[!lying ? "" : "2"]") - else if (istype(wear_suit, /obj/item/clothing/suit/storage/det_suit || /obj/item/clothing/suit/storage/labcoat)) - stain_icon = icon('blood.dmi', "coatblood[!lying ? "" : "2"]") - else - stain_icon = icon('blood.dmi', "suitblood[!lying ? "" : "2"]") - overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) - wear_suit.screen_loc = ui_oclothing - if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) - if (handcuffed) - handcuffed.loc = loc - handcuffed.layer = initial(handcuffed.layer) - handcuffed = null - if ((l_hand || r_hand)) - var/h = hand - hand = 1 - drop_item() - hand = 0 - drop_item() - hand = h - //if wearing some suits, hide the tail - if ( istype(wear_suit, /obj/item/clothing/suit/bio_suit) || istype(wear_suit, /obj/item/clothing/suit/bomb_suit) || istype(wear_suit, /obj/item/clothing/suit/space) ) - tail_shown = 0 - if(tail_shown) - overlays += image("icon" = icon('tajaran.dmi', "tail_[gender==FEMALE ? "f" : "m"]_[lying ? "l" : "s"]"), "layer" = MOB_LAYER) - - if (lying) - if (face_lying) - overlays += face_lying - else - if (face_standing) - overlays += face_standing - - if (wear_mask) - if (istype(wear_mask, /obj/item/clothing/mask)) - var/t1 = wear_mask.icon_state - overlays += image("icon" = 'mask.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) - if (!istype(wear_mask, /obj/item/clothing/mask/cigarette)) - if (wear_mask.blood_DNA) - var/icon/stain_icon = icon('blood.dmi', "maskblood[!lying ? "" : "2"]") - overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) - wear_mask.screen_loc = ui_mask - - // Head - if (head) - var/t1 = head.icon_state - var/icon/head_icon = icon('head.dmi', text("[][]", t1, (!( lying ) ? null : "2"))) - if(istype(head,/obj/item/clothing/head/kitty)) - head_icon = (( lying ) ? head:mob2 : head:mob) - overlays += image("icon" = head_icon, "layer" = MOB_LAYER) - if(gimmick_hat) - overlays += image("icon" = icon('gimmick_head.dmi', "[gimmick_hat][!lying ? "" : "2"]"), "layer" = MOB_LAYER) - if (head.blood_DNA) - var/icon/stain_icon = icon('blood.dmi', "helmetblood[!lying ? "" : "2"]") - overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) - head.screen_loc = ui_head - else - var/datum/organ/external/head = organs["head"] - if(!(head.status & ORGAN_DESTROYED)) - //if not wearing anything on the head, show the ears - overlays += image("icon" = icon('tajaran.dmi', "ears_[gender==FEMALE ? "f" : "m"]_[lying ? "l" : "s"]"), "layer" = MOB_LAYER) - - // Belt - if (belt) - var/t1 = belt.item_state - if (!t1) - t1 = belt.icon_state - overlays += image("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) - belt.screen_loc = ui_belt - - - name = get_visible_name() - - if (wear_id) - wear_id.screen_loc = ui_id - - if (l_store) - l_store.screen_loc = ui_storage1 - - if (r_store) - r_store.screen_loc = ui_storage2 - - if (back) - var/t1 = back.icon_state - overlays += image("icon" = 'back.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) - back.screen_loc = ui_back - - if (handcuffed) - pulling = null - if (!lying) - overlays += image("icon" = 'mob.dmi', "icon_state" = "handcuff1", "layer" = MOB_LAYER) - else - overlays += image("icon" = 'mob.dmi', "icon_state" = "handcuff2", "layer" = MOB_LAYER) - - if (client) - client.screen -= contents - client.screen += contents - - if (r_hand) - overlays += image("icon" = 'items_righthand.dmi', "icon_state" = r_hand.item_state ? r_hand.item_state : r_hand.icon_state, "layer" = MOB_LAYER+1) - - r_hand.screen_loc = ui_rhand - - if (l_hand) - overlays += image("icon" = 'items_lefthand.dmi', "icon_state" = l_hand.item_state ? l_hand.item_state : l_hand.icon_state, "layer" = MOB_LAYER+1) - - l_hand.screen_loc = ui_lhand - - var/shielded = 0 - for (var/obj/item/weapon/cloaking_device/S in src) - if (S.active) - shielded = 2 - break - - if(istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)&&wear_suit:s_active) - shielded = 3 - - switch(shielded) - if(1) - overlays += image("icon" = 'effects.dmi', "icon_state" = "shield", "layer" = MOB_LAYER+1) - if(2) - invisibility = 2 - //New stealth. Hopefully doesn't lag too much. /N - if(istype(loc, /turf))//If they are standing on a turf. - AddCamoOverlay(loc)//Overlay camo. - if(3) - if(istype(loc, /turf)) - //Ninjas may flick into view once in a while if they are stealthed. - if(prob(90)) - NinjaStealthActive(loc) - else - NinjaStealthMalf() - else - invisibility = 0 - - if(client && client.admin_invis) - invisibility = 100 - else if (shielded == 2) - invisibility = 2 - else - invisibility = 0 - if(targeted_by && target_locked) - overlays += target_locked - else if(targeted_by) - target_locked = new /obj/effect/target_locked(src) - overlays += target_locked - else if(!targeted_by && target_locked) - del(target_locked) - -/* - for (var/mob/M in viewers(1, src))//For the love of god DO NOT REFRESH EVERY SECOND - Mport - if ((M.client && M.machine == src)) - spawn (0) - show_inv(M) - return -*/ - last_b_state = stat - -/mob/living/carbon/human/tajaran/update_body() - if(stand_icon) - del(stand_icon) - if(lying_icon) - del(lying_icon) - - if (mutantrace) - return - - var/g = "m" - if (gender == MALE) - g = "m" - else if (gender == FEMALE) - g = "f" - - stand_icon = new /icon('tajaran.dmi', "torso_[g]_s") - lying_icon = new /icon('tajaran.dmi', "torso_[g]_l") - - - - var/husk = (HUSK in mutations) - //var/obese = (FAT in mutations) - - stand_icon.Blend(new /icon('tajaran.dmi', "chest_[g]_s"), ICON_OVERLAY) - lying_icon.Blend(new /icon('tajaran.dmi', "chest_[g]_l"), ICON_OVERLAY) - - var/datum/organ/external/head = organs["head"] - if(!(head.status & ORGAN_DESTROYED)) - stand_icon.Blend(new /icon('tajaran.dmi', "head_[g]_s"), ICON_OVERLAY) - lying_icon.Blend(new /icon('tajaran.dmi', "head_[g]_l"), ICON_OVERLAY) - - for(var/name in organs) - var/datum/organ/external/part = organs[name] - if(!istype(part, /datum/organ/external/groin) \ - && !istype(part, /datum/organ/external/chest) \ - && !istype(part, /datum/organ/external/head) \ - && !(part.status & ORGAN_DESTROYED)) - var/icon/temp = new /icon('tajaran.dmi', "[part.icon_name]_s") - if(part.status & ORGAN_ROBOT) temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) - stand_icon.Blend(temp, ICON_OVERLAY) - temp = new /icon('tajaran.dmi', "[part.icon_name]_l") - if(part.status & ORGAN_ROBOT) temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) - lying_icon.Blend(temp , ICON_OVERLAY) - - stand_icon.Blend(new /icon('tajaran.dmi', "groin_[g]_s"), ICON_OVERLAY) - lying_icon.Blend(new /icon('tajaran.dmi', "groin_[g]_l"), ICON_OVERLAY) - - if (husk) - var/icon/husk_s = new /icon('tajaran.dmi', "husk_s") - var/icon/husk_l = new /icon('tajaran.dmi', "husk_l") - - for(var/name in organs) - var/datum/organ/external/part = organs[name] - if(!istype(part, /datum/organ/external/groin) \ - && !istype(part, /datum/organ/external/chest) \ - && !istype(part, /datum/organ/external/head) \ - && (part.status & ORGAN_DESTROYED)) - husk_s.Blend(new /icon('dam_mask.dmi', "[part.icon_name]"), ICON_SUBTRACT) - husk_l.Blend(new /icon('dam_mask.dmi', "[part.icon_name]2"), ICON_SUBTRACT) - - stand_icon.Blend(husk_s, ICON_OVERLAY) - lying_icon.Blend(husk_l, ICON_OVERLAY) - /*else if(obese) - stand_icon.Blend(new /icon('human.dmi', "fatbody_s"), ICON_OVERLAY) - lying_icon.Blend(new /icon('human.dmi', "fatbody_l"), ICON_OVERLAY)*/ - - // Skin tone - if (s_tone >= 0) - stand_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD) - lying_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD) - else - stand_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) - lying_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) - - if (underwear > 0) - //if(!obese) - stand_icon.Blend(new /icon('tajaran.dmi', "underwear[underwear]_[g]_s"), ICON_OVERLAY) - lying_icon.Blend(new /icon('tajaran.dmi', "underwear[underwear]_[g]_l"), ICON_OVERLAY) - - -/mob/living/carbon/human/tajaran/update_face() - if(organs) - var/datum/organ/external/head = organs["head"] - if(head) - if(head.status & ORGAN_DESTROYED) - del(face_standing) - del(face_lying) - return - - //if(!facial_hair_style || !hair_style) return//Seems people like to lose their icons, this should stop the runtimes for now - del(face_standing) - del(face_lying) - - if (mutantrace) - return - - var/g = "m" - if (gender == MALE) - g = "m" - else if (gender == FEMALE) - g = "f" - - var/icon/eyes_s = new/icon("icon" = 'tajaran_face.dmi', "icon_state" = "eyes_s") - var/icon/eyes_l = new/icon("icon" = 'tajaran_face.dmi', "icon_state" = "eyes_l") - eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) - eyes_l.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) - - //var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") - //var/icon/hair_l = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_l") - //hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) - //hair_l.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) - - //var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - //var/icon/facial_l = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_l") - //facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) - //facial_l.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) - - var/icon/mouth_s = new/icon("icon" = 'tajaran_face.dmi', "icon_state" = "mouth_[g]_s") - var/icon/mouth_l = new/icon("icon" = 'tajaran_face.dmi', "icon_state" = "mouth_[g]_l") - - // if the head or mask has the flag BLOCKHAIR (equal to 5), then do not apply hair - //if((!(head && (head.flags & BLOCKHAIR))) && !(wear_mask && (wear_mask.flags & BLOCKHAIR))) - //eyes_s.Blend(hair_s, ICON_OVERLAY) - //eyes_l.Blend(hair_l, ICON_OVERLAY) - - eyes_s.Blend(mouth_s, ICON_OVERLAY) - eyes_l.Blend(mouth_l, ICON_OVERLAY) - - // if BLOCKHAIR, do not apply facial hair - //if((!(head && (head.flags & BLOCKHAIR))) && !(wear_mask && (wear_mask.flags & BLOCKHAIR))) - //eyes_s.Blend(facial_s, ICON_OVERLAY) - //eyes_l.Blend(facial_l, ICON_OVERLAY) - - - face_standing = new /image() - face_lying = new /image() - face_standing.icon = eyes_s - face_standing.layer = MOB_LAYER - face_lying.icon = eyes_l - face_lying.layer = MOB_LAYER - - del(mouth_l) - del(mouth_s) - //del(facial_l) - //del(facial_s) - //del(hair_l) - //del(hair_s) - del(eyes_l) - del(eyes_s) - -/mob/living/carbon/human/tajaran/co2overloadtime = null -/mob/living/carbon/human/tajaran/temperature_resistance = T0C+70 diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dmi b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dmi deleted file mode 100644 index 2cc2970bfd72f917f2165f6f370453fbaa16927e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28378 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 EA7fRhK>z>% diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran_placeholder.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran_placeholder.dm deleted file mode 100644 index 38b80bb4ef8..00000000000 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran_placeholder.dm +++ /dev/null @@ -1,4 +0,0 @@ -//todo: this -/mob/living/carbon/human/tajaran - -/mob/var/taj_talk_understand = 0 \ No newline at end of file diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/whisper.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/whisper.dm deleted file mode 100644 index 78354ba903f..00000000000 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/whisper.dm +++ /dev/null @@ -1,170 +0,0 @@ -/mob/living/carbon/human/tajaran/whisper(message as text) - //Figured it out. If you use say :w (message) it HTML encodes it, THEN passes it to the whisper code, which does so again. Jeez. --SkyMarshal - message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) - - if (!message) - return - - if (silent) - return - - log_whisper("[src.name]/[src.key] : [message]") - - if (src.client && (src.client.muted || src.client.muted_complete)) - src << "You are muted." - return - - if (src.stat == 2) - return src.say_dead(message) - - if (src.stat) - return - - 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()])" - // Mute disability - if (src.disabilities & 64) - return - - if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle)) - return - - var/italics = 1 - var/message_range = 1 - - //work out if we're speaking tajaran or not - var/is_speaking_taj = 0 - if(copytext(message, 1, 4) == ":j ") - message = copytext(message, 4) - if(taj_talk_understand || universal_speak) - is_speaking_taj = 1 - - if(istype(src.wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja)&&src.wear_mask:voice=="Unknown") - if(copytext(message, 1, 2) != "*") - var/list/temp_message = dd_text2list(message, " ") - var/list/pick_list = list() - for(var/i = 1, i <= temp_message.len, i++) - pick_list += i - for(var/i=1, i <= abs(temp_message.len/3), i++) - var/H = pick(pick_list) - if(findtext(temp_message[H], "*") || findtext(temp_message[H], ";") || findtext(temp_message[H], ":")) continue - temp_message[H] = ninjaspeak(temp_message[H]) - pick_list -= H - message = dd_list2text(temp_message, " ") - message = dd_replaceText(message, "o", "¤") - message = dd_replaceText(message, "p", "þ") - message = dd_replaceText(message, "l", "£") - message = dd_replaceText(message, "s", "§") - message = dd_replaceText(message, "u", "µ") - message = dd_replaceText(message, "b", "ß") - - message = capitalize(message) - - if (src.stuttering) - message = stutter(message) - if (src.slurring) - message = slur(message) - - for (var/obj/O in view(message_range, src)) - spawn (0) - if (O) - O.hear_talk(src, message) - - var/list/listening = hearers(message_range, src) - listening -= src - listening += src - var/list/eavesdropping = hearers(2, src) - eavesdropping -= src - eavesdropping -= listening - var/list/watching = hearers(5, src) - watching -= src - watching -= listening - watching -= eavesdropping - - var/list/heard_a = list() // understood us - var/list/heard_b = list() // didn't understand us - - for (var/mob/M in listening) - if ( M.say_understands(src) && (M.taj_talk_understand || !is_speaking_taj || M.universal_speak) ) - heard_a += M - else - heard_b += M - - var/rendered = null - - for (var/mob/M in watching) - if ( (M.say_understands(src) && !is_speaking_taj) || istype(M,/mob/living/carbon/human/tajaran) ) - rendered = "[src.name] [is_speaking_taj ? "quietly mrowls" : "whispers"] something." - else - rendered = "[src.voice_name] [is_speaking_taj ? "quietly mrowls" : "whispers"] something." - M.show_message(rendered, 2) - - if (length(heard_a)) - var/message_a = message - - if (italics) - message_a = "[message_a]" - //This appears copied from carbon/living say.dm so the istype check for mob is probably not needed. Appending for src is also not needed as the game will check that automatically. - if (!istype(src, /mob/living/carbon/human)) - rendered = "[name] [is_speaking_taj ? "mrowls quietly" : "whispers"], \"[message_a]\"" - else if (istype(wear_mask, /obj/item/clothing/mask/gas/voice)) - if (wear_mask:vchange) - rendered = "[wear_mask:voice] [is_speaking_taj ? "mrowls quietly" : "whispers"], \"[message_a]\"" - else - rendered = "[name] [is_speaking_taj ? "mrowls quietly" : "whispers"], \"[message_a]\"" - else - rendered = "[real_name][alt_name] [is_speaking_taj ? "mrowls quietly" : "whispers"], \"[message_a]\"" - - for (var/mob/M in heard_a) - M.show_message(rendered, 2) - - if (length(heard_b)) - var/message_b - - message_b = tajspeak(message) - - if (italics) - message_b = "[message_b]" - - rendered = "[src.voice_name] mrows quietly, \"[message_b]\"" - - for (var/mob/M in heard_b) - M.show_message(rendered, 2) - - for (var/mob/M in eavesdropping) - if (M.say_understands(src)) - var/message_c = tajspeak(message) - if (!istype(src, /mob/living/carbon/human)) - rendered = "[name] mrowls quietly, \"[message_c]\"" - else if(istype(wear_mask, /obj/item/clothing/mask/gas/voice)) - if(wear_mask:vchange) - rendered = "[wear_mask:voice] mrowls quietly, \"[message_c]\"" - else - rendered = "[name] mrowls quietly, \"[message_c]\"" - else - rendered = "[real_name][alt_name] mrowls quietly, \"[message_c]\"" - M.show_message(rendered, 2) - else - rendered = "[src.voice_name] quietly mrowls something." - M.show_message(rendered, 2) - - if (italics) - message = "[message]" - - if (!istype(src, /mob/living/carbon/human)) - rendered = "[name] [is_speaking_taj ? "mrowls quietly" : "whispers"], \"[message]\"" - else if (istype(src.wear_mask, /obj/item/clothing/mask/gas/voice)) - if(wear_mask:vchange) - rendered = "[wear_mask:voice] [is_speaking_taj ? "mrowls quietly" : "whispers"], \"[message]\"" - else - rendered = "[name] [is_speaking_taj ? "mrowls quietly" : "whispers"], \"[message]\"" - else - rendered = "[real_name][alt_name] [is_speaking_taj ? "mrowls quietly" : "whispers"], \"[message]\"" - - for (var/mob/M in world) - if (istype(M, /mob/new_player)) - continue - if (M.stat > 1 && !(M in heard_a)) - M.show_message(rendered, 2)