From 721dfeda5710feef7e002b332d5703670c29b6bc Mon Sep 17 00:00:00 2001 From: Cael_Aislinn Date: Tue, 23 Oct 2012 23:14:38 +1000 Subject: [PATCH 1/5] 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) From a9431fcecfc471937282c09d3c8e8eb7c7acdc9e Mon Sep 17 00:00:00 2001 From: Cael_Aislinn Date: Wed, 24 Oct 2012 23:06:41 +1000 Subject: [PATCH 2/5] removed immovable rod from occurring, removed space dust, doubled time between events Signed-off-by: Cael_Aislinn --- code/game/gamemodes/events.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 6a8487b5166..5cc0205695f 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -5,9 +5,9 @@ //and also to stop spawn copying variables from the game ticker spawn(3000) while(1) - if(prob(50))//Every 120 seconds and prob 50 2-4 weak spacedusts will hit the station + /*if(prob(50))//Every 120 seconds and prob 50 2-4 weak spacedusts will hit the station spawn(1) - dust_swarm("weak") + dust_swarm("weak")*/ if (!event) //CARN: checks to see if random events are enabled. if(config.allow_random_events && prob(eventchance)) @@ -17,7 +17,7 @@ Holiday_Random_Event() else event = 0 - sleep(1200) + sleep(2400) /proc/event() event = 1 @@ -83,8 +83,8 @@ prison_break() if(9) carp_migration() - if(10) - immovablerod() + /*if(10) + immovablerod()*/ if(11) lightsout(1,2) if(12) From 3ebb8b2173926cb9a244417d470ed6987d0a9fa2 Mon Sep 17 00:00:00 2001 From: Cael_Aislinn Date: Wed, 24 Oct 2012 23:25:24 +1000 Subject: [PATCH 3/5] remove random debug msg Signed-off-by: Cael_Aislinn --- code/modules/admin/admin_verbs.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 190122f9665..954204db2be 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -23,7 +23,6 @@ return(1) /client/proc/update_admins(var/rank) - world << "update_admins([rank])" if(!holder) holder = new /datum/admins(rank) admin_list |= src From 5bee6e1d24296013f2ffb98afbf7295e608edb79 Mon Sep 17 00:00:00 2001 From: Cael_Aislinn Date: Wed, 24 Oct 2012 23:45:57 +1000 Subject: [PATCH 4/5] ghosts have universal talk again Signed-off-by: Cael_Aislinn --- code/modules/mob/dead/observer/observer.dm | 1 + code/modules/mob/new_player/new_player.dm | 1 + 2 files changed, 2 insertions(+) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 65d618d7ce9..42e0f89d68a 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -16,6 +16,7 @@ var/started_as_observer //This variable is set to 1 when you enter the game as an observer. //If you died in the game and are a ghsot - this will remain as null. //Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot. + universal_speak = 1 /mob/dead/observer/New(mob/body) sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 7cabdec9413..b26a2bef6dc 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -6,6 +6,7 @@ var/spawning = 0//Referenced when you want to delete the new_player later on in the code. var/totalPlayers = 0 //Player counts for the Lobby tab var/totalPlayersReady = 0 + universal_speak = 1 invisibility = 101 From 8d221669410811767b8ae755512e5ad5b3797948 Mon Sep 17 00:00:00 2001 From: Cael_Aislinn Date: Thu, 25 Oct 2012 00:08:58 +1000 Subject: [PATCH 5/5] - tweaked lplasma spills and fire spawning - oxygen content is no longer counted towards % spawn chance. - to spawn a turf fire (at default ignition level) atmos zones now require at least 17 moles of ignitable material (note that flamethrower fuel counts 15x more than other ignitables) the relevant code seems weird and all over the place, but this seems to work in testing so i'm committing it for now Signed-off-by: Cael_Aislinn --- code/ZAS/Fire.dm | 11 ++++++++--- code/modules/reagents/Chemistry-Reagents.dm | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 9501d4222e7..04c505dc38b 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -219,7 +219,7 @@ datum/gas_mixture/proc/zburn(obj/effect/decal/cleanable/liquid_fuel/liquid) temperature = max( 1700*log(0.4*firelevel + 1.23) , temperature ) //Consume some gas. - var/consumed_gas = min(oxygen,0.05*firelevel,total_fuel) / fuel_sources + var/consumed_gas = min(oxygen,firelevel,total_fuel) / fuel_sources oxygen = max(0,oxygen-consumed_gas) @@ -245,14 +245,19 @@ datum/gas_mixture/proc/calculate_firelevel(obj/effect/decal/cleanable/liquid_fue var datum/gas/volatile_fuel/fuel = locate() in trace_gases liquid_concentration = 0 + fuel_concentration = 0 oxy_concentration = oxygen / volume tox_concentration = toxins / volume - fuel_concentration = 0 if(fuel) fuel_concentration = (fuel.moles) / volume if(liquid) liquid_concentration = (liquid.amount*15) / volume - return (oxy_concentration + tox_concentration + liquid_concentration + fuel_concentration)*100 + + var/final = tox_concentration + liquid_concentration + fuel_concentration + if(final > oxy_concentration) + final = oxy_concentration + + return final * 100 /mob/living/carbon/human/proc/FireBurn(mx as num) //Burns mobs due to fire. Respects heat transfer coefficients on various body parts. diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 84e6c484060..2854975d497 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -1126,14 +1126,14 @@ datum var/turf/the_turf = get_turf(O) var/datum/gas_mixture/napalm = new var/datum/gas/volatile_fuel/fuel = new - fuel.moles = 5 + fuel.moles = volume napalm.trace_gases += fuel the_turf.assume_air(napalm) reaction_turf(var/turf/T, var/volume) src = null var/datum/gas_mixture/napalm = new var/datum/gas/volatile_fuel/fuel = new - fuel.moles = 5 + fuel.moles = volume napalm.trace_gases += fuel T.assume_air(napalm) return