Merge pull request #786 from SkyMarshal/Airlocks

Adds dismemberment to Tajarans and Monkeys.  Added some sanity checks to prevent people from punching you when they are missing hands.  Fixed more wound stuff.  Some examine fixes.
This commit is contained in:
CIB
2012-04-04 05:21:54 -07:00
42 changed files with 923 additions and 362 deletions
+40 -3
View File
@@ -35,7 +35,7 @@
if(prob(src.getBruteLoss() - 50))
src.gib()
/mob/living/carbon/gib(give_medal)
/mob/living/carbon/gib(give_medal,ex_act)
for(var/mob/M in src)
if(M in src.stomach_contents)
src.stomach_contents.Remove(M)
@@ -43,9 +43,22 @@
for(var/mob/N in viewers(src, null))
if(N.client)
N.show_message(text("\red <B>[M] bursts out of [src]!</B>"), 2)
. = ..(give_medal)
. = ..(ex_act)
/mob/living/carbon/attack_hand(mob/M as mob)
if (M.hand)
if(ishuman(M) || ismonkey(M))
var/datum/organ/external/temp = M:organs["l_hand"]
if(temp.destroyed)
M << "\red Yo- wait a minute."
return
else
if(ishuman(M) || ismonkey(M))
var/datum/organ/external/temp = M:organs["r_hand"]
if(temp.destroyed)
M << "\red Yo- wait a minute."
return
if(!istype(M, /mob/living/carbon)) return
for(var/datum/disease/D in viruses)
@@ -84,6 +97,18 @@
/mob/living/carbon/attack_paw(mob/M as mob)
if(!istype(M, /mob/living/carbon)) return
if (M.hand)
if(ishuman(M) || ismonkey(M))
var/datum/organ/external/temp = M:organs["l_hand"]
if(temp.destroyed)
M << "\red Yo- wait a minute."
return
else
if(ishuman(M) || ismonkey(M))
var/datum/organ/external/temp = M:organs["r_hand"]
if(temp.destroyed)
M << "\red Yo- wait a minute."
return
for(var/datum/disease/D in viruses)
@@ -216,4 +241,16 @@
for(var/datum/organ/external/O in L)
bruteloss += O.get_damage_brute()
fireloss += O.get_damage_fire()
return
return
/mob/living/carbon/proc/check_dna()
dna.check_integrity(src)
return
/mob/living/carbon/proc/get_organ(var/zone)
if(!zone) zone = "chest"
for(var/name in organs)
var/datum/organ/external/O = organs[name]
if(O.name == zone)
return O
return null
@@ -4,6 +4,7 @@
halloss = 0
// And the suffocation was a hallucination (lazy)
//oxyloss = 0
updatehealth()
return
if(src.stat == 2)
return
+24 -19
View File
@@ -54,7 +54,7 @@
t_his = "her"
t_him = "her"
msg += "<EM>\a [src]</EM>!\n"
msg += "<EM>\a [src]</EM>[examine_text ? ", [examine_text]":""]!\n"
//uniform
if (src.w_uniform && !skipjumpsuit)
@@ -237,11 +237,13 @@
var/list/wound_descriptions = list()
var/list/wound_flavor_text = list()
var/list/is_destroyed = list()
for(var/named in organs)
var/datum/organ/external/temp = organs[named]
if(temp)
if(temp.destroyed)
wound_flavor_text["[temp.display_name]"] = "<span class='warning'><b>[src.name] is missing [t_his] [temp.display_name].</b></span>\n"
is_destroyed["[temp.display_name]"] = 1
wound_flavor_text["[temp.display_name]"] = "<span class='warning'><b>[t_He] is missing [t_his] [temp.display_name].</b></span>\n"
continue
if(temp.wounds)
var/list/wounds = list(list(),list(),list(),list(),list(),list())
@@ -401,22 +403,22 @@
switch(tally[tallied])
if(1)
if(!flavor_text.len)
flavor_text += "<span class='warning'>[src] has[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]"
flavor_text += "<span class='warning'>\The [src] has[prob(10) && !(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]]"
flavor_text += "[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]"
if(2)
if(!flavor_text.len)
flavor_text += "<span class='warning'>[src] has[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s"
flavor_text += "<span class='warning'>\The [src] has[prob(10) && !(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"
flavor_text += "[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s"
if(3 to 5)
if(!flavor_text.len)
flavor_text += "<span class='warning'>[src] has several [tallied_rename[tallied]]s"
flavor_text += "<span class='warning'>\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 += "<span class='warning'>[src] has a bunch of [tallied_rename[tallied]]s"
flavor_text += "<span class='warning'>\The [src] has a bunch of [tallied_rename[tallied]]s"
else
flavor_text += " a ton of [tallied_rename[tallied]]s"
if(flavor_text.len)
@@ -429,47 +431,50 @@
flavor_text_string += flavor_text[text]
flavor_text_string += " on [t_his] [named].</span><br>"
wound_flavor_text["[named]"] = flavor_text_string
if(wound_flavor_text["head"] && !skipmask && !(wear_mask && istype(wear_mask, /obj/item/clothing/mask/gas)))
//Handles the text strings being added to the actual description.
//If they have something that covers the limb, and it is not missing, put flavortext. If it is covered but bleeding, add other flavortext.
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 += "<span class='warning'>[src] has blood running down [t_his] face!</span>\n"
if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit)
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"])
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["left arm"] && !w_uniform && !skipjumpsuit)
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"])
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["left hand"] && !gloves && !skipgloves)
if(wound_flavor_text["left hand"] && (is_destroyed["left hand"] || (!gloves && !skipgloves)))
msg += wound_flavor_text["left hand"]
else if(is_bleeding["left hand"])
msg += "<span class='warning'>[src] has blood running from under [t_his] gloves!</span>\n"
if(wound_flavor_text["right arm"] && !w_uniform && !skipjumpsuit)
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"])
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["right hand"] && !gloves && !skipgloves)
if(wound_flavor_text["right hand"] && (is_destroyed["right hand"] || (!gloves && !skipgloves)))
msg += wound_flavor_text["right hand"]
else if(is_bleeding["right hand"])
msg += "<span class='warning'>[src] has blood running from under [t_his] gloves!</span>\n"
if(wound_flavor_text["groin"] && !w_uniform && !skipjumpsuit)
if(wound_flavor_text["groin"] && (is_destroyed["groin"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["groin"]
else if(is_bleeding["groin"])
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["left leg"] && !w_uniform && !skipjumpsuit)
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"])
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["left foot"]&& !shoes && !skipshoes)
if(wound_flavor_text["left foot"]&& (is_destroyed["left foot"] || (!shoes && !skipshoes)))
msg += wound_flavor_text["left foot"]
else if(is_bleeding["left foot"])
msg += "<span class='warning'>[src] has blood running from [t_his] shoes!</span>\n"
if(wound_flavor_text["right leg"] && !w_uniform && !skipjumpsuit)
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"])
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["right foot"]&& !shoes && !skipshoes)
if(wound_flavor_text["right foot"]&& (is_destroyed["right foot"] || (!shoes && !skipshoes)))
msg += wound_flavor_text["right foot"]
else if(is_bleeding["right foot"])
msg += "<span class='warning'>[src] has blood running from [t_his] shoes!</span>\n"
+10 -17
View File
@@ -60,6 +60,7 @@
var/bloodloss = 0
var/datum/reagents/vessel
var/pale = 0
var/examine_text = ""
/mob/living/carbon/human/dummy
real_name = "Test Dummy"
@@ -75,26 +76,22 @@
if(!dna) dna = new /datum/dna(null)
organs2 += new /datum/organ/external/chest(src)
organs2 += new /datum/organ/external/groin(src)
organs2 += new /datum/organ/external/head(src)
organs2 += new /datum/organ/external/l_arm(src)
organs2 += new /datum/organ/external/r_arm(src)
organs2 += new /datum/organ/external/r_leg(src)
organs2 += new /datum/organ/external/l_leg(src)
new /datum/organ/external/chest(src)
new /datum/organ/external/groin(src)
new /datum/organ/external/head(src)
new /datum/organ/external/l_arm(src)
new /datum/organ/external/r_arm(src)
new /datum/organ/external/r_leg(src)
new /datum/organ/external/l_leg(src)
var/datum/organ/external/part = new /datum/organ/external/l_hand(src)
part.parent = organs["l_arm"]
organs2 += part
part = new /datum/organ/external/l_foot(src)
part.parent = organs["l_leg"]
organs2 += part
part = new /datum/organ/external/r_hand(src)
part.parent = organs["r_arm"]
organs2 += part
part = new /datum/organ/external/r_foot(src)
part.parent = organs["r_leg"]
organs2 += part
var/g = "m"
if (gender == MALE)
@@ -325,7 +322,7 @@
if (1.0)
b_loss += 500
if (!prob(getarmor(null, "bomb")))
gib(1)
gib(1,1)
return
else
var/atom/target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src)))
@@ -981,7 +978,7 @@
var/icon/gloves_icon = new /icon("icon" = 'hands.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")))
if(lo.destroyed)
gloves_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY)
else if(ro.destroyed)
if(ro.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)
@@ -2742,7 +2739,3 @@ It can still be worn/put on as normal.
else
reset_view(0)
remoteobserve = null
/mob/living/carbon/human/proc/check_dna()
dna.check_integrity(src)
return
@@ -30,15 +30,6 @@
body_lying += DI
/mob/living/carbon/human/proc/get_organ(var/zone)
if(!zone) zone = "chest"
for(var/name in organs)
var/datum/organ/external/O = organs[name]
if(O.name == zone)
return O
return null
/mob/living/carbon/human/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/used_weapon = null)
if((damagetype != BRUTE) && (damagetype != BURN))
..(damage, damagetype, def_zone, blocked)
@@ -26,6 +26,6 @@
if(10)
usr << text("\blue <B>[] seems to have extreme electrical activity inside it!</B>", src.name)
print_flavor_text()
usr << print_flavor_text()
return
+236 -23
View File
@@ -1,34 +1,247 @@
/mob/living/carbon/monkey/examine()
set src in oview()
usr << "\blue *---------*"
usr << text("\blue This is \icon[] <B>[]</B>!", src, src.name)
if(!usr || !src) return
if(((usr.sdisabilities & 1) || usr.blinded || usr.stat) && !(istype(usr,/mob/dead/observer/)))
usr << "<span class='notice'>Something is there but you can't see it.</span>"
return
var/msg = "<span class='info'>*---------*\nThis is \icon[src] \a <EM>[src]</EM>!\n"
if (src.handcuffed)
usr << text("\blue [] is handcuffed! \icon[]", src.name, src.handcuffed)
msg += "It is \icon[src.handcuffed] handcuffed!\n"
if (src.wear_mask)
usr << text("\blue [] has a \icon[] [] on \his[] head!", src.name, src.wear_mask, src.wear_mask.name, src)
msg += "It has \icon[src.wear_mask] \a [src.wear_mask] on its head.\n"
if (src.l_hand)
usr << text("\blue [] has a \icon[] [] in \his[] left hand!", src.name, src.l_hand, src.l_hand.name, src)
msg += "It has \icon[src.l_hand] \a [src.l_hand] in its left hand.\n"
if (src.r_hand)
usr << text("\blue [] has a \icon[] [] in \his[] right hand!", src.name, src.r_hand, src.r_hand.name, src)
msg += "It has \icon[src.r_hand] \a [src.r_hand] in its right hand.\n"
if (src.back)
usr << text("\blue [] has a \icon[] [] on \his[] back!", src.name, src.back, src.back.name, src)
if (src.stat == 2)
usr << text("\red [] is limp and unresponsive, a dull lifeless look in their eyes.", src.name)
else
if (src.getBruteLoss())
if (src.getBruteLoss() < 30)
usr << text("\red [] looks slightly bruised!", src.name)
else
usr << text("\red <B>[] looks severely bruised!</B>", src.name)
if (src.getFireLoss())
if (src.getFireLoss() < 30)
usr << text("\red [] looks slightly burnt!", src.name)
else
usr << text("\red <B>[] looks severely burnt!</B>", src.name)
if (src.stat == 1)
usr << text("\red [] doesn't seem to be responding to anything around them, their eyes closed as though asleep.", src.name)
msg += "It has \icon[src.back] \a [src.back] on its back.\n"
if (src.stat == DEAD)
msg += "<span class='deadsay'>It is limp and unresponsive, with no signs of life.</span>\n"
print_flavor_text()
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]"] = "<span class='warning'><b>It is missing its [temp.display_name].</b></span>\n"
continue
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","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", "tiny bruise" = "tiny bruise", "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", "moderate bruise", "small 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 += "<span class='warning'>\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 += "<span class='warning'>\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 += "<span class='warning'>\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 += "<span class='warning'>\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 && text > 1)
flavor_text_string += ","
flavor_text_string += flavor_text[text]
flavor_text_string += " on its [named].</span><br>"
wound_flavor_text["[named]"] = flavor_text_string
if(wound_flavor_text["head"])
msg += wound_flavor_text["head"]
if(wound_flavor_text["chest"])
msg += wound_flavor_text["chest"]
if(wound_flavor_text["left arm"])
msg += wound_flavor_text["left arm"]
if(wound_flavor_text["left hand"])
msg += wound_flavor_text["left hand"]
if(wound_flavor_text["right arm"])
msg += wound_flavor_text["right arm"]
if(wound_flavor_text["right hand"])
msg += wound_flavor_text["right hand"]
if(wound_flavor_text["groin"])
msg += wound_flavor_text["groin"]
if(wound_flavor_text["left leg"])
msg += wound_flavor_text["left leg"]
if(wound_flavor_text["left foot"])
msg += wound_flavor_text["left foot"]
if(wound_flavor_text["right leg"])
msg += wound_flavor_text["right leg"]
if(wound_flavor_text["right foot"])
msg += wound_flavor_text["right foot"]
msg += print_flavor_text()
msg += "*---------*</span>"
usr << msg
return
+24 -2
View File
@@ -3,8 +3,8 @@
voice_name = "monkey"
voice_message = "chimpers"
say_message = "chimpers"
icon = 'monkey.dmi'
icon_state = "monkey1"
icon = 'mob.dmi'
icon_state = "m-none"
gender = NEUTER
pass_flags = PASSTABLE
@@ -418,6 +418,28 @@
return //TODO: DEFERRED
handle_regular_status_updates()
var/leg_tally = 2
for(var/name in organs)
var/datum/organ/external/E = organs[name]
E.process()
if(E.broken || E.destroyed)
if(E.name == "l_hand" || E.name == "l_arm")
if(hand && equipped())
drop_item()
emote("scream")
else if(E.name == "r_hand" || E.name == "r_arm")
if(!hand && equipped())
drop_item()
emote("scream")
else if(E.name == "l_leg" || E.name == "l_foot" \
|| E.name == "r_leg" || E.name == "r_foot" && !lying)
leg_tally-- // let it fail even if just foot&leg
// can't stand
if(leg_tally == 0 && !paralysis && !(lying || resting))
emote("scream")
emote("collapse")
paralysis = 10
health = 100 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
+200 -51
View File
@@ -2,6 +2,10 @@
var/datum/reagents/R = new/datum/reagents(1000)
reagents = R
R.my_atom = src
if(name == "monkey")
name = text("monkey ([rand(1, 1000)])")
real_name = name
if (!(dna))
if(gender == NEUTER)
gender = pick(MALE, FEMALE)
@@ -18,55 +22,35 @@
dna.uni_identity += gendervar
dna.uni_identity += "12C"
dna.uni_identity += "4E2"
dna.b_type = "A+"
dna.original_name = real_name
if(name == "monkey")
name = text("monkey ([rand(1, 1000)])")
real_name = name
var/datum/organ/external/chest/chest = new /datum/organ/external/chest( src )
chest.owner = src
organs2 += chest
var/datum/organ/external/groin/groin = new /datum/organ/external/groin( src )
groin.owner = src
organs2 += groin
var/datum/organ/external/head/head = new /datum/organ/external/head( src )
head.owner = src
organs2 += head
var/datum/organ/external/l_arm/l_arm = new /datum/organ/external/l_arm( src )
l_arm.owner = src
organs2 += l_arm
var/datum/organ/external/r_arm/r_arm = new /datum/organ/external/r_arm( src )
r_arm.owner = src
organs2 += r_arm
var/datum/organ/external/l_hand/l_hand = new /datum/organ/external/l_hand( src )
l_hand.owner = src
organs2 += l_hand
var/datum/organ/external/r_hand/r_hand = new /datum/organ/external/r_hand( src )
r_hand.owner = src
organs2 += r_hand
var/datum/organ/external/l_leg/l_leg = new /datum/organ/external/l_leg( src )
l_leg.owner = src
organs2 += l_leg
var/datum/organ/external/r_leg/r_leg = new /datum/organ/external/r_leg( src )
r_leg.owner = src
organs2 += r_leg
var/datum/organ/external/l_foot/l_foot = new /datum/organ/external/l_foot( src )
l_foot.owner = src
organs2 += l_foot
var/datum/organ/external/r_foot/r_foot = new /datum/organ/external/r_foot( src )
r_foot.owner = src
organs2 += r_foot
new /datum/organ/external/chest(src)
new /datum/organ/external/groin(src)
new /datum/organ/external/head(src)
new /datum/organ/external/l_arm(src)
new /datum/organ/external/r_arm(src)
new /datum/organ/external/r_leg(src)
new /datum/organ/external/l_leg(src)
var/datum/organ/external/part = new /datum/organ/external/l_hand(src)
part.parent = organs["l_arm"]
part = new /datum/organ/external/l_foot(src)
part.parent = organs["l_leg"]
part = new /datum/organ/external/r_hand(src)
part.parent = organs["r_arm"]
part = new /datum/organ/external/r_foot(src)
part.parent = organs["r_leg"]
spawn (1)
if(!stand_icon)
stand_icon = new /icon('monkey.dmi', "monkey1")
if(!lying_icon)
lying_icon = new /icon('monkey.dmi', "monkey0")
icon = stand_icon
update_clothing()
src << "\blue Your icons have been generated!"
organs["chest"] = chest
organs["groin"] = groin
organs["head"] = head
organs["l_arm"] = l_arm
organs["r_arm"] = r_arm
organs["l_hand"] = l_hand
organs["r_hand"] = r_hand
organs["l_leg"] = l_leg
organs["r_leg"] = r_leg
organs["l_foot"] = l_foot
organs["r_foot"] = r_foot
..()
return
@@ -461,6 +445,10 @@
stat("Genetic Damage Time", changeling.geneticdamage)
return
/mob/living/carbon/monkey/var/icon/stand_icon = null
/mob/living/carbon/monkey/var/icon/lying_icon = null
/mob/living/carbon/monkey/update_clothing()
if(buckled)
if(istype(buckled, /obj/structure/stool/bed/chair))
@@ -468,14 +456,18 @@
else
lying = 1
if(!stand_icon || !lying_icon)
update_body()
if(update_icon) // Skie
..()
overlays = null
if (!( lying ))
icon_state = "monkey1"
else
icon_state = "monkey0"
if (lying)
icon = lying_icon
else
icon = stand_icon
if(client && client.admin_invis)
invisibility = 100
@@ -549,6 +541,31 @@
return
return
/mob/living/carbon/monkey/proc/update_body()
stand_icon = new /icon('monkey.dmi', "torso_s")
lying_icon = new /icon('monkey.dmi', "torso_l")
stand_icon.Blend(new /icon('monkey.dmi', "chest_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('monkey.dmi', "chest_l"), ICON_OVERLAY)
var/datum/organ/external/head = organs["head"]
if(!head.destroyed)
stand_icon.Blend(new /icon('monkey.dmi', "head_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('monkey.dmi', "head_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.destroyed)
stand_icon.Blend(new /icon('monkey.dmi', "[part.icon_name]_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('monkey.dmi', "[part.icon_name]_l"), ICON_OVERLAY)
stand_icon.Blend(new /icon('monkey.dmi', "groin_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('monkey.dmi', "groin_l"), ICON_OVERLAY)
/mob/living/carbon/monkey/Move()
if ((!( buckled ) || buckled.loc != loc))
buckled = null
@@ -838,3 +855,135 @@
if(!ticker.mode.name == "monkey") return 0
return 1
/mob/living/carbon/monkey/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/used_weapon = null)
if((damagetype != BRUTE) && (damagetype != BURN))
..(damage, damagetype, def_zone, blocked)
return 1
if(blocked >= 2) return 0
var/datum/organ/external/organ = null
if(isorgan(def_zone))
organ = def_zone
else
if(!def_zone) def_zone = ran_zone(def_zone)
organ = get_organ(check_zone(def_zone))
if(!organ || organ.destroyed) return 0
if(blocked)
damage = (damage/(blocked+1))
switch(damagetype)
if(BRUTE)
organ.take_damage(damage, 0, sharp, used_weapon)
if(BURN)
organ.take_damage(0, damage, sharp, used_weapon)
if(used_weapon)
organ.add_wound(used_weapon, damage)
UpdateDamageIcon()
updatehealth()
update_clothing()
return 1
/*/mob/living/carbon/monkey/UpdateDamageIcon()
del(body_standing)
body_standing = list()
del(body_lying)
body_lying = list()
for(var/name in organs)
var/datum/organ/external/O = organs[name]
if(!O.destroyed)
O.update_icon()
var/icon/DI = new /icon('dam_human.dmi', O.damage_state) // the damage icon for whole human
DI.Blend(new /icon('dam_mask.dmi', O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels
// world << "[O.icon_name] [O.damage_state] \icon[DI]"
body_standing += DI
DI = new /icon('dam_human.dmi', "[O.damage_state]-2") // repeat for lying icons
DI.Blend(new /icon('dam_mask.dmi', "[O.icon_name]2"), ICON_MULTIPLY)
// world << "[O.r_name]2 [O.d_i_state]-2 \icon[DI]"
body_lying += DI*/
/mob/living/carbon/monkey/proc/HealDamage(zone, brute, burn)
var/datum/organ/external/E = get_organ(zone)
if(istype(E, /datum/organ/external))
if (E.heal_damage(brute, burn))
UpdateDamageIcon()
else
return 0
return
/mob/living/carbon/monkey/proc/get_damaged_organs(var/brute, var/burn)
var/list/datum/organ/external/parts = list()
for(var/name in organs)
var/datum/organ/external/organ = organs[name]
if((brute && organ.brute_dam) || (burn && organ.burn_dam))
parts += organ
return parts
/mob/living/carbon/monkey/proc/get_damageable_organs()
var/list/datum/organ/external/parts = list()
for(var/name in organs)
var/datum/organ/external/organ = organs[name]
if(organ.brute_dam + organ.burn_dam < organ.max_damage)
parts += organ
return parts
// heal ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/carbon/monkey/heal_organ_damage(var/brute, var/burn)
var/list/datum/organ/external/parts = get_damaged_organs(brute,burn)
if(!parts.len)
return
var/datum/organ/external/picked = pick(parts)
picked.heal_damage(brute,burn)
updatehealth()
UpdateDamageIcon()
// damage ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/carbon/monkey/take_organ_damage(var/brute, var/burn)
var/list/datum/organ/external/parts = get_damageable_organs()
if(!parts.len)
return
var/datum/organ/external/picked = pick(parts)
picked.take_damage(brute,burn)
updatehealth()
UpdateDamageIcon()
// heal MANY external organs, in random order
/mob/living/carbon/monkey/heal_overall_damage(var/brute, var/burn)
var/list/datum/organ/external/parts = get_damaged_organs(brute,burn)
while(parts.len && (brute>0 || burn>0) )
var/datum/organ/external/picked = pick(parts)
var/brute_was = picked.brute_dam
var/burn_was = picked.burn_dam
picked.heal_damage(brute,burn)
brute -= (brute_was-picked.brute_dam)
burn -= (burn_was-picked.burn_dam)
parts -= picked
updatehealth()
UpdateDamageIcon()
// damage MANY external organs, in random order
/mob/living/carbon/monkey/take_overall_damage(var/brute, var/burn, var/used_weapon = null)
var/list/datum/organ/external/parts = get_damageable_organs()
while(parts.len && (brute>0 || burn>0) )
var/datum/organ/external/picked = pick(parts)
var/brute_was = picked.brute_dam
var/burn_was = picked.burn_dam
picked.take_damage(brute,burn, 0, used_weapon)
brute -= (picked.brute_dam-brute_was)
burn -= (picked.burn_dam-burn_was)
parts -= picked
updatehealth()
UpdateDamageIcon()
+3 -3
View File
@@ -8,7 +8,7 @@
Returns
standard 0 if fail
*/
/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/slash = 0, var/used_weapon = null)
/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/used_weapon = null)
if(!damage || (blocked >= 2)) return 0
switch(damagetype)
if(BRUTE)
@@ -39,7 +39,7 @@
/mob/living/proc/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0)
if(!effect || (blocked >= 2)) return 0
if(!effect || (blocked)) return 0
switch(effecttype)
if(STUN)
Stun((effect - (min(effect*getarmor(null, "laser"), effect*(0.75 + (blocked*0.05))))))
@@ -76,4 +76,4 @@
/mob/living/proc/react_to_attack(mob/M)
return
return
@@ -19,6 +19,6 @@
if (src.stat == 1)
usr << text("\red [] doesn't seem to be responding.", src.name)
print_flavor_text()
usr << print_flavor_text()
return
@@ -19,6 +19,6 @@
if (src.stat == 1)
usr << text("\red [] doesn't seem to be responding.", src.name)
print_flavor_text()
usr << print_flavor_text()
return
@@ -22,6 +22,6 @@
else
usr << "The cover is closed."
print_flavor_text()
usr << print_flavor_text()
return
+22 -20
View File
@@ -290,9 +290,9 @@
//Attemps to remove an object on a mob. Will not move it to another area or such, just removes from the mob.
/mob/proc/remove_from_mob(var/obj/O)
src.u_equip(O)
if (src.client)
src.client.screen -= O
u_equip(O)
if (client)
client.screen -= O
O.layer = initial(O.layer)
O.screen_loc = null
return 1
@@ -398,10 +398,10 @@
msg = copytext(msg, 1, MAX_MESSAGE_LEN)
msg = html_encode(msg)
src.flavor_text = msg
flavor_text = msg
/mob/proc/warn_flavor_changed()
if(src.flavor_text && src.flavor_text != "") // don't spam people that don't use it!
if(flavor_text && flavor_text != "") // don't spam people that don't use it!
src << "<h2 class='alert'>OOC Warning:</h2>"
src << "<span class='alert'>Your flavor text is likely out of date! <a href='byond://?src=\ref[src];flavor_change=1'>Change</a></span>"
@@ -409,9 +409,9 @@
if (flavor_text && flavor_text != "")
var/msg = dd_replacetext(flavor_text, "\n", " ")
if(lentext(msg) <= 40)
usr << "\blue [msg]"
return "\blue [msg]"
else
usr << "\blue [copytext(msg, 1, 37)]... <a href='byond://?src=\ref[src];flavor_more=1'>More...</a>"
return "\blue [copytext(msg, 1, 37)]... <a href='byond://?src=\ref[src];flavor_more=1'>More...</a>"
/*
@@ -610,7 +610,7 @@
src << browse(null, t1)
if(href_list["teleto"])
src.client.jumptoturf(locate(href_list["teleto"]))
client.jumptoturf(locate(href_list["teleto"]))
if(href_list["priv_msg"])
var/mob/M = locate(href_list["priv_msg"])
@@ -648,8 +648,8 @@
if(K.client && K.client.holder && K.key != usr.key && K.key != M.key)
K << "<b><font color='blue'>PM: [key_name(usr, K)]->[key_name(M, K)]:</b> \blue [t]</font>"
if(href_list["flavor_more"])
usr << browse(text("<HTML><HEAD><TITLE>[]</TITLE></HEAD><BODY><TT>[]</TT></BODY></HTML>", src.name, dd_replacetext(src.flavor_text, "\n", "<BR>")), text("window=[];size=500x200", src.name))
onclose(usr, "[src.name]")
usr << browse(text("<HTML><HEAD><TITLE>[]</TITLE></HEAD><BODY><TT>[]</TT></BODY></HTML>", name, dd_replacetext(flavor_text, "\n", "<BR>")), text("window=[];size=500x200", name))
onclose(usr, "[name]")
if(href_list["flavor_change"])
update_flavor_text()
..()
@@ -659,9 +659,9 @@
return health
/mob/proc/UpdateLuminosity()
if(src.total_luminosity == src.last_luminosity) return 0//nothing to do here
src.last_luminosity = src.total_luminosity
sd_SetLuminosity(min(src.total_luminosity,7))//Current hardcode max at 7, should likely be a const somewhere else
if(total_luminosity == last_luminosity) return 0//nothing to do here
last_luminosity = total_luminosity
sd_SetLuminosity(min(total_luminosity,7))//Current hardcode max at 7, should likely be a const somewhere else
return 1
/mob/MouseDrop(mob/M as mob)
@@ -722,7 +722,7 @@
del(src)
*/
if(IsGuestKey(src.key))
if(IsGuestKey(key))
alert(src,"Baystation12 doesn't allow guest accounts to play. Please go to http://www.byond.com/ and register for a key.","Guest","OK")
del(src)
@@ -778,7 +778,7 @@
//This is the proc for gibbing a mob. Cannot gib ghosts. Removed the medal reference,
//added different sort of gibs and animations. N
/mob/proc/gib()
/mob/proc/gib(var/ex_act = 0)
if (istype(src, /mob/dead/observer))
gibs(loc, viruses)
@@ -837,8 +837,10 @@ Currently doesn't work, but should be useful later or at least as a template
else
gibs(loc, viruses, dna)
sleep(15)
for(var/obj/item/I in src.contents)
for(var/obj/item/I in contents)
I.loc = get_turf(src)
if(ex_act)
I.ex_act(ex_act)
del(src)
/*
@@ -874,7 +876,7 @@ Dusting robots does not eject the MMI, so it's a bit more powerful than gib() /N
sleep(15)
if(isrobot(src)&&src:mmi)//Is a robot and it has an mmi.
del(src:mmi)//Delete the MMI first so that it won't go popping out.
for(var/obj/item/I in src.contents)
for(var/obj/item/I in contents)
I.loc = get_turf(src)
del(src)
@@ -1009,17 +1011,17 @@ note dizziness decrements automatically in the mob's Life() proc.
boom.icon_state = "loss_general"
#elif
/client/proc/station_explosion_cinematic(var/derp)
if(!src.mob)
if(!mob)
return
var/mob/M = src.mob
var/mob/M = mob
M.loc = null // HACK, but whatever, this works
if(!M.hud_used)
return
var/obj/screen/boom = M.hud_used.station_explosion
src.screen += boom
screen += boom
if(ticker)
switch(ticker.mode.name)
if("nuclear emergency")
+3 -4
View File
@@ -280,7 +280,6 @@ the mob is also allowed to move without any sort of restriction. For instance, i
// var/obj/effect/organstructure/organStructure = null //for dem organs
var/list/organs = list( ) //List of organs.
var/list/organs2 = list()
//Singularity wants you!
var/grav_delay = 0
@@ -312,7 +311,7 @@ the mob is also allowed to move without any sort of restriction. For instance, i
//src.virus.cure(0)
var/datum/disease/v = new virus.type
src.viruses += v
viruses += v
v.affected_mob = src
v.strain_data = v.strain_data.Copy()
v.holder = src
@@ -320,7 +319,7 @@ the mob is also allowed to move without any sort of restriction. For instance, i
v.carrier = 1
return
//if(src.virus) //
//if(virus) //
//return //
@@ -464,7 +463,7 @@ the mob is also allowed to move without any sort of restriction. For instance, i
return
else*/
var/datum/disease/v = new virus.type
src.viruses += v
viruses += v
v.affected_mob = src
v.strain_data = v.strain_data.Copy()
v.holder = src
+9 -4
View File
@@ -110,6 +110,11 @@ proc/isorgan(A)
return 1
return 0
proc/hasorgans(A)
if(ishuman(A) || ismonkey(A))
return 1
return 0
/proc/hsl2rgb(h, s, l)
return
@@ -315,19 +320,19 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
/mob/proc/abiotic(var/full_body = 0)
if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask)))
if(full_body && ((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract )) || (back || wear_mask)))
return 1
if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )))
if((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract )))
return 1
return 0
/mob/proc/abiotic2(var/full_body2 = 0)
if(full_body2 && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask)))
if(full_body2 && ((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract )) || (back || wear_mask)))
return 1
if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )))
if((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract )))
return 1
return 0
+1 -1
View File
@@ -332,7 +332,7 @@
for(var/turf/turf in oview(1,src))
if(istype(turf,/turf/space))
continue
if(istype(turf,/turf/simulated/floor) && (src.flags & NOGRAV))
if(istype(turf,/turf/simulated/floor) && (flags & NOGRAV))
continue
dense_object++
break
+87 -65
View File
@@ -65,7 +65,7 @@
var/stage = 0
var/wound = 0
New(mob/living/carbon/human/H)
New(mob/living/carbon/H)
..(H)
if(!display_name)
display_name = name
@@ -95,7 +95,7 @@
droplimb()
return
else if(prob(nux))
createwound(max(1,min(6,round(brute/10) + rand(-1,1))),0,brute)
createwound(max(1,min(6,round(brute/10) + rand(0,2))),0,brute)
owner << "You feel something wet on your [display_name]"
if((brute_dam + burn_dam + brute + burn) < max_damage)
@@ -104,10 +104,10 @@
if(prob(brute) && brute > 20 && !sharp)
createwound(rand(4,6),0,brute)
else if(!sharp)
createwound(max(1,min(6,round(brute/10) + rand(0,2))),1,brute)
createwound(max(1,min(6,round(brute/10) + rand(1,3))),1,brute)
if(burn)
burn_dam += burn
createwound(max(1,min(6,round(burn/10) + rand(-1,1))),2,burn)
createwound(max(1,min(6,round(burn/10) + rand(0,2))),2,burn)
else
var/can_inflict = src.max_damage - (src.brute_dam + src.burn_dam)
if(can_inflict)
@@ -237,7 +237,7 @@
owner.visible_message("\red You hear a loud cracking sound coming from [owner.name].","\red <b>Something feels like it shattered in your [display_name]!</b>","You hear a sickening crack.")
owner.emote("scream")
broken = 1
wound = "broken" //Randomise in future
wound = pick("broken","fracture","hairline fracture") //Randomise in future. Edit: Randomized. --SkyMarshal
perma_injury = brute_dam
return
return
@@ -277,111 +277,133 @@
return 1
return 0
proc/droplimb()
proc/droplimb(var/override = 0)
if(override)
destroyed = 1
if(destroyed)
//owner.unlock_medal("Lost something?", 0, "Lose a limb.", "easy")
owner.visible_message("\red [owner.name]'s [display_name] flies off in an arc.","\red <b>Your [display_name] goes flying off!</b>","You hear a terrible sound of ripping tendons and flesh.")
var/obj/item/weapon/organ/H
switch(body_part)
if(UPPER_TORSO)
owner.gib()
if(LOWER_TORSO)
owner << "\red You are now sterile."
if(HEAD)
var/obj/item/weapon/organ/head/H = new(owner.loc, owner)
if(owner.gender == FEMALE)
H.icon_state = "head_f_l"
H.overlays += owner.face_lying
H.transfer_identity(owner)
H = new /obj/item/weapon/organ/head(owner.loc, owner)
if(ishuman(owner))
if(owner.gender == FEMALE)
H.icon_state = "head_f_l"
H.overlays += owner.face_lying
if(ismonkey(owner))
H.icon_state = "head_l"
//H.overlays += owner.face_lying
H:transfer_identity(owner)
H.pixel_x = -10
H.pixel_y = 6
H.name = "[owner.name]'s head"
var/lol = pick(cardinal)
step(H,lol)
owner.update_face()
owner.update_body()
owner.death()
if(ARM_RIGHT)
var/obj/item/weapon/organ/r_arm/H = new(owner.loc, owner)
H = new /obj/item/weapon/organ/r_arm(owner.loc, owner)
if(ismonkey(owner))
H.icon_state = "r_arm_l"
if(owner:organs["r_hand"])
var/datum/organ/external/S = owner:organs["r_hand"]
if(!S.destroyed)
S.droplimb()
var/lol = pick(cardinal)
step(H,lol)
destroyed = 1
S.droplimb(1)
if(ARM_LEFT)
var/obj/item/weapon/organ/l_arm/H = new(owner.loc, owner)
H = new /obj/item/weapon/organ/l_arm(owner.loc, owner)
if(ismonkey(owner))
H.icon_state = "l_arm_l"
if(owner:organs["l_hand"])
var/datum/organ/external/S = owner:organs["l_hand"]
if(!S.destroyed)
S.droplimb()
var/lol = pick(cardinal)
step(H,lol)
destroyed = 1
S.droplimb(1)
if(LEG_RIGHT)
var/obj/item/weapon/organ/r_leg/H = new(owner.loc, owner)
H = new /obj/item/weapon/organ/r_leg(owner.loc, owner)
if(ismonkey(owner))
H.icon_state = "r_leg_l"
if(owner:organs["r_foot"])
var/datum/organ/external/S = owner:organs["r_foot"]
if(!S.destroyed)
S.droplimb()
var/lol = pick(cardinal)
step(H,lol)
destroyed = 1
S.droplimb(1)
if(LEG_LEFT)
var/obj/item/weapon/organ/l_leg/H = new(owner.loc, owner)
H = new /obj/item/weapon/organ/l_leg(owner.loc, owner)
if(ismonkey(owner))
H.icon_state = "l_leg_l"
if(owner:organs["l_foot"])
var/datum/organ/external/S = owner:organs["l_foot"]
if(!S.destroyed)
S.droplimb()
var/lol = pick(cardinal)
step(H,lol)
destroyed = 1
S.droplimb(1)
if(HAND_RIGHT)
var/obj/item/weapon/organ/r_hand/X = new(owner.loc, owner)
var/lol2 = pick(cardinal)
step(X,lol2)
destroyed = 1
H = new /obj/item/weapon/organ/r_hand(owner.loc, owner)
if(ismonkey(owner))
H.icon_state = "r_hand_l"
if(HAND_LEFT)
var/obj/item/weapon/organ/l_hand/X = new(owner.loc, owner)
var/lol2 = pick(cardinal)
step(X,lol2)
destroyed = 1
H = new /obj/item/weapon/organ/l_hand(owner.loc, owner)
if(ismonkey(owner))
H.icon_state = "l_hand_l"
if(FOOT_RIGHT)
var/obj/item/weapon/organ/r_foot/X = new(owner.loc, owner)
var/lol2 = pick(cardinal)
step(X,lol2)
destroyed = 1
H = new /obj/item/weapon/organ/r_foot/(owner.loc, owner)
if(ismonkey(owner))
H.icon_state = "r_foot_l"
if(FOOT_LEFT)
var/obj/item/weapon/organ/l_foot/X = new(owner.loc, owner)
var/lol2 = pick(cardinal)
step(X,lol2)
destroyed = 1
H = new /obj/item/weapon/organ/l_foot(owner.loc, owner)
if(ismonkey(owner))
H.icon_state = "l_foot_l"
if(ismonkey(owner))
H.icon = 'monkey.dmi'
if(istajaran(owner))
H.icon = 'tajaran.dmi'
var/lol = pick(cardinal)
step(H,lol)
destspawn = 1
owner.visible_message("\red [owner.name]'s [display_name] flies off in an arc.","\red <b>Your [display_name] goes flying off!</b>","You hear a terrible sound of ripping tendons and flesh.")
for(var/datum/organ/wound/W in wounds)
W.update_health()
del(W)
del(wounds)
src.owner.update_clothing()
owner.update_body()
owner.update_clothing()
proc/createwound(var/size = 1, var/type = 0, var/damage)
var/list/datum/organ/wound/possible_wounds = list()
for(var/datum/organ/wound/W in wounds)
if(W.type == type && W.wound_size < 3 && size < 3 && !W.is_healing)
possible_wounds += W
if(ishuman(owner))
var/datum/organ/wound/W = new(src)
bleeding = !type //Sharp objects cause bleeding.
W.bleeding = !type
// owner:bloodloss += 10 * size
W.damage = damage
W.initial_dmg = damage
W.wound_type = type
W.wound_size = size
W.owner = owner
W.parent = src
if(type == 1)
spawn W.become_scar()
if(!possible_wounds.len || prob(25))
var/datum/organ/wound/W = new(src)
bleeding = !type //Sharp objects cause bleeding.
W.bleeding = !type
// owner:bloodloss += 10 * size
W.damage = damage
W.initial_dmg = damage
W.wound_type = type
W.wound_size = size
W.owner = owner
W.parent = src
if(type == 1)
spawn W.become_scar()
else
spawn W.start_close() //Let small cuts close themselves.
wounds += W
else
spawn W.start_close() //Let small cuts close themselves.
wounds += W
var/datum/organ/wound/W = pick(possible_wounds)
bleeding = !type //Sharp objects cause bleeding.
W.bleeding = !type
// owner:bloodloss += 10 * size
W.damage += damage
W.initial_dmg += damage
W.wound_size = round(sqrt(size^2 + W.wound_size^2))
if(type == 1)
spawn W.become_scar()
else
spawn W.start_close() //Let small cuts close themselves.
wounds += W
/datum/organ/wound
name = "wound"