mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-28 14:36:23 +01:00
Merge branch 'master' into lucidumb
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
/datum/gender/herm
|
||||
key = "herm"
|
||||
|
||||
He = "Shi"
|
||||
he = "shi"
|
||||
His = "Hir"
|
||||
his = "hir"
|
||||
him = "hir"
|
||||
has = "has"
|
||||
is = "is"
|
||||
does = "does"
|
||||
himself = "hirself"
|
||||
s = "s"
|
||||
hes = "shi's"
|
||||
@@ -99,7 +99,7 @@
|
||||
set name = "Set Gender Identity"
|
||||
set desc = "Sets the pronouns when examined and performing an emote."
|
||||
set category = "IC"
|
||||
var/new_gender_identity = input("Please select a gender Identity.") as null|anything in list(FEMALE, MALE, NEUTER, PLURAL)
|
||||
var/new_gender_identity = input("Please select a gender Identity.") as null|anything in list(FEMALE, MALE, NEUTER, PLURAL, HERM)
|
||||
if(!new_gender_identity)
|
||||
return 0
|
||||
change_gender_identity(new_gender_identity)
|
||||
@@ -110,4 +110,4 @@
|
||||
set category = "IC"
|
||||
set desc = "Switch tail layer on top."
|
||||
tail_alt = !tail_alt
|
||||
update_tail_showing()
|
||||
update_tail_showing()
|
||||
|
||||
@@ -1,22 +1,6 @@
|
||||
/mob/living/carbon/human/examine(mob/user)
|
||||
|
||||
var/skipgloves = 0
|
||||
var/skipsuitstorage = 0
|
||||
var/skipjumpsuit = 0
|
||||
var/skipshoes = 0
|
||||
var/skipmask = 0
|
||||
var/skiptie = 0
|
||||
var/skipholster = 0
|
||||
|
||||
var/skipears = 0
|
||||
var/skipeyes = 0
|
||||
var/skipface = 0
|
||||
var/skipchest = 0
|
||||
var/skipgroin = 0
|
||||
var/skiphands = 0
|
||||
var/skiplegs = 0
|
||||
var/skiparms = 0
|
||||
var/skipfeet = 0
|
||||
var/skip_gear = 0
|
||||
var/skip_body = 0
|
||||
|
||||
if(alpha <= 50)
|
||||
src.loc.examine(user)
|
||||
@@ -26,97 +10,101 @@
|
||||
|
||||
//exosuits and helmets obscure our view and stuff.
|
||||
if(wear_suit)
|
||||
skipsuitstorage |= wear_suit.flags_inv & HIDESUITSTORAGE
|
||||
if(wear_suit.flags_inv & HIDESUITSTORAGE)
|
||||
skip_gear |= EXAMINE_SKIPSUITSTORAGE
|
||||
|
||||
if(wear_suit.flags_inv & HIDEJUMPSUIT)
|
||||
skiparms |= 1
|
||||
skiplegs |= 1
|
||||
skipchest |= 1
|
||||
skipgroin |= 1
|
||||
skipjumpsuit |= 1
|
||||
skiptie |= 1
|
||||
skipholster |= 1
|
||||
skip_body |= EXAMINE_SKIPARMS | EXAMINE_SKIPLEGS | EXAMINE_SKIPBODY | EXAMINE_SKIPGROIN
|
||||
skip_gear |= EXAMINE_SKIPJUMPSUIT | EXAMINE_SKIPTIE | EXAMINE_SKIPHOLSTER
|
||||
|
||||
else if(wear_suit.flags_inv & HIDETIE)
|
||||
skiptie |= 1
|
||||
skipholster |= 1
|
||||
skip_gear |= EXAMINE_SKIPTIE | EXAMINE_SKIPHOLSTER
|
||||
|
||||
else if(wear_suit.flags_inv & HIDEHOLSTER)
|
||||
skipholster |= 1
|
||||
skip_gear |= EXAMINE_SKIPHOLSTER
|
||||
|
||||
if(wear_suit.flags_inv & HIDESHOES)
|
||||
skipshoes |= 1
|
||||
skipfeet |= 1
|
||||
skip_gear |= EXAMINE_SKIPSHOES
|
||||
skip_body |= EXAMINE_SKIPFEET
|
||||
|
||||
if(wear_suit.flags_inv & HIDEGLOVES)
|
||||
skipgloves |= 1
|
||||
skiphands |= 1
|
||||
skip_gear |= EXAMINE_SKIPGLOVES
|
||||
skip_body |= EXAMINE_SKIPHANDS
|
||||
|
||||
if(w_uniform)
|
||||
skiplegs |= w_uniform.body_parts_covered & LEGS
|
||||
skiparms |= w_uniform.body_parts_covered & ARMS
|
||||
skipchest |= w_uniform.body_parts_covered & UPPER_TORSO
|
||||
skipgroin |= w_uniform.body_parts_covered & LOWER_TORSO
|
||||
if(w_uniform.body_parts_covered & LEGS)
|
||||
skip_body |= EXAMINE_SKIPLEGS
|
||||
if(w_uniform.body_parts_covered & ARMS)
|
||||
skip_body |= EXAMINE_SKIPARMS
|
||||
if(w_uniform.body_parts_covered & UPPER_TORSO)
|
||||
skip_body |= EXAMINE_SKIPBODY
|
||||
if(w_uniform.body_parts_covered & LOWER_TORSO)
|
||||
skip_body |= EXAMINE_SKIPGROIN
|
||||
|
||||
if(gloves)
|
||||
skiphands |= gloves.body_parts_covered & HANDS
|
||||
if(gloves && (gloves.body_parts_covered & HANDS))
|
||||
skip_body |= EXAMINE_SKIPHANDS
|
||||
|
||||
if(shoes)
|
||||
skipfeet |= shoes.body_parts_covered & FEET
|
||||
if(shoes && (shoes.body_parts_covered & FEET))
|
||||
skip_body |= EXAMINE_SKIPFEET
|
||||
|
||||
if(head)
|
||||
skipmask |= head.flags_inv & HIDEMASK
|
||||
skipeyes |= head.flags_inv & HIDEEYES
|
||||
skipears |= head.flags_inv & HIDEEARS
|
||||
skipface |= head.flags_inv & HIDEFACE
|
||||
if(head.flags_inv & HIDEMASK)
|
||||
skip_gear |= EXAMINE_SKIPMASK
|
||||
if(head.flags_inv & HIDEEYES)
|
||||
skip_gear |= EXAMINE_SKIPEYEWEAR
|
||||
skip_body |= EXAMINE_SKIPEYES
|
||||
if(head.flags_inv & HIDEEARS)
|
||||
skip_gear |= EXAMINE_SKIPEARS
|
||||
if(head.flags_inv & HIDEFACE)
|
||||
skip_body |= EXAMINE_SKIPFACE
|
||||
|
||||
if(wear_mask)
|
||||
skipface |= wear_mask.flags_inv & HIDEFACE
|
||||
if(wear_mask && (wear_mask.flags_inv & HIDEFACE))
|
||||
skip_body |= EXAMINE_SKIPFACE
|
||||
|
||||
//This is what hides what
|
||||
var/list/hidden = list(
|
||||
BP_GROIN = skipgroin,
|
||||
BP_TORSO = skipchest,
|
||||
BP_HEAD = skipface,
|
||||
BP_L_ARM = skiparms,
|
||||
BP_R_ARM = skiparms,
|
||||
BP_L_HAND= skiphands,
|
||||
BP_R_HAND= skiphands,
|
||||
BP_L_FOOT= skipfeet,
|
||||
BP_R_FOOT= skipfeet,
|
||||
BP_L_LEG = skiplegs,
|
||||
BP_R_LEG = skiplegs)
|
||||
BP_GROIN = skip_body & EXAMINE_SKIPGROIN,
|
||||
BP_TORSO = skip_body & EXAMINE_SKIPBODY,
|
||||
BP_HEAD = skip_body & EXAMINE_SKIPHEAD,
|
||||
BP_L_ARM = skip_body & EXAMINE_SKIPARMS,
|
||||
BP_R_ARM = skip_body & EXAMINE_SKIPARMS,
|
||||
BP_L_HAND= skip_body & EXAMINE_SKIPHANDS,
|
||||
BP_R_HAND= skip_body & EXAMINE_SKIPHANDS,
|
||||
BP_L_FOOT= skip_body & EXAMINE_SKIPFEET,
|
||||
BP_R_FOOT= skip_body & EXAMINE_SKIPFEET,
|
||||
BP_L_LEG = skip_body & EXAMINE_SKIPLEGS,
|
||||
BP_R_LEG = skip_body & EXAMINE_SKIPLEGS)
|
||||
|
||||
var/list/msg = list("<span class='info'>*---------*\nThis is ")
|
||||
var/list/msg = list("<span class='info'>*---------*<br>This is ")
|
||||
|
||||
|
||||
var/datum/gender/T = gender_datums[get_visible_gender()]
|
||||
|
||||
if(skipjumpsuit && skipface) //big suits/masks/helmets make it hard to tell their gender
|
||||
T = gender_datums[PLURAL]
|
||||
|
||||
else if(species && species.ambiguous_genders)
|
||||
var/can_detect_gender = FALSE
|
||||
if(isobserver(user)) // Ghosts are all knowing.
|
||||
can_detect_gender = TRUE
|
||||
if(issilicon(user)) // Borgs are too because science.
|
||||
can_detect_gender = TRUE
|
||||
else if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.species && istype(species, H.species))
|
||||
can_detect_gender = TRUE
|
||||
|
||||
if(!can_detect_gender)
|
||||
T = gender_datums[PLURAL] // Species with ambiguous_genders will not show their true gender upon examine if the examiner is not also the same species.
|
||||
else
|
||||
if(icon)
|
||||
msg += "\icon[icon] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated
|
||||
|
||||
if(!T)
|
||||
// Just in case someone VVs the gender to something strange. It'll runtime anyway when it hits usages, better to CRASH() now with a helpful message.
|
||||
CRASH("Gender datum was null; key was '[(skipjumpsuit && skipface) ? PLURAL : gender]'")
|
||||
if(icon)
|
||||
msg += "\icon[icon] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated
|
||||
|
||||
msg += "<EM>[src.name]</EM>"
|
||||
|
||||
if(!(skipjumpsuit && skipface))
|
||||
if(src.custom_species)
|
||||
var/datum/gender/T = gender_datums[get_visible_gender()]
|
||||
|
||||
if((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE)) //big suits/masks/helmets make it hard to tell their gender
|
||||
T = gender_datums[PLURAL]
|
||||
|
||||
else if(species && species.ambiguous_genders)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.species && !istype(species, H.species))
|
||||
T = gender_datums[PLURAL]// Species with ambiguous_genders will not show their true gender upon examine if the examiner is not also the same species.
|
||||
if(!(issilicon(user) || isobserver(user))) // Ghosts and borgs are all knowing
|
||||
T = gender_datums[PLURAL]
|
||||
|
||||
if(!T)
|
||||
// Just in case someone VVs the gender to something strange. It'll runtime anyway when it hits usages, better to CRASH() now with a helpful message.
|
||||
CRASH("Gender datum was null; key was '[((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE)) ? PLURAL : gender]'")
|
||||
|
||||
if(!((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE)))
|
||||
//VOREStation Add Start
|
||||
if(custom_species)
|
||||
msg += ", a <b>[src.custom_species]</b>"
|
||||
else if(looks_synth)
|
||||
//VOREStation Add End
|
||||
var/use_gender = "a synthetic"
|
||||
if(gender == MALE)
|
||||
use_gender = "an android"
|
||||
@@ -130,37 +118,41 @@
|
||||
|
||||
var/extra_species_text = species.get_additional_examine_text(src)
|
||||
if(extra_species_text)
|
||||
msg += "[extra_species_text]<br>"
|
||||
msg += "[extra_species_text]"
|
||||
|
||||
msg += "<br>"
|
||||
|
||||
//uniform
|
||||
if(w_uniform && !skipjumpsuit && w_uniform.show_examine)
|
||||
if(w_uniform && !(skip_gear & EXAMINE_SKIPJUMPSUIT) && w_uniform.show_examine)
|
||||
//Ties
|
||||
var/tie_msg
|
||||
if(istype(w_uniform,/obj/item/clothing/under) && !skiptie)
|
||||
if(istype(w_uniform,/obj/item/clothing/under) && !(skip_gear & EXAMINE_SKIPTIE))
|
||||
var/obj/item/clothing/under/U = w_uniform
|
||||
if(U.accessories.len)
|
||||
if(skipholster)
|
||||
var/list/accessories_visible = new/list() //please let this fix the stupid fucking runtimes
|
||||
var/list/accessories_visible = list() //please let this fix the stupid fucking runtimes
|
||||
if(skip_gear & EXAMINE_SKIPHOLSTER)
|
||||
for(var/obj/item/clothing/accessory/A in U.accessories)
|
||||
if(A.show_examine && !istype(A, /obj/item/clothing/accessory/holster)) // If we're supposed to skip holsters, actually skip them
|
||||
accessories_visible.Add(A)
|
||||
else
|
||||
for(var/obj/item/clothing/accessory/A in U.accessories)
|
||||
if(A.concealed_holster == 0 && A.show_examine)
|
||||
accessories_visible.Add(A)
|
||||
if(accessories_visible.len)
|
||||
tie_msg += ". Attached to it is [english_list(accessories_visible)]"
|
||||
else tie_msg += ". Attached to it is [english_list(U.accessories)]"
|
||||
|
||||
if(accessories_visible.len)
|
||||
tie_msg += " Attached to it is [english_list(accessories_visible)]."
|
||||
|
||||
if(w_uniform.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[w_uniform] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [w_uniform.name][tie_msg]!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[w_uniform] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [w_uniform.name]![tie_msg]</span><br>"
|
||||
else
|
||||
msg += "[T.He] [T.is] wearing \icon[w_uniform] \a [w_uniform][tie_msg].\n"
|
||||
msg += "[T.He] [T.is] wearing \icon[w_uniform] \a [w_uniform][tie_msg].<br>"
|
||||
|
||||
//head
|
||||
if(head && head.show_examine)
|
||||
if(head && !(skip_gear & EXAMINE_SKIPHELMET) && head.show_examine)
|
||||
if(head.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[head] [head.gender==PLURAL?"some":"a"] [(head.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [head.name] on [T.his] head!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[head] [head.gender==PLURAL?"some":"a"] [(head.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [head.name] on [T.his] head!</span><br>"
|
||||
else
|
||||
msg += "[T.He] [T.is] wearing \icon[head] \a [head] on [T.his] head.\n"
|
||||
msg += "[T.He] [T.is] wearing \icon[head] \a [head] on [T.his] head.<br>"
|
||||
|
||||
//suit/armour
|
||||
if(wear_suit)
|
||||
@@ -168,102 +160,102 @@
|
||||
if(istype(wear_suit,/obj/item/clothing/suit))
|
||||
var/obj/item/clothing/suit/U = wear_suit
|
||||
if(U.accessories.len)
|
||||
tie_msg += ". Attached to it is [english_list(U.accessories)]"
|
||||
tie_msg += " Attached to it is [english_list(U.accessories)]."
|
||||
|
||||
if(wear_suit.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[wear_suit] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_suit.name]!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[wear_suit] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_suit.name][tie_msg]!</span><br>"
|
||||
else
|
||||
msg += "[T.He] [T.is] wearing \icon[wear_suit] \a [wear_suit][tie_msg].\n"
|
||||
msg += "[T.He] [T.is] wearing \icon[wear_suit] \a [wear_suit].[tie_msg]<br>"
|
||||
|
||||
//suit/armour storage
|
||||
if(s_store && !skipsuitstorage && s_store.show_examine)
|
||||
if(s_store && !(skip_gear & EXAMINE_SKIPSUITSTORAGE) && s_store.show_examine)
|
||||
if(s_store.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] carrying \icon[s_store] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [s_store.name] on [T.his] [wear_suit.name]!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] carrying \icon[s_store] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [s_store.name] on [T.his] [wear_suit.name]!</span><br>"
|
||||
else
|
||||
msg += "[T.He] [T.is] carrying \icon[s_store] \a [s_store] on [T.his] [wear_suit.name].\n"
|
||||
msg += "[T.He] [T.is] carrying \icon[s_store] \a [s_store] on [T.his] [wear_suit.name].<br>"
|
||||
|
||||
//back
|
||||
if(back && back.show_examine)
|
||||
if(back && !(skip_gear & EXAMINE_SKIPBACKPACK) && back.show_examine)
|
||||
if(back.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[back] [back.gender==PLURAL?"some":"a"] [(back.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [back] on [T.his] back.</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[back] [back.gender==PLURAL?"some":"a"] [(back.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [back] on [T.his] back.</span><br>"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[back] \a [back] on [T.his] back.\n"
|
||||
msg += "[T.He] [T.has] \icon[back] \a [back] on [T.his] back.<br>"
|
||||
|
||||
//left hand
|
||||
if(l_hand && l_hand.show_examine)
|
||||
if(l_hand.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] holding \icon[l_hand] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [l_hand.name] in [T.his] left hand!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] holding \icon[l_hand] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [l_hand.name] in [T.his] left hand!</span><br>"
|
||||
else
|
||||
msg += "[T.He] [T.is] holding \icon[l_hand] \a [l_hand] in [T.his] left hand.\n"
|
||||
msg += "[T.He] [T.is] holding \icon[l_hand] \a [l_hand] in [T.his] left hand.<br>"
|
||||
|
||||
//right hand
|
||||
if(r_hand && r_hand.show_examine)
|
||||
if(r_hand.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] holding \icon[r_hand] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [r_hand.name] in [T.his] right hand!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] holding \icon[r_hand] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [r_hand.name] in [T.his] right hand!</span><br>"
|
||||
else
|
||||
msg += "[T.He] [T.is] holding \icon[r_hand] \a [r_hand] in [T.his] right hand.\n"
|
||||
msg += "[T.He] [T.is] holding \icon[r_hand] \a [r_hand] in [T.his] right hand.<br>"
|
||||
|
||||
//gloves
|
||||
if(gloves && !skipgloves && gloves.show_examine)
|
||||
if(gloves && !(skip_gear & EXAMINE_SKIPGLOVES) && gloves.show_examine)
|
||||
if(gloves.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[gloves] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [gloves.name] on [T.his] hands!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[gloves] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [gloves.name] on [T.his] hands!</span><br>"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[gloves] \a [gloves] on [T.his] hands.\n"
|
||||
else if(blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] [(hand_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained hands!</span>\n"
|
||||
msg += "[T.He] [T.has] \icon[gloves] \a [gloves] on [T.his] hands.<br>"
|
||||
else if(blood_DNA && !(skip_body & EXAMINE_SKIPHANDS))
|
||||
msg += "<span class='warning'>[T.He] [T.has] [(hand_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained hands!</span><br>"
|
||||
|
||||
//handcuffed?
|
||||
if(handcuffed && handcuffed.show_examine)
|
||||
if(istype(handcuffed, /obj/item/weapon/handcuffs/cable))
|
||||
msg += "<span class='warning'>[T.He] [T.is] \icon[handcuffed] restrained with cable!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] \icon[handcuffed] restrained with cable!</span><br>"
|
||||
else
|
||||
msg += "<span class='warning'>[T.He] [T.is] \icon[handcuffed] handcuffed!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] \icon[handcuffed] handcuffed!</span><br>"
|
||||
|
||||
//buckled
|
||||
if(buckled)
|
||||
msg += "<span class='warning'>[T.He] [T.is] \icon[buckled] buckled to [buckled]!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] \icon[buckled] buckled to [buckled]!</span><br>"
|
||||
|
||||
//belt
|
||||
if(belt && belt.show_examine)
|
||||
if(belt && !(skip_gear & EXAMINE_SKIPBELT) && belt.show_examine)
|
||||
if(belt.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[belt] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [belt.name] about [T.his] waist!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[belt] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [belt.name] about [T.his] waist!</span><br>"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[belt] \a [belt] about [T.his] waist.\n"
|
||||
msg += "[T.He] [T.has] \icon[belt] \a [belt] about [T.his] waist.<br>"
|
||||
|
||||
//shoes
|
||||
if(shoes && !skipshoes && shoes.show_examine)
|
||||
if(shoes && !(skip_gear & EXAMINE_SKIPSHOES) && shoes.show_examine)
|
||||
if(shoes.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[shoes] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [shoes.name] on [T.his] feet!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[shoes] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [shoes.name] on [T.his] feet!</span><br>"
|
||||
else
|
||||
msg += "[T.He] [T.is] wearing \icon[shoes] \a [shoes] on [T.his] feet.\n"
|
||||
else if(feet_blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] [(feet_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained feet!</span>\n"
|
||||
msg += "[T.He] [T.is] wearing \icon[shoes] \a [shoes] on [T.his] feet.<br>"
|
||||
else if(feet_blood_DNA && !(skip_body & EXAMINE_SKIPHANDS))
|
||||
msg += "<span class='warning'>[T.He] [T.has] [(feet_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained feet!</span><br>"
|
||||
|
||||
//mask
|
||||
if(wear_mask && !skipmask && wear_mask.show_examine)
|
||||
if(wear_mask && !(skip_gear & EXAMINE_SKIPMASK) && wear_mask.show_examine)
|
||||
var/descriptor = "on [T.his] face"
|
||||
if(istype(wear_mask, /obj/item/weapon/grenade) && check_has_mouth())
|
||||
descriptor = "in [T.his] mouth"
|
||||
|
||||
if(wear_mask.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[wear_mask] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_mask.name] [descriptor]!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[wear_mask] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_mask.name] [descriptor]!</span><br>"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[wear_mask] \a [wear_mask] [descriptor].\n"
|
||||
msg += "[T.He] [T.has] \icon[wear_mask] \a [wear_mask] [descriptor].<br>"
|
||||
|
||||
//eyes
|
||||
if(glasses && !skipeyes && glasses.show_examine)
|
||||
if(glasses && !(skip_gear & EXAMINE_SKIPEYEWEAR) && glasses.show_examine)
|
||||
if(glasses.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[glasses] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [glasses] covering [T.his] eyes!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[glasses] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [glasses] covering [T.his] eyes!</span><br>"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[glasses] \a [glasses] covering [T.his] eyes.\n"
|
||||
msg += "[T.He] [T.has] \icon[glasses] \a [glasses] covering [T.his] eyes.<br>"
|
||||
|
||||
//left ear
|
||||
if(l_ear && !skipears && l_ear.show_examine)
|
||||
msg += "[T.He] [T.has] \icon[l_ear] \a [l_ear] on [T.his] left ear.\n"
|
||||
if(l_ear && !(skip_gear & EXAMINE_SKIPEARS) && l_ear.show_examine)
|
||||
msg += "[T.He] [T.has] \icon[l_ear] \a [l_ear] on [T.his] left ear.<br>"
|
||||
|
||||
//right ear
|
||||
if(r_ear && !skipears && r_ear.show_examine)
|
||||
msg += "[T.He] [T.has] \icon[r_ear] \a [r_ear] on [T.his] right ear.\n"
|
||||
if(r_ear && !(skip_gear & EXAMINE_SKIPEARS) && r_ear.show_examine)
|
||||
msg += "[T.He] [T.has] \icon[r_ear] \a [r_ear] on [T.his] right ear.<br>"
|
||||
|
||||
//ID
|
||||
if(wear_id && wear_id.show_examine)
|
||||
@@ -275,27 +267,27 @@
|
||||
var/obj/item/weapon/card/id/idcard = wear_id
|
||||
id = idcard.registered_name
|
||||
if(id && (id != real_name) && (get_dist(src, usr) <= 1) && prob(10))
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[wear_id] \a [wear_id] yet something doesn't seem right...</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[wear_id] \a [wear_id] yet something doesn't seem right...</span><br>"
|
||||
else*/
|
||||
msg += "[T.He] [T.is] wearing \icon[wear_id] \a [wear_id].\n"
|
||||
msg += "[T.He] [T.is] wearing \icon[wear_id] \a [wear_id].<br>"
|
||||
|
||||
//Jitters
|
||||
if(is_jittery)
|
||||
if(jitteriness >= 300)
|
||||
msg += "<span class='warning'><B>[T.He] [T.is] convulsing violently!</B></span>\n"
|
||||
msg += "<span class='warning'><B>[T.He] [T.is] convulsing violently!</B></span><br>"
|
||||
else if(jitteriness >= 200)
|
||||
msg += "<span class='warning'>[T.He] [T.is] extremely jittery.</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] extremely jittery.</span><br>"
|
||||
else if(jitteriness >= 100)
|
||||
msg += "<span class='warning'>[T.He] [T.is] twitching ever so slightly.</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] twitching ever so slightly.</span><br>"
|
||||
|
||||
//splints
|
||||
for(var/organ in BP_ALL)
|
||||
var/obj/item/organ/external/o = get_organ(organ)
|
||||
if(o && o.splinted && o.splinted.loc == o)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \a [o.splinted] on [T.his] [o.name]!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.has] \a [o.splinted] on [T.his] [o.name]!</span><br>"
|
||||
|
||||
if(suiciding)
|
||||
msg += "<span class='warning'>[T.He] appears to have commited suicide... there is no hope of recovery.</span>\n"
|
||||
msg += "<span class='warning'>[T.He] appears to have commited suicide... there is no hope of recovery.</span><br>"
|
||||
|
||||
msg += attempt_vr(src,"examine_weight",args) //VOREStation Code
|
||||
msg += attempt_vr(src,"examine_nutrition",args) //VOREStation Code
|
||||
@@ -305,56 +297,39 @@
|
||||
msg += attempt_vr(src,"examine_nif",args) //VOREStation Code
|
||||
|
||||
if(mSmallsize in mutations)
|
||||
msg += "[T.He] [T.is] small halfling!\n"
|
||||
msg += "[T.He] [T.is] very short!<br>"
|
||||
|
||||
var/distance = get_dist(usr,src)
|
||||
if(istype(usr, /mob/observer/dead) || usr.stat == 2) // ghosts can see anything
|
||||
distance = 1
|
||||
if (src.stat)
|
||||
msg += "<span class='warning'>[T.He] [T.is]n't responding to anything around [T.him] and seems to be asleep.</span>\n"
|
||||
if((stat == 2 || src.losebreath) && distance <= 3)
|
||||
msg += "<span class='warning'>[T.He] [T.does] not appear to be breathing.</span>\n"
|
||||
if(istype(usr, /mob/living/carbon/human) && !usr.stat && Adjacent(usr))
|
||||
usr.visible_message("<b>[usr]</b> checks [src]'s pulse.", "You check [src]'s pulse.")
|
||||
msg += "<span class='warning'>[T.He] [T.is]n't responding to anything around [T.him] and seems to be asleep.</span><br>"
|
||||
if((stat == 2 || src.losebreath) && get_dist(user, src) <= 3)
|
||||
msg += "<span class='warning'>[T.He] [T.does] not appear to be breathing.</span><br>"
|
||||
if(istype(user, /mob/living/carbon/human) && !user.stat && Adjacent(user))
|
||||
user.visible_message("<b>[usr]</b> checks [src]'s pulse.", "You check [src]'s pulse.")
|
||||
spawn(15)
|
||||
if(distance <= 1 && usr.stat != 1)
|
||||
if(isobserver(user) || (Adjacent(user) && !user.stat)) // If you're a corpse then you can't exactly check their pulse, but ghosts can see anything
|
||||
if(pulse == PULSE_NONE)
|
||||
usr << "<span class='deadsay'>[T.He] [T.has] no pulse[src.client ? "" : " and [T.his] soul has departed"]...</span>"
|
||||
to_chat(user, "<span class='deadsay'>[T.He] [T.has] no pulse[src.client ? "" : " and [T.his] soul has departed"]...</span>")
|
||||
else
|
||||
usr << "<span class='deadsay'>[T.He] [T.has] a pulse!</span>"
|
||||
to_chat(user, "<span class='deadsay'>[T.He] [T.has] a pulse!</span>")
|
||||
|
||||
if(fire_stacks)
|
||||
msg += "[T.He] [T.is] covered in some liquid.\n"
|
||||
msg += "[T.He] [T.is] covered in some liquid.<br>"
|
||||
if(on_fire)
|
||||
msg += "<span class='warning'>[T.He] [T.is] on fire!.</span>\n"
|
||||
msg += "<span class='warning'>"
|
||||
|
||||
/*
|
||||
if(nutrition < 100)
|
||||
msg += "[T.He] [T.is] severely malnourished.\n"
|
||||
else if(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 += "</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.is] on fire!.</span><br>"
|
||||
|
||||
var/ssd_msg = species.get_ssd(src)
|
||||
if(stat != DEAD)
|
||||
if(ssd_msg && (!should_have_organ("brain") || has_brain()))
|
||||
if(!key)
|
||||
msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg]. It doesn't look like [T.he] [T.is] waking up anytime soon.</span>\n"
|
||||
else if(!client)
|
||||
msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg].</span>\n"
|
||||
|
||||
if(client && ((client.inactivity / 10) / 60 > 10)) //10 Minutes
|
||||
msg += "\[Inactive for [round((client.inactivity/10)/60)] minutes\]\n"
|
||||
else if(disconnect_time)
|
||||
msg += "\[Disconnected/ghosted [round(((world.realtime - disconnect_time)/10)/60)] minutes ago\]\n"
|
||||
|
||||
|
||||
if(ssd_msg && (!should_have_organ("brain") || has_brain()) && stat != DEAD)
|
||||
if(!key)
|
||||
msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg]. It doesn't look like [T.he] [T.is] waking up anytime soon.</span><br>"
|
||||
else if(!client)
|
||||
msg += "<span class='deadsay'>[T.He] [T.is] [ssd_msg].</span><br>"
|
||||
//VOREStation Add Start
|
||||
if(client && ((client.inactivity / 10) / 60 > 10)) //10 Minutes
|
||||
msg += "\[Inactive for [round((client.inactivity/10)/60)] minutes\]\n"
|
||||
else if(disconnect_time)
|
||||
msg += "\[Disconnected/ghosted [round(((world.realtime - disconnect_time)/10)/60)] minutes ago\]\n"
|
||||
//VOREStation Add End
|
||||
|
||||
var/list/wound_flavor_text = list()
|
||||
var/list/is_bleeding = list()
|
||||
var/applying_pressure = ""
|
||||
@@ -366,9 +341,9 @@
|
||||
|
||||
var/obj/item/organ/external/E = organs_by_name[organ_tag]
|
||||
if(!E)
|
||||
wound_flavor_text["[organ_descriptor]"] = "<span class='warning'><b>[T.He] [T.is] missing [T.his] [organ_descriptor].</b></span>\n"
|
||||
wound_flavor_text["[organ_descriptor]"] = "<span class='warning'><b>[T.He] [T.is] missing [T.his] [organ_descriptor].</b></span><br>"
|
||||
else if(E.is_stump())
|
||||
wound_flavor_text["[organ_descriptor]"] = "<span class='warning'><b>[T.He] [T.has] a stump where [T.his] [organ_descriptor] should be.</b></span>\n"
|
||||
wound_flavor_text["[organ_descriptor]"] = "<span class='warning'><b>[T.He] [T.has] a stump where [T.his] [organ_descriptor] should be.</b></span><br>"
|
||||
else
|
||||
continue
|
||||
|
||||
@@ -377,13 +352,14 @@
|
||||
if((temp.organ_tag in hidden) && hidden[temp.organ_tag])
|
||||
continue //Organ is hidden, don't talk about it
|
||||
if(temp.status & ORGAN_DESTROYED)
|
||||
wound_flavor_text["[temp.name]"] = "<span class='warning'><b>[T.He] [T.is] missing [T.his] [temp.name].</b></span>\n"
|
||||
wound_flavor_text["[temp.name]"] = "<span class='warning'><b>[T.He] [T.is] missing [T.his] [temp.name].</b></span><br>"
|
||||
continue
|
||||
|
||||
if(!looks_synth && temp.robotic == ORGAN_ROBOT)
|
||||
if(!(temp.brute_dam + temp.burn_dam))
|
||||
wound_flavor_text["[temp.name]"] = "[T.He] [T.has] a [temp.name].\n"
|
||||
wound_flavor_text["[temp.name]"] = "[T.He] [T.has] a [temp.name].<br>"
|
||||
else
|
||||
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] [T.has] a [temp.name] with [temp.get_wounds_desc()]!</span>\n"
|
||||
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] [T.has] a [temp.name] with [temp.get_wounds_desc()]!</span><br>"
|
||||
continue
|
||||
else if(temp.wounds.len > 0 || temp.open)
|
||||
if(temp.is_stump() && temp.parent_organ && organs_by_name[temp.parent_organ])
|
||||
@@ -395,7 +371,7 @@
|
||||
wound_flavor_text["[temp.name]"] = ""
|
||||
if(temp.dislocated == 2)
|
||||
wound_flavor_text["[temp.name]"] += "<span class='warning'>[T.His] [temp.joint] is dislocated!</span><br>"
|
||||
if(((temp.status & ORGAN_BROKEN) && temp.brute_dam > temp.min_broken_damage) || (temp.status & ORGAN_MUTATED))
|
||||
if(temp.brute_dam > temp.min_broken_damage || (temp.status & (ORGAN_BROKEN | ORGAN_MUTATED)))
|
||||
wound_flavor_text["[temp.name]"] += "<span class='warning'>[T.His] [temp.name] is dented and swollen!</span><br>"
|
||||
|
||||
if(temp.germ_level > INFECTION_LEVEL_TWO && !(temp.status & ORGAN_DEAD))
|
||||
@@ -403,8 +379,8 @@
|
||||
else if(temp.status & ORGAN_DEAD)
|
||||
wound_flavor_text["[temp.name]"] += "<span class='warning'>[T.His] [temp.name] looks rotten!</span><br>"
|
||||
|
||||
if(!wound_flavor_text["[temp.name]"] && (temp.status & ORGAN_BLEEDING))
|
||||
is_bleeding["[temp.name]"] = "<span class='danger'>[T.His] [temp.name] is bleeding!</span><br>"
|
||||
if(temp.status & ORGAN_BLEEDING)
|
||||
is_bleeding["[temp.name]"] += "<span class='danger'>[T.His] [temp.name] is bleeding!</span><br>"
|
||||
|
||||
if(temp.applied_pressure == src)
|
||||
applying_pressure = "<span class='info'>[T.He] is applying pressure to [T.his] [temp.name].</span><br>"
|
||||
@@ -414,58 +390,51 @@
|
||||
for(var/limb in is_bleeding)
|
||||
msg += is_bleeding[limb]
|
||||
for(var/implant in get_visible_implants(0))
|
||||
msg += "<span class='danger'>[src] [T.has] \a [implant] sticking out of [T.his] flesh!</span>\n"
|
||||
msg += "<span class='danger'>[src] [T.has] \a [implant] sticking out of [T.his] flesh!</span><br>"
|
||||
if(digitalcamo)
|
||||
msg += "[T.He] [T.is] repulsively uncanny!\n"
|
||||
msg += "[T.He] [T.is] repulsively uncanny!<br>"
|
||||
|
||||
if(hasHUD(usr,"security"))
|
||||
var/perpname = "wot"
|
||||
if(hasHUD(user,"security"))
|
||||
var/perpname = name
|
||||
var/criminal = "None"
|
||||
|
||||
if(wear_id)
|
||||
var/obj/item/weapon/card/id/I = wear_id.GetID()
|
||||
if(I)
|
||||
if(istype(wear_id, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/I = wear_id
|
||||
perpname = I.registered_name
|
||||
else
|
||||
perpname = name
|
||||
else
|
||||
perpname = name
|
||||
else if(istype(wear_id, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/P = wear_id
|
||||
perpname = P.owner
|
||||
|
||||
if(perpname)
|
||||
for (var/datum/data/record/E in data_core.general)
|
||||
if(E.fields["name"] == perpname)
|
||||
for (var/datum/data/record/R in data_core.security)
|
||||
if(R.fields["id"] == E.fields["id"])
|
||||
criminal = R.fields["criminal"]
|
||||
for (var/datum/data/record/R in data_core.security)
|
||||
if(R.fields["name"] == perpname)
|
||||
criminal = R.fields["criminal"]
|
||||
|
||||
msg += "<span class = 'deptradio'>Criminal status:</span> <a href='?src=\ref[src];criminal=1'>\[[criminal]\]</a>\n"
|
||||
msg += "<span class = 'deptradio'>Security records:</span> <a href='?src=\ref[src];secrecord=`'>\[View\]</a> <a href='?src=\ref[src];secrecordadd=`'>\[Add comment\]</a>\n"
|
||||
msg += "<span class = 'deptradio'>Criminal status:</span> <a href='?src=\ref[src];criminal=1'>\[[criminal]\]</a><br>"
|
||||
msg += "<span class = 'deptradio'>Security records:</span> <a href='?src=\ref[src];secrecord=`'>\[View\]</a> <a href='?src=\ref[src];secrecordadd=`'>\[Add comment\]</a><br>"
|
||||
|
||||
if(hasHUD(usr,"medical"))
|
||||
var/perpname = "wot"
|
||||
if(hasHUD(user,"medical"))
|
||||
var/perpname = name
|
||||
var/medical = "None"
|
||||
|
||||
if(wear_id)
|
||||
if(istype(wear_id,/obj/item/weapon/card/id))
|
||||
perpname = wear_id:registered_name
|
||||
else if(istype(wear_id,/obj/item/device/pda))
|
||||
var/obj/item/device/pda/tempPda = wear_id
|
||||
perpname = tempPda.owner
|
||||
else
|
||||
perpname = src.name
|
||||
if(istype(wear_id, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/I = wear_id
|
||||
perpname = I.registered_name
|
||||
else if(istype(wear_id, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/P = wear_id
|
||||
perpname = P.owner
|
||||
|
||||
for (var/datum/data/record/E in data_core.general)
|
||||
if (E.fields["name"] == perpname)
|
||||
for (var/datum/data/record/R in data_core.general)
|
||||
if (R.fields["id"] == E.fields["id"])
|
||||
medical = R.fields["p_stat"]
|
||||
for (var/datum/data/record/R in data_core.medical)
|
||||
if (R.fields["name"] == perpname)
|
||||
medical = R.fields["p_stat"]
|
||||
|
||||
msg += "<span class = 'deptradio'>Physical status:</span> <a href='?src=\ref[src];medical=1'>\[[medical]\]</a>\n"
|
||||
msg += "<span class = 'deptradio'>Medical records:</span> <a href='?src=\ref[src];medrecord=`'>\[View\]</a> <a href='?src=\ref[src];medrecordadd=`'>\[Add comment\]</a>\n"
|
||||
msg += "<span class = 'deptradio'>Physical status:</span> <a href='?src=\ref[src];medical=1'>\[[medical]\]</a><br>"
|
||||
msg += "<span class = 'deptradio'>Medical records:</span> <a href='?src=\ref[src];medrecord=`'>\[View\]</a> <a href='?src=\ref[src];medrecordadd=`'>\[Add comment\]</a><br>"
|
||||
|
||||
|
||||
if(print_flavor_text())
|
||||
msg += "[print_flavor_text()]\n"
|
||||
msg += "[print_flavor_text()]<br>"
|
||||
|
||||
// VOREStation Start
|
||||
if(ooc_notes)
|
||||
@@ -473,12 +442,12 @@
|
||||
// VOREStation End
|
||||
msg += "*---------*</span><br>"
|
||||
msg += applying_pressure
|
||||
if (pose)
|
||||
if( findtext(pose,".",lentext(pose)) == 0 && findtext(pose,"!",lentext(pose)) == 0 && findtext(pose,"?",lentext(pose)) == 0 )
|
||||
if(pose)
|
||||
if(!findtext(pose, regex("\[.?!]$"))) // Will be zero if the last character is not a member of [.?!]
|
||||
pose = addtext(pose,".") //Makes sure all emotes end with a period.
|
||||
msg += "[T.He] [pose]"
|
||||
|
||||
user << jointext(msg, null)
|
||||
to_chat(user, jointext(msg, null))
|
||||
|
||||
//Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records.
|
||||
/proc/hasHUD(mob/M as mob, hudtype)
|
||||
@@ -490,8 +459,6 @@
|
||||
return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/sunglasses/sechud)
|
||||
if("medical")
|
||||
return istype(H.glasses, /obj/item/clothing/glasses/hud/health)
|
||||
else
|
||||
return 0
|
||||
else if(istype(M, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
switch(hudtype)
|
||||
@@ -499,7 +466,4 @@
|
||||
return R.hudmode == "Security"
|
||||
if("medical")
|
||||
return R.hudmode == "Medical"
|
||||
else
|
||||
return 0
|
||||
else
|
||||
return 0
|
||||
return 0
|
||||
|
||||
@@ -35,6 +35,12 @@
|
||||
t_he = "it"
|
||||
t_His = "Its"
|
||||
t_his = "its"
|
||||
if(HERM)
|
||||
t_He = "Shi"
|
||||
t_he = "shi"
|
||||
t_His = "Hir"
|
||||
t_his = "hir"
|
||||
t_heavy = "curvy"
|
||||
|
||||
switch(weight_examine)
|
||||
if(0 to 74)
|
||||
@@ -88,6 +94,10 @@
|
||||
t_He = "It"
|
||||
t_his = "its"
|
||||
t_His = "Its"
|
||||
if(HERM)
|
||||
t_He = "Shi"
|
||||
t_his = "hir"
|
||||
t_His = "Hir"
|
||||
switch(nutrition_examine)
|
||||
if(0 to 49)
|
||||
message = "<span class='warning'>[t_He] [t_is] starving! You can hear [t_his] stomach snarling from across the room!</span>\n"
|
||||
|
||||
@@ -13,3 +13,4 @@
|
||||
name = "Pun Pun"
|
||||
real_name = name
|
||||
w_uniform = new /obj/item/clothing/under/punpun(src)
|
||||
regenerate_icons()
|
||||
|
||||
@@ -5,84 +5,84 @@
|
||||
/datum/species
|
||||
|
||||
// Descriptors and strings.
|
||||
var/name // Species name.
|
||||
var/name_plural // Pluralized name (since "[name]s" is not always valid)
|
||||
var/blurb = "A completely nondescript species." // A brief lore summary for use in the chargen screen.
|
||||
var/name // Species name.
|
||||
var/name_plural // Pluralized name (since "[name]s" is not always valid)
|
||||
var/blurb = "A completely nondescript species." // A brief lore summary for use in the chargen screen.
|
||||
|
||||
// Icon/appearance vars.
|
||||
var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set.
|
||||
var/deform = 'icons/mob/human_races/r_def_human.dmi' // Mutated icon set.
|
||||
var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set.
|
||||
var/deform = 'icons/mob/human_races/r_def_human.dmi' // Mutated icon set.
|
||||
|
||||
var/speech_bubble_appearance = "normal" // Part of icon_state to use for speech bubbles when talking. See talk.dmi for available icons.
|
||||
var/fire_icon_state = "humanoid" // The icon_state used inside OnFire.dmi for when on fire.
|
||||
var/suit_storage_icon = 'icons/mob/belt_mirror.dmi' // Icons used for worn items in suit storage slot.
|
||||
var/speech_bubble_appearance = "normal" // Part of icon_state to use for speech bubbles when talking. See talk.dmi for available icons.
|
||||
var/fire_icon_state = "humanoid" // The icon_state used inside OnFire.dmi for when on fire.
|
||||
var/suit_storage_icon = 'icons/mob/belt_mirror.dmi' // Icons used for worn items in suit storage slot.
|
||||
|
||||
// Damage overlay and masks.
|
||||
var/damage_overlays = 'icons/mob/human_races/masks/dam_human.dmi'
|
||||
var/damage_mask = 'icons/mob/human_races/masks/dam_mask_human.dmi'
|
||||
var/blood_mask = 'icons/mob/human_races/masks/blood_human.dmi'
|
||||
|
||||
var/prone_icon // If set, draws this from icobase when mob is prone.
|
||||
var/blood_color = "#A10808" // Red.
|
||||
var/flesh_color = "#FFC896" // Pink.
|
||||
var/base_color // Used by changelings. Should also be used for icon previews.
|
||||
var/prone_icon // If set, draws this from icobase when mob is prone.
|
||||
var/blood_color = "#A10808" // Red.
|
||||
var/flesh_color = "#FFC896" // Pink.
|
||||
var/base_color // Used by changelings. Should also be used for icon previews.
|
||||
|
||||
var/tail // Name of tail state in species effects icon file.
|
||||
var/tail_animation // If set, the icon to obtain tail animation states from.
|
||||
var/tail // Name of tail state in species effects icon file.
|
||||
var/tail_animation // If set, the icon to obtain tail animation states from.
|
||||
var/tail_hair
|
||||
|
||||
var/icon_scale = 1 // Makes the icon larger/smaller.
|
||||
var/icon_scale = 1 // Makes the icon larger/smaller.
|
||||
|
||||
var/race_key = 0 // Used for mob icon cache string.
|
||||
var/icon/icon_template // Used for mob icon generation for non-32x32 species.
|
||||
var/race_key = 0 // Used for mob icon cache string.
|
||||
var/icon/icon_template // Used for mob icon generation for non-32x32 species.
|
||||
var/mob_size = MOB_MEDIUM
|
||||
var/show_ssd = "fast asleep"
|
||||
var/virus_immune
|
||||
var/short_sighted // Permanent weldervision.
|
||||
var/blood_volume = 560 // Initial blood volume.
|
||||
var/bloodloss_rate = 1 // Multiplier for how fast a species bleeds out. Higher = Faster
|
||||
var/hunger_factor = 0.05 // Multiplier for hunger.
|
||||
var/active_regen_mult = 1 // Multiplier for 'Regenerate' power speed, in human_powers.dm
|
||||
var/short_sighted // Permanent weldervision.
|
||||
var/blood_volume = 560 // Initial blood volume.
|
||||
var/bloodloss_rate = 1 // Multiplier for how fast a species bleeds out. Higher = Faster
|
||||
var/hunger_factor = 0.05 // Multiplier for hunger.
|
||||
var/active_regen_mult = 1 // Multiplier for 'Regenerate' power speed, in human_powers.dm
|
||||
|
||||
var/taste_sensitivity = TASTE_NORMAL // How sensitive the species is to minute tastes.
|
||||
var/taste_sensitivity = TASTE_NORMAL // How sensitive the species is to minute tastes.
|
||||
|
||||
var/min_age = 17
|
||||
var/max_age = 70
|
||||
|
||||
// Language/culture vars.
|
||||
var/default_language = LANGUAGE_GALCOM // Default language is used when 'say' is used without modifiers.
|
||||
var/language = LANGUAGE_GALCOM // Default racial language, if any.
|
||||
var/species_language = LANGUAGE_GALCOM // Used on the Character Setup screen
|
||||
var/list/secondary_langs = list() // The names of secondary languages that are available to this species.
|
||||
var/list/speech_sounds // A list of sounds to potentially play when speaking.
|
||||
var/list/speech_chance // The likelihood of a speech sound playing.
|
||||
var/num_alternate_languages = 0 // How many secondary languages are available to select at character creation
|
||||
var/name_language = LANGUAGE_GALCOM // The language to use when determining names for this species, or null to use the first name/last name generator
|
||||
var/default_language = LANGUAGE_GALCOM // Default language is used when 'say' is used without modifiers.
|
||||
var/language = LANGUAGE_GALCOM // Default racial language, if any.
|
||||
var/species_language = LANGUAGE_GALCOM // Used on the Character Setup screen
|
||||
var/list/secondary_langs = list() // The names of secondary languages that are available to this species.
|
||||
var/list/speech_sounds // A list of sounds to potentially play when speaking.
|
||||
var/list/speech_chance // The likelihood of a speech sound playing.
|
||||
var/num_alternate_languages = 0 // How many secondary languages are available to select at character creation
|
||||
var/name_language = LANGUAGE_GALCOM // The language to use when determining names for this species, or null to use the first name/last name generator
|
||||
|
||||
//Soundy emotey things.
|
||||
var/scream_verb = "screams"
|
||||
var/male_scream_sound //= 'sound/goonstation/voice/male_scream.ogg' Removed due to licensing, replace!
|
||||
var/female_scream_sound //= 'sound/goonstation/voice/female_scream.ogg' Removed due to licensing, replace!
|
||||
var/male_scream_sound //= 'sound/goonstation/voice/male_scream.ogg' Removed due to licensing, replace!
|
||||
var/female_scream_sound //= 'sound/goonstation/voice/female_scream.ogg' Removed due to licensing, replace!
|
||||
var/male_cough_sounds = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg')
|
||||
var/female_cough_sounds = list('sound/effects/mob_effects/f_cougha.ogg','sound/effects/mob_effects/f_coughb.ogg')
|
||||
var/male_sneeze_sound = 'sound/effects/mob_effects/sneeze.ogg'
|
||||
var/female_sneeze_sound = 'sound/effects/mob_effects/f_sneeze.ogg'
|
||||
|
||||
// Combat vars.
|
||||
var/total_health = 100 // Point at which the mob will enter crit.
|
||||
var/list/unarmed_types = list( // Possible unarmed attacks that the mob will use in combat,
|
||||
var/total_health = 100 // Point at which the mob will enter crit.
|
||||
var/list/unarmed_types = list( // Possible unarmed attacks that the mob will use in combat,
|
||||
/datum/unarmed_attack,
|
||||
/datum/unarmed_attack/bite
|
||||
)
|
||||
var/list/unarmed_attacks = null // For empty hand harm-intent attack
|
||||
var/brute_mod = 1 // Physical damage multiplier.
|
||||
var/burn_mod = 1 // Burn damage multiplier.
|
||||
var/oxy_mod = 1 // Oxyloss modifier
|
||||
var/toxins_mod = 1 // Toxloss modifier
|
||||
var/radiation_mod = 1 // Radiation modifier
|
||||
var/flash_mod = 1 // Stun from blindness modifier.
|
||||
var/chemOD_mod = 1 // Damage modifier for overdose
|
||||
var/vision_flags = SEE_SELF // Same flags as glasses.
|
||||
var/list/unarmed_attacks = null // For empty hand harm-intent attack
|
||||
var/brute_mod = 1 // Physical damage multiplier.
|
||||
var/burn_mod = 1 // Burn damage multiplier.
|
||||
var/oxy_mod = 1 // Oxyloss modifier
|
||||
var/toxins_mod = 1 // Toxloss modifier
|
||||
var/radiation_mod = 1 // Radiation modifier
|
||||
var/flash_mod = 1 // Stun from blindness modifier.
|
||||
var/chemOD_mod = 1 // Damage modifier for overdose
|
||||
var/vision_flags = SEE_SELF // Same flags as glasses.
|
||||
|
||||
// Death vars.
|
||||
var/meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/human
|
||||
@@ -95,23 +95,23 @@
|
||||
var/cloning_modifier = /datum/modifier/cloning_sickness
|
||||
|
||||
// Environment tolerance/life processes vars.
|
||||
var/reagent_tag //Used for metabolizing reagents.
|
||||
var/breath_type = "oxygen" // Non-oxygen gas breathed, if any.
|
||||
var/poison_type = "phoron" // Poisonous air.
|
||||
var/exhale_type = "carbon_dioxide" // Exhaled gas type.
|
||||
var/reagent_tag //Used for metabolizing reagents.
|
||||
var/breath_type = "oxygen" // Non-oxygen gas breathed, if any.
|
||||
var/poison_type = "phoron" // Poisonous air.
|
||||
var/exhale_type = "carbon_dioxide" // Exhaled gas type.
|
||||
|
||||
var/body_temperature = 310.15 // Species will try to stabilize at this temperature. (also affects temperature processing)
|
||||
var/body_temperature = 310.15 // Species will try to stabilize at this temperature. (also affects temperature processing)
|
||||
|
||||
// Cold
|
||||
var/cold_level_1 = 260 // Cold damage level 1 below this point.
|
||||
var/cold_level_2 = 200 // Cold damage level 2 below this point.
|
||||
var/cold_level_3 = 120 // Cold damage level 3 below this point.
|
||||
var/cold_level_1 = 260 // Cold damage level 1 below this point.
|
||||
var/cold_level_2 = 200 // Cold damage level 2 below this point.
|
||||
var/cold_level_3 = 120 // Cold damage level 3 below this point.
|
||||
|
||||
var/breath_cold_level_1 = 240 // Cold gas damage level 1 below this point.
|
||||
var/breath_cold_level_2 = 180 // Cold gas damage level 2 below this point.
|
||||
var/breath_cold_level_3 = 100 // Cold gas damage level 3 below this point.
|
||||
var/breath_cold_level_1 = 240 // Cold gas damage level 1 below this point.
|
||||
var/breath_cold_level_2 = 180 // Cold gas damage level 2 below this point.
|
||||
var/breath_cold_level_3 = 100 // Cold gas damage level 3 below this point.
|
||||
|
||||
var/cold_discomfort_level = 285 // Aesthetic messages about feeling chilly.
|
||||
var/cold_discomfort_level = 285 // Aesthetic messages about feeling chilly.
|
||||
var/list/cold_discomfort_strings = list(
|
||||
"You feel chilly.",
|
||||
"You shiver suddenly.",
|
||||
@@ -119,15 +119,15 @@
|
||||
)
|
||||
|
||||
// Hot
|
||||
var/heat_level_1 = 360 // Heat damage level 1 above this point.
|
||||
var/heat_level_2 = 400 // Heat damage level 2 above this point.
|
||||
var/heat_level_3 = 1000 // Heat damage level 3 above this point.
|
||||
var/heat_level_1 = 360 // Heat damage level 1 above this point.
|
||||
var/heat_level_2 = 400 // Heat damage level 2 above this point.
|
||||
var/heat_level_3 = 1000 // Heat damage level 3 above this point.
|
||||
|
||||
var/breath_heat_level_1 = 380 // Heat gas damage level 1 below this point.
|
||||
var/breath_heat_level_2 = 450 // Heat gas damage level 2 below this point.
|
||||
var/breath_heat_level_3 = 1250 // Heat gas damage level 3 below this point.
|
||||
var/breath_heat_level_1 = 380 // Heat gas damage level 1 below this point.
|
||||
var/breath_heat_level_2 = 450 // Heat gas damage level 2 below this point.
|
||||
var/breath_heat_level_3 = 1250 // Heat gas damage level 3 below this point.
|
||||
|
||||
var/heat_discomfort_level = 315 // Aesthetic messages about feeling warm.
|
||||
var/heat_discomfort_level = 315 // Aesthetic messages about feeling warm.
|
||||
var/list/heat_discomfort_strings = list(
|
||||
"You feel sweat drip down your neck.",
|
||||
"You feel uncomfortably warm.",
|
||||
@@ -135,13 +135,13 @@
|
||||
)
|
||||
|
||||
|
||||
var/passive_temp_gain = 0 // Species will gain this much temperature every second
|
||||
var/hazard_high_pressure = HAZARD_HIGH_PRESSURE // Dangerously high pressure.
|
||||
var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning.
|
||||
var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning.
|
||||
var/hazard_low_pressure = HAZARD_LOW_PRESSURE // Dangerously low pressure.
|
||||
var/light_dam // If set, mob will be damaged in light over this value and heal in light below its negative.
|
||||
var/minimum_breath_pressure = 16 // Minimum required pressure for breath, in kPa
|
||||
var/passive_temp_gain = 0 // Species will gain this much temperature every second
|
||||
var/hazard_high_pressure = HAZARD_HIGH_PRESSURE // Dangerously high pressure.
|
||||
var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning.
|
||||
var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning.
|
||||
var/hazard_low_pressure = HAZARD_LOW_PRESSURE // Dangerously low pressure.
|
||||
var/light_dam // If set, mob will be damaged in light over this value and heal in light below its negative.
|
||||
var/minimum_breath_pressure = 16 // Minimum required pressure for breath, in kPa
|
||||
|
||||
|
||||
var/metabolic_rate = 1
|
||||
@@ -149,52 +149,55 @@
|
||||
// HUD data vars.
|
||||
var/datum/hud_data/hud
|
||||
var/hud_type
|
||||
var/health_hud_intensity = 1 // This modifies how intensely the health hud is colored.
|
||||
var/health_hud_intensity = 1 // This modifies how intensely the health hud is colored.
|
||||
|
||||
// Body/form vars.
|
||||
var/list/inherent_verbs // Species-specific verbs.
|
||||
var/has_fine_manipulation = 1 // Can use small items.
|
||||
var/siemens_coefficient = 1 // The lower, the thicker the skin and better the insulation.
|
||||
var/darksight = 2 // Native darksight distance.
|
||||
var/flags = 0 // Various specific features.
|
||||
var/appearance_flags = 0 // Appearance/display related features.
|
||||
var/spawn_flags = 0 // Flags that specify who can spawn as this species
|
||||
var/list/inherent_verbs // Species-specific verbs.
|
||||
var/has_fine_manipulation = 1 // Can use small items.
|
||||
var/siemens_coefficient = 1 // The lower, the thicker the skin and better the insulation.
|
||||
var/darksight = 2 // Native darksight distance.
|
||||
var/flags = 0 // Various specific features.
|
||||
var/appearance_flags = 0 // Appearance/display related features.
|
||||
var/spawn_flags = 0 // Flags that specify who can spawn as this species
|
||||
|
||||
var/slowdown = 0 // Passive movement speed malus (or boost, if negative)
|
||||
var/slowdown = 0 // Passive movement speed malus (or boost, if negative)
|
||||
var/obj/effect/decal/cleanable/blood/tracks/move_trail = /obj/effect/decal/cleanable/blood/tracks/footprints // What marks are left when walking
|
||||
var/list/skin_overlays = list()
|
||||
var/has_floating_eyes = 0 // Whether the eyes can be shown above other icons
|
||||
var/has_glowing_eyes = 0 // Whether the eyes are shown above all lighting
|
||||
var/water_movement = 0 // How much faster or slower the species is in water
|
||||
var/snow_movement = 0 // How much faster or slower the species is on snow
|
||||
var/has_floating_eyes = 0 // Whether the eyes can be shown above other icons
|
||||
var/has_glowing_eyes = 0 // Whether the eyes are shown above all lighting
|
||||
var/water_movement = 0 // How much faster or slower the species is in water
|
||||
var/snow_movement = 0 // How much faster or slower the species is on snow
|
||||
|
||||
|
||||
var/item_slowdown_mod = 1 // How affected by item slowdown the species is.
|
||||
var/primitive_form // Lesser form, if any (ie. monkey for humans)
|
||||
var/greater_form // Greater form, if any, ie. human for monkeys.
|
||||
var/item_slowdown_mod = 1 // How affected by item slowdown the species is.
|
||||
var/primitive_form // Lesser form, if any (ie. monkey for humans)
|
||||
var/greater_form // Greater form, if any, ie. human for monkeys.
|
||||
var/holder_type
|
||||
var/gluttonous // Can eat some mobs. 1 for mice, 2 for monkeys, 3 for people.
|
||||
var/rarity_value = 1 // Relative rarity/collector value for this species.
|
||||
// Determines the organs that the species spawns with and
|
||||
var/list/has_organ = list( // which required-organ checks are conducted.
|
||||
O_HEART = /obj/item/organ/internal/heart,
|
||||
O_LUNGS = /obj/item/organ/internal/lungs,
|
||||
O_LIVER = /obj/item/organ/internal/liver,
|
||||
O_KIDNEYS = /obj/item/organ/internal/kidneys,
|
||||
O_BRAIN = /obj/item/organ/internal/brain,
|
||||
var/gluttonous // Can eat some mobs. 1 for mice, 2 for monkeys, 3 for people.
|
||||
|
||||
var/rarity_value = 1 // Relative rarity/collector value for this species.
|
||||
var/economic_modifier = 2 // How much money this species makes
|
||||
|
||||
// Determines the organs that the species spawns with and
|
||||
var/list/has_organ = list( // which required-organ checks are conducted.
|
||||
O_HEART = /obj/item/organ/internal/heart,
|
||||
O_LUNGS = /obj/item/organ/internal/lungs,
|
||||
O_LIVER = /obj/item/organ/internal/liver,
|
||||
O_KIDNEYS = /obj/item/organ/internal/kidneys,
|
||||
O_BRAIN = /obj/item/organ/internal/brain,
|
||||
O_APPENDIX = /obj/item/organ/internal/appendix,
|
||||
O_EYES = /obj/item/organ/internal/eyes
|
||||
O_EYES = /obj/item/organ/internal/eyes
|
||||
)
|
||||
var/vision_organ // If set, this organ is required for vision. Defaults to "eyes" if the species has them.
|
||||
var/vision_organ // If set, this organ is required for vision. Defaults to "eyes" if the species has them.
|
||||
|
||||
var/list/has_limbs = list(
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin),
|
||||
BP_HEAD = list("path" = /obj/item/organ/external/head),
|
||||
BP_L_ARM = list("path" = /obj/item/organ/external/arm),
|
||||
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right),
|
||||
BP_L_LEG = list("path" = /obj/item/organ/external/leg),
|
||||
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right),
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin),
|
||||
BP_HEAD = list("path" = /obj/item/organ/external/head),
|
||||
BP_L_ARM = list("path" = /obj/item/organ/external/arm),
|
||||
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right),
|
||||
BP_L_LEG = list("path" = /obj/item/organ/external/leg),
|
||||
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right),
|
||||
BP_L_HAND = list("path" = /obj/item/organ/external/hand),
|
||||
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right),
|
||||
BP_L_FOOT = list("path" = /obj/item/organ/external/foot),
|
||||
@@ -202,12 +205,12 @@
|
||||
)
|
||||
|
||||
var/list/genders = list(MALE, FEMALE)
|
||||
var/ambiguous_genders = FALSE // If true, people examining a member of this species whom are not also the same species will see them as gender neutral. Because aliens.
|
||||
var/ambiguous_genders = FALSE // If true, people examining a member of this species whom are not also the same species will see them as gender neutral. Because aliens.
|
||||
|
||||
// Bump vars
|
||||
var/bump_flag = HUMAN // What are we considered to be when bumped?
|
||||
var/push_flags = ~HEAVY // What can we push?
|
||||
var/swap_flags = ~HEAVY // What can we swap place with?
|
||||
var/bump_flag = HUMAN // What are we considered to be when bumped?
|
||||
var/push_flags = ~HEAVY // What can we push?
|
||||
var/swap_flags = ~HEAVY // What can we swap place with?
|
||||
|
||||
var/pass_flags = 0
|
||||
|
||||
@@ -283,9 +286,9 @@
|
||||
if((organ in H.organs) || (organ in H.internal_organs))
|
||||
qdel(organ)
|
||||
|
||||
if(H.organs) H.organs.Cut()
|
||||
if(H.internal_organs) H.internal_organs.Cut()
|
||||
if(H.organs_by_name) H.organs_by_name.Cut()
|
||||
if(H.organs) H.organs.Cut()
|
||||
if(H.internal_organs) H.internal_organs.Cut()
|
||||
if(H.organs_by_name) H.organs_by_name.Cut()
|
||||
if(H.internal_organs_by_name) H.internal_organs_by_name.Cut()
|
||||
|
||||
H.organs = list()
|
||||
|
||||
@@ -130,7 +130,7 @@ var/list/wrapped_species_by_ref = list()
|
||||
if(!new_gender)
|
||||
return
|
||||
|
||||
var/new_gender_identity = input("Please select a gender Identity.", "Shapeshifter Gender Identity") as null|anything in list(FEMALE, MALE, NEUTER, PLURAL)
|
||||
var/new_gender_identity = input("Please select a gender Identity.", "Shapeshifter Gender Identity") as null|anything in list(FEMALE, MALE, NEUTER, PLURAL, HERM) //VOREStation Edit
|
||||
if(!new_gender_identity)
|
||||
return
|
||||
|
||||
|
||||
@@ -35,11 +35,14 @@ var/datum/species/shapeshifter/promethean/prometheans
|
||||
male_cough_sounds = list('sound/effects/slime_squish.ogg')
|
||||
female_cough_sounds = list('sound/effects/slime_squish.ogg')
|
||||
|
||||
min_age = 1
|
||||
max_age = 10
|
||||
|
||||
economic_modifier = 3
|
||||
|
||||
//gluttonous = 1 // VOREStation Edit. Redundant feature.
|
||||
virus_immune = 1
|
||||
blood_volume = 560
|
||||
min_age = 1
|
||||
max_age = 10
|
||||
brute_mod = 0.75
|
||||
burn_mod = 2
|
||||
oxy_mod = 0
|
||||
@@ -181,6 +184,8 @@ VOREStation Removal End */
|
||||
t_she = "They are"
|
||||
else if(H.identifying_gender == NEUTER)
|
||||
t_she = "It is"
|
||||
else if(H.identifying_gender == HERM) //VOREStation Edit
|
||||
t_she = "Shi is"
|
||||
|
||||
switch(stored_shock_by_ref["\ref[H]"])
|
||||
if(1 to 10)
|
||||
|
||||
@@ -10,8 +10,12 @@
|
||||
secondary_langs = list(LANGUAGE_SCHECHI, LANGUAGE_SKRELLIAN)
|
||||
name_language = LANGUAGE_SCHECHI
|
||||
species_language = LANGUAGE_SCHECHI
|
||||
|
||||
min_age = 12
|
||||
max_age = 45
|
||||
|
||||
economic_modifier = 6
|
||||
|
||||
health_hud_intensity = 3
|
||||
|
||||
male_cough_sounds = list('sound/effects/mob_effects/tesharicougha.ogg','sound/effects/mob_effects/tesharicoughb.ogg')
|
||||
|
||||
@@ -12,8 +12,12 @@
|
||||
species_language = LANGUAGE_SOL_COMMON
|
||||
secondary_langs = list(LANGUAGE_SOL_COMMON, LANGUAGE_TERMINUS)
|
||||
name_language = null // Use the first-name last-name generator rather than a language scrambler
|
||||
|
||||
min_age = 17
|
||||
max_age = 130
|
||||
|
||||
economic_modifier = 10
|
||||
|
||||
health_hud_intensity = 1.5
|
||||
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
@@ -52,6 +56,8 @@
|
||||
min_age = 32
|
||||
max_age = 260
|
||||
|
||||
economic_modifier = 7
|
||||
|
||||
blurb = "A heavily reptillian species, Unathi hail from the \
|
||||
Uuosa-Eso system, which roughly translates to 'burning mother'.<br/><br/>Coming from a harsh, inhospitable \
|
||||
planet, they mostly hold ideals of honesty, virtue, proficiency and bravery above all \
|
||||
@@ -155,6 +161,8 @@
|
||||
min_age = 17
|
||||
max_age = 80
|
||||
|
||||
economic_modifier = 7
|
||||
|
||||
blurb = "The Tajaran are a mammalian species resembling roughly felines, hailing from Meralar in the Rarkajar system. \
|
||||
While reaching to the stars independently from outside influences, the humans engaged them in peaceful trade contact \
|
||||
and have accelerated the fledgling culture into the interstellar age. Their history is full of war and highly fractious \
|
||||
@@ -239,6 +247,8 @@
|
||||
min_age = 19
|
||||
max_age = 130
|
||||
|
||||
economic_modifier = 12
|
||||
|
||||
darksight = 4
|
||||
flash_mod = 1.2
|
||||
chemOD_mod = 0.9
|
||||
@@ -314,6 +324,8 @@
|
||||
min_age = 1
|
||||
max_age = 300
|
||||
|
||||
economic_modifier = 4
|
||||
|
||||
blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
|
||||
species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
|
||||
there is no effective upper limit to the number that can fuse in gestalt, and reports exist of the Epsilon Ursae \
|
||||
|
||||
+111
-97
@@ -1,137 +1,151 @@
|
||||
/mob/living/carbon/human/proc/begin_reconstitute_form() //Scree's race ability.in exchange for: No cloning.
|
||||
/mob/living/carbon/human/proc/reconstitute_form() //Scree's race ability.in exchange for: No cloning.
|
||||
set name = "Reconstitute Form"
|
||||
set category = "Abilities"
|
||||
|
||||
if(world.time < last_special)
|
||||
return
|
||||
|
||||
last_special = world.time + 50 //To prevent button spam.
|
||||
|
||||
// Sanity is mostly handled in chimera_regenerate()
|
||||
|
||||
var/confirm = alert(usr, "Are you sure you want to completely reconstruct your form? This process can take up to twenty minutes, depending on how hungry you are, and you will be unable to move.", "Confirm Regeneration", "Yes", "No")
|
||||
if(confirm == "Yes")
|
||||
chimera_regenerate()
|
||||
|
||||
/mob/living/carbon/human/proc/chimera_regenerate()
|
||||
var/nutrition_used = nutrition/2
|
||||
|
||||
if(reviving == TRUE) //If they're already unable to
|
||||
to_chat(src, "You are already reconstructing, or your body is currently recovering from the intense process of your previous reconstitution.")
|
||||
return
|
||||
|
||||
if(stat == DEAD) //Uh oh, you died!
|
||||
if(hasnutriment()) //Let's hope you have nutriment in you.... If not
|
||||
var/time = (240+960/(1 + nutrition_used/75))
|
||||
reviving = TRUE
|
||||
to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.")
|
||||
//don't need all the weakened, does_not_breathe, canmove, heal IB crap here like you do for live ones'cause they're DEAD.
|
||||
|
||||
spawn(time SECONDS)
|
||||
if(src) //Runtime prevention.
|
||||
if (stat == DEAD) // let's make sure they've not been defibbed or whatever
|
||||
to_chat(src, "<span class='notice'>Consciousness begins to stir as your new body awakens, ready to hatch.</span>")
|
||||
verbs += /mob/living/carbon/human/proc/hatch
|
||||
return
|
||||
else // their revive got aborted by being made not-dead. Remove their cooldown.
|
||||
to_chat(src, "<span class='notice'>Your body has recovered from its ordeal, ready to regenerate itself again.</span>")
|
||||
reviving = FALSE
|
||||
return
|
||||
else
|
||||
return //Something went wrong.
|
||||
else //Dead until nutrition injected.
|
||||
to_chat(src, "Your body is too damaged to regenerate without additional nutrients to feed what few living cells remain.")
|
||||
//If they're already regenerating
|
||||
switch(reviving)
|
||||
if(REVIVING_NOW)
|
||||
to_chat(src, "You are already reconstructing, just wait for the reconstruction to finish!")
|
||||
return
|
||||
if(REVIVING_DONE)
|
||||
to_chat(src, "Your reconstruction is done, but you need to hatch now.")
|
||||
return
|
||||
if(REVIVING_COOLDOWN)
|
||||
to_chat(src, "You can't use that ability again so soon!")
|
||||
return
|
||||
|
||||
else if(stat != DEAD) //If they're alive at the time of regenerating.
|
||||
var/time = (240+960/(1 + nutrition_used/75))
|
||||
weakened = 10000 //Since it takes 1 tick to lose one weaken. Due to prior rounding errors, you'd sometimes unweaken before regenning. This fixes that.
|
||||
reviving = TRUE
|
||||
canmove = 0 //Make them unable to move. In case they somehow get up before the delay.
|
||||
to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.")
|
||||
does_not_breathe = 1 //effectively makes them spaceworthy while regenning
|
||||
var/nutrition_used = nutrition * 0.5
|
||||
var/time = (240+960/(1 + nutrition_used/75))
|
||||
|
||||
spawn(time SECONDS)
|
||||
if(stat != DEAD) //If they're still alive after regenning.
|
||||
to_chat(src, "<span class='notice'>Consciousness begins to stir as your new body awakens, ready to hatch..</span>")
|
||||
verbs += /mob/living/carbon/human/proc/hatch
|
||||
return
|
||||
else if(stat == DEAD)
|
||||
if(hasnutriment()) //Let's hope you have nutriment in you.... If not
|
||||
to_chat(src, "<span class='notice'>Consciousness begins to stir as your new body awakens, ready to hatch..</span>")
|
||||
verbs += /mob/living/carbon/human/proc/hatch
|
||||
return
|
||||
else //Dead until nutrition injected.
|
||||
to_chat(src, "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.")
|
||||
reviving = FALSE // so they can try again when they're given a kickstart
|
||||
return
|
||||
else
|
||||
return //Something went wrong
|
||||
//Clicked regen while dead.
|
||||
if(stat == DEAD)
|
||||
|
||||
//Has nutrition and dead, allow regen.
|
||||
if(hasnutriment())
|
||||
to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.")
|
||||
|
||||
//Scary spawnerization.
|
||||
reviving = REVIVING_NOW
|
||||
spawn(time SECONDS)
|
||||
// Was dead, now not dead.
|
||||
if(stat != DEAD)
|
||||
to_chat(src, "<span class='notice'>Your body has recovered from its ordeal, ready to regenerate itself again.</span>")
|
||||
reviving = 0 //Not bool
|
||||
|
||||
// Was dead, still dead.
|
||||
else
|
||||
to_chat(src, "<span class='notice'>Consciousness begins to stir as your new body awakens, ready to hatch.</span>")
|
||||
verbs |= /mob/living/carbon/human/proc/hatch
|
||||
reviving = REVIVING_DONE
|
||||
|
||||
//Dead until nutrition injected.
|
||||
else
|
||||
to_chat(src, "<span class='warning'>Your body is too damaged to regenerate without additional nutrients to feed what few living cells remain.</span>")
|
||||
|
||||
//Clicked regen while NOT dead
|
||||
else
|
||||
return //Something went wrong
|
||||
to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.")
|
||||
|
||||
//Waiting for regen after being alive
|
||||
reviving = REVIVING_NOW
|
||||
spawn(time SECONDS)
|
||||
|
||||
//If they're still alive after regenning.
|
||||
if(stat != DEAD)
|
||||
to_chat(src, "<span class='notice'>Consciousness begins to stir as your new body awakens, ready to hatch..</span>")
|
||||
verbs |= /mob/living/carbon/human/proc/hatch
|
||||
reviving = REVIVING_DONE
|
||||
|
||||
//Was alive, now dead
|
||||
else if(hasnutriment())
|
||||
to_chat(src, "<span class='notice'>Consciousness begins to stir as your new body awakens, ready to hatch..</span>")
|
||||
verbs |= /mob/living/carbon/human/proc/hatch
|
||||
reviving = REVIVING_DONE
|
||||
|
||||
//Dead until nutrition injected.
|
||||
else
|
||||
to_chat(src, "<span class='warning'>Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.</span>")
|
||||
reviving = 0 //Not boolean
|
||||
|
||||
/mob/living/carbon/human/proc/hasnutriment()
|
||||
if (bloodstr.has_reagent("nutriment", 30) || src.bloodstr.has_reagent("protein", 15)) //protein needs half as much. For reference, a steak contains 9u protein.
|
||||
return 1
|
||||
return TRUE
|
||||
else if (ingested.has_reagent("nutriment", 60) || src.ingested.has_reagent("protein", 30)) //try forcefeeding them, why not. Less effective.
|
||||
return 1
|
||||
else return 0
|
||||
return TRUE
|
||||
else return FALSE
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/hatch()
|
||||
set name = "Hatch"
|
||||
set category = "Abilities"
|
||||
|
||||
if(world.time < last_special)
|
||||
if(reviving != REVIVING_DONE)
|
||||
//Hwhat?
|
||||
verbs -= /mob/living/carbon/human/proc/hatch
|
||||
return
|
||||
|
||||
last_special = world.time + 50 //To prevent button spam.
|
||||
|
||||
var/confirm = alert(usr, "Are you sure you want to hatch right now? This will be very obvious to anyone in view.", "Confirm Regeneration", "Yes", "No")
|
||||
if(confirm == "Yes")
|
||||
if(stat == DEAD) //Uh oh, you died!
|
||||
if(hasnutriment()) //Let's hope you have nutriment in you.... If not
|
||||
if(src) //Runtime prevention.
|
||||
chimera_hatch()
|
||||
visible_message("<span class='danger'><p><font size=4>The lifeless husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.</font></p></span>") //Bloody hell...
|
||||
brainloss += 10 //Reviving from dead means you take a lil' brainloss on top of whatever was healed in the revive.
|
||||
return
|
||||
else
|
||||
return //Runtime prevention
|
||||
else //don't have nutriment to hatch! Or you somehow died in between completing your revive and hitting hatch.
|
||||
to_chat(src, "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.")
|
||||
reviving = FALSE // so they can try again when they're given a kickstart
|
||||
|
||||
//Dead when hatching
|
||||
if(stat == DEAD)
|
||||
//Check again for nutriment (necessary?)
|
||||
if(hasnutriment())
|
||||
chimera_hatch()
|
||||
adjustBrainLoss(10) // if they're reviving from dead, they come back with 10 brainloss on top of whatever's unhealed.
|
||||
visible_message("<span class='danger'><p><font size=4>The lifeless husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.</font></p></span>") //Bloody hell...
|
||||
return
|
||||
|
||||
else if(stat != DEAD) //If they're alive at the time of regenerating.
|
||||
//Don't have nutriment to hatch! Or you somehow died in between completing your revive and hitting hatch.
|
||||
else
|
||||
to_chat(src, "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.")
|
||||
verbs -= /mob/living/carbon/human/proc/hatch
|
||||
reviving = 0 //So they can try again when they're given a kickstart
|
||||
|
||||
//Alive when hatching
|
||||
else
|
||||
chimera_hatch()
|
||||
visible_message("<span class='danger'><p><font size=4>The dormant husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.</font></p></span>") //Bloody hell...
|
||||
return
|
||||
else
|
||||
return //Runtime prevention.
|
||||
|
||||
/mob/living/carbon/human/proc/chimera_hatch()
|
||||
nutrition -= nutrition/2 //Cut their nutrition in half.
|
||||
var/old_nutrition = nutrition //Since the game is being annoying.
|
||||
verbs -= /mob/living/carbon/human/proc/hatch
|
||||
to_chat(src, "<span class='notice'>Your new body awakens, bursting free from your old skin.</span>")
|
||||
var/T = get_turf(src)
|
||||
new /obj/effect/gibspawner/human/scree(T)
|
||||
var/braindamage = brainloss/2 //If you have 100 brainloss, it gives you 50.
|
||||
does_not_breathe = 0 //start breathing again
|
||||
revive() // I did have special snowflake code, but this is easier.
|
||||
weakened = 2 //Not going to let you get up immediately. 2 ticks before you get up. Overrides the above 10000 weaken.
|
||||
|
||||
//Modify and record values (half nutrition and braindamage)
|
||||
var/old_nutrition = nutrition * 0.5
|
||||
var/braindamage = (brainloss * 0.5) //Can only heal half brain damage.
|
||||
|
||||
//I did have special snowflake code, but this is easier.
|
||||
revive()
|
||||
mutations.Remove(HUSK)
|
||||
nutrition = old_nutrition
|
||||
brainloss = braindamage //Gives them half their prior brain damage.
|
||||
update_canmove()
|
||||
setBrainLoss(braindamage)
|
||||
|
||||
//Drop everything
|
||||
for(var/obj/item/W in src)
|
||||
drop_from_inventory(W)
|
||||
spawn(3600 SECONDS) //1 hour wait until you can revive.
|
||||
reviving = FALSE
|
||||
to_chat(src, "Your body has recovered from the strenuous effort of rebuilding itself.")
|
||||
verbs -= /mob/living/carbon/human/proc/hatch
|
||||
return
|
||||
|
||||
/obj/effect/gibspawner/human/scree
|
||||
fleshcolor = "#14AD8B" //Scree blood.
|
||||
//Unfreeze some things
|
||||
does_not_breathe = FALSE
|
||||
update_canmove()
|
||||
weakened = 2
|
||||
|
||||
//Visual effects
|
||||
var/T = get_turf(src)
|
||||
new /obj/effect/gibspawner/human/xenochimera(T)
|
||||
|
||||
reviving = REVIVING_COOLDOWN
|
||||
schedule_callback_in(1 HOUR, VARSET_CALLBACK(src, reviving, 0))
|
||||
|
||||
/obj/effect/gibspawner/human/xenochimera
|
||||
fleshcolor = "#14AD8B"
|
||||
bloodcolor = "#14AD8B"
|
||||
|
||||
/mob/living/carbon/human/proc/getlightlevel() //easier than having the same code in like three places
|
||||
@@ -141,7 +155,7 @@
|
||||
else return 0
|
||||
|
||||
/mob/living/carbon/human/proc/handle_feral()
|
||||
if(handling_hal) return //avoid conflict with actual hallucinations
|
||||
if(handling_hal) return
|
||||
handling_hal = 1
|
||||
|
||||
if(client && feral >= 10) // largely a copy of handle_hallucinations() without the fake attackers. Unlike hallucinations, only fires once - if they're still feral they'll get hit again anyway.
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
tail = "tail" //Scree's tail. Can be disabled in the vore tab by choosing "hide species specific tail sprite"
|
||||
icobase_tail = 1
|
||||
inherent_verbs = list(
|
||||
/mob/living/carbon/human/proc/begin_reconstitute_form,
|
||||
/mob/living/carbon/human/proc/reconstitute_form,
|
||||
/mob/living/carbon/human/proc/sonar_ping,
|
||||
/mob/living/carbon/human/proc/succubus_drain,
|
||||
/mob/living/carbon/human/proc/succubus_drain_finalize,
|
||||
@@ -40,9 +40,9 @@
|
||||
Most, if not all chimeras possess the ability to undergo some type of regeneration process, at the cost of energy."
|
||||
|
||||
hazard_low_pressure = -1 //Prevents them from dying normally in space. Special code handled below.
|
||||
cold_level_1 = -5000 // All cold debuffs are handled below in handle_environment_special
|
||||
cold_level_2 = -5000
|
||||
cold_level_3 = -5000
|
||||
cold_level_1 = -1 // All cold debuffs are handled below in handle_environment_special
|
||||
cold_level_2 = -1
|
||||
cold_level_3 = -1
|
||||
|
||||
//primitive_form = "Farwa"
|
||||
|
||||
@@ -56,142 +56,198 @@
|
||||
|
||||
|
||||
/datum/species/xenochimera/handle_environment_special(var/mob/living/carbon/human/H)
|
||||
if(H.stat == 2) // If they're dead they won't think about being all feral and won't need all the code below.
|
||||
return
|
||||
//If they're KO'd/dead, they're probably not thinking a lot about much of anything.
|
||||
if(!H.stat)
|
||||
handle_feralness(H)
|
||||
|
||||
//handle feral triggers
|
||||
|
||||
if(H.nutrition <= 200||H.traumatic_shock > min(60, H.nutrition/10)) // Stress factors are in play
|
||||
// If they're hungry, give nag messages.
|
||||
if (!istype(H.loc, /mob)) // if they're in a mob, skip the hunger stuff so it doesn't mess with drain/absorption modes.
|
||||
if(H.nutrition < 200 && H.nutrition > 150)
|
||||
if(prob(0.5)) //A bit of an issue, not too bad.
|
||||
H << "<span class='info'>You feel rather hungry. It might be a good idea to find some some food...</span>"
|
||||
|
||||
else if(H.nutrition <= 150 && H.nutrition > 100)
|
||||
if(prob(0.5)) //Getting closer, should probably eat some food about now...
|
||||
H << "<span class='warning'>You feel like you're going to snap and give in to your hunger soon... It would be for the best to find some [pick("food","prey")] to eat...</span>"
|
||||
|
||||
else if(H.nutrition <= 100) //Should've eaten sooner!
|
||||
if(H.feral == 0)
|
||||
H << "<span class='danger'><big>Something in your mind flips, your instincts taking over, no longer able to fully comprehend your surroundings as survival becomes your primary concern - you must feed, survive, there is nothing else. Hunt. Eat. Hide. Repeat.</big></span>"
|
||||
log_and_message_admins("has gone feral due to hunger.", H)
|
||||
H.feral += 5 //just put them over the threshold by a decent amount for the first chunk.
|
||||
if(H.stat == CONSCIOUS)
|
||||
H.emote("twitch")
|
||||
if(H.feral + H.nutrition < 150) //Feralness increases while this hungry, capped at 50-150 depending on hunger.
|
||||
H.feral += 1
|
||||
|
||||
// If they're hurt, chance of snapping. Not if they're straight-up KO'd though.
|
||||
if (H.stat == CONSCIOUS && H.traumatic_shock >=min(60, H.nutrition/10)) //at 360 nutrition, this is 30 brute/burn, or 18 halloss. Capped at 50 brute/30 halloss - if they take THAT much, no amount of satiation will help them. Also they're fat.
|
||||
if (2.5*H.halloss >= H.traumatic_shock) //If the majority of their shock is due to halloss, greater chance of snapping.
|
||||
if(prob(min(10,(0.2 * H.traumatic_shock))))
|
||||
if(H.feral == 0)
|
||||
H << "<span class='danger'><big>The pain! It stings! Got to get away! Your instincts take over, urging you to flee, to hide, to go to ground, get away from here...</big></span>"
|
||||
log_and_message_admins("has gone feral due to halloss.", H)
|
||||
H.feral = max(H.feral, H.halloss) //if already more feral than their halloss justifies, don't increase it.
|
||||
H.emote("twitch")
|
||||
else if(prob(min(10,(0.1 * H.traumatic_shock))))
|
||||
H.emote("twitch")
|
||||
if(H.feral == 0)
|
||||
H << "<span class='danger'><big>Your fight-or-flight response kicks in, your injuries too much to simply ignore - you need to flee, to hide, survive at all costs - or destroy whatever is threatening you.</big></span>"
|
||||
H.feral = 2*H.traumatic_shock //Make 'em snap.
|
||||
log_and_message_admins("has gone feral due to injury.", H)
|
||||
else
|
||||
H.feral = max(H.feral, H.traumatic_shock * 2) //keep feralness up to match the current injury state.
|
||||
|
||||
else if (H.jitteriness >= 100) //No stress factors, but there's coffee. Keeps them mildly feral while they're all jittery.
|
||||
if(H.feral == 0)
|
||||
H << "<span class='warning'><big>Suddenly, something flips - everything that moves is... potential prey. A plaything. This is great! Time to hunt!</big></span>"
|
||||
log_and_message_admins("has gone feral due to jitteriness.", H)
|
||||
if(H.stat == CONSCIOUS)
|
||||
H.emote("twitch")
|
||||
H.feral = max(H.feral, H.jitteriness-100) //they'll be twitchy and pouncy while they're under the influence, and feralness won't wear off until they're calm.
|
||||
//While regenerating
|
||||
if(H.reviving && H.reviving != REVIVING_COOLDOWN)
|
||||
H.weakened = 5
|
||||
H.canmove = 0
|
||||
H.does_not_breathe = TRUE
|
||||
|
||||
//Cold/pressure effects when not regenerating
|
||||
else
|
||||
if (H.feral > 0) //still feral, but all stress factors are gone. Calm them down.
|
||||
H.feral -= 1
|
||||
if (H.feral <=0) //check if they're unferalled
|
||||
H.feral = 0
|
||||
H << "<span class='info'>Your thoughts start clearing, your feral urges having passed - for the time being, at least.</span>"
|
||||
log_and_message_admins("is no longer feral.", H)
|
||||
var/datum/gas_mixture/environment = H.loc.return_air()
|
||||
var/pressure2 = environment.return_pressure()
|
||||
var/adjusted_pressure2 = H.calculate_affecting_pressure(pressure2)
|
||||
|
||||
// handle what happens while feral
|
||||
//Very low pressure damage
|
||||
if(adjusted_pressure2 <= 20)
|
||||
H.take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure")
|
||||
|
||||
if(H.feral > 0) //do the following if feral, otherwise no effects.
|
||||
var/light_amount = H.getlightlevel() //how much light there is in the place
|
||||
//Cold hurts and gives them pain messages, eventually weakening and paralysing, but doesn't damage or trigger feral.
|
||||
//NB: 'body_temperature' used here is the 'setpoint' species var
|
||||
var/temp_diff = body_temperature - H.bodytemperature
|
||||
if(temp_diff >= 50)
|
||||
H.shock_stage = min(H.shock_stage + (temp_diff/20), 160) // Divided by 20 is the same as previous numbers, but a full scale
|
||||
H.eye_blurry = max(5,H.eye_blurry)
|
||||
|
||||
H.shock_stage = max(H.shock_stage-(H.feral/20), 0) //if they lose enough health to hit softcrit, handle_shock() will keep resetting this. Otherwise, pissed off critters will lose shock faster than they gain it.
|
||||
|
||||
if(light_amount <= 0.5) // in the darkness. No need for custom scene-protection checks as it's just an occational infomessage.
|
||||
if(prob(2)) //periodic nagmessages just to remind 'em they're still feral
|
||||
if (H.traumatic_shock >=min(60, H.nutrition/10)) // if hurt, tell 'em to heal up
|
||||
H << "<span class='info'> This place seems safe, secure, hidden, a place to lick your wounds and recover...</span>"
|
||||
else if(H.nutrition <= 100) //If hungry, nag them to go and find someone or something to eat.
|
||||
H << "<span class='info'> Secure in your hiding place, your hunger still gnaws at you. You need to catch some food...</span>"
|
||||
else if(H.jitteriness >= 100)
|
||||
H << "<span class='info'> sneakysneakyyesyesyescleverhidingfindthingsyessssss</span>"
|
||||
else //otherwise, just tell them to keep hiding.
|
||||
H << "<span class='info'> ...safe...</span>"
|
||||
else // must be in a lit area
|
||||
var/list/nearby = oviewers(H)
|
||||
if (nearby.len) // someone's nearby
|
||||
if(prob(1)) // 1 in 100 chance of doing something so as not to interrupt scenes
|
||||
var/mob/M = pick(nearby)
|
||||
if (H.traumatic_shock >=min(60, H.nutrition/10)) //tell 'em to be wary of a random person
|
||||
H << "<span class='danger'> You're hurt, in danger, exposed, and [M] looks to be a little too close for comfort...</span>"
|
||||
else if(H.nutrition <= 250 || H.jitteriness > 0) //tell them a random person in view looks like food. It CAN happen when you're not hungry enough to be feral, especially if coffee is involved.
|
||||
H << "<span class='danger'> Every movement, every flick, every sight and sound has your full attention, your hunting instincts on high alert... In fact, [M] looks extremely appetizing...</span>"
|
||||
if(H.stat == CONSCIOUS)
|
||||
/datum/species/xenochimera/proc/handle_feralness(var/mob/living/carbon/human/H)
|
||||
|
||||
//Low-ish nutrition has messages and eventually feral
|
||||
var/hungry = H.nutrition <= 200
|
||||
|
||||
//At 360 nutrition, this is 30 brute/burn, or 18 halloss. Capped at 50 brute/30 halloss - if they take THAT much, no amount of satiation will help them. Also they're fat.
|
||||
var/shock = H.traumatic_shock > min(60, H.nutrition/10)
|
||||
|
||||
//Caffeinated xenochimera can become feral and have special messages
|
||||
var/jittery = H.jitteriness >= 100
|
||||
|
||||
//To reduce distant object references
|
||||
var/feral = H.feral
|
||||
|
||||
//Handle feral triggers and pre-feral messages
|
||||
if(!feral && (hungry || shock || jittery))
|
||||
|
||||
// If they're hungry, give nag messages (when not bellied)
|
||||
if(H.nutrition >= 100 && prob(0.5) && !isbelly(H.loc))
|
||||
switch(H.nutrition)
|
||||
if(150 to 200)
|
||||
to_chat(H,"<span class='info'>You feel rather hungry. It might be a good idea to find some some food...</span>")
|
||||
if(100 to 150)
|
||||
to_chat(H,"<span class='warning'>You feel like you're going to snap and give in to your hunger soon... It would be for the best to find some [pick("food","prey")] to eat...</span>")
|
||||
|
||||
// Going feral due to hunger
|
||||
else if(H.nutrition < 100 && !isbelly(H.loc))
|
||||
to_chat(H,"<span class='danger'><big>Something in your mind flips, your instincts taking over, no longer able to fully comprehend your surroundings as survival becomes your primary concern - you must feed, survive, there is nothing else. Hunt. Eat. Hide. Repeat.</big></span>")
|
||||
log_and_message_admins("has gone feral due to hunger.", H)
|
||||
feral = 5
|
||||
if(!H.stat)
|
||||
H.emote("twitch")
|
||||
|
||||
// If they're hurt, chance of snapping.
|
||||
else if(shock)
|
||||
|
||||
//If the majority of their shock is due to halloss, greater chance of snapping.
|
||||
if(2.5*H.halloss >= H.traumatic_shock)
|
||||
if(prob(min(10,(0.2 * H.traumatic_shock))))
|
||||
to_chat(H,"<span class='danger'><big>The pain! It stings! Got to get away! Your instincts take over, urging you to flee, to hide, to go to ground, get away from here...</big></span>")
|
||||
log_and_message_admins("has gone feral due to halloss.", H)
|
||||
feral = 5
|
||||
if(!H.stat)
|
||||
H.emote("twitch")
|
||||
|
||||
//Majority due to other damage sources
|
||||
else if(prob(min(10,(0.1 * H.traumatic_shock))))
|
||||
to_chat(H,"<span class='danger'><big>Your fight-or-flight response kicks in, your injuries too much to simply ignore - you need to flee, to hide, survive at all costs - or destroy whatever is threatening you.</big></span>")
|
||||
feral = 5
|
||||
log_and_message_admins("has gone feral due to injury.", H)
|
||||
if(!H.stat)
|
||||
H.emote("twitch")
|
||||
|
||||
//No hungry or shock, but jittery
|
||||
else if(jittery)
|
||||
to_chat(H,"<span class='warning'><big>Suddenly, something flips - everything that moves is... potential prey. A plaything. This is great! Time to hunt!</big></span>")
|
||||
feral = 5
|
||||
log_and_message_admins("has gone feral due to jitteriness.", H)
|
||||
if(!H.stat)
|
||||
H.emote("twitch")
|
||||
|
||||
// Handle being feral
|
||||
if(feral)
|
||||
|
||||
//Shock due to mostly halloss. More feral.
|
||||
if(shock && 2.5*H.halloss >= H.traumatic_shock)
|
||||
feral = max(feral, H.halloss)
|
||||
|
||||
//Shock due to mostly injury. More feral.
|
||||
else if(shock)
|
||||
feral = max(feral, H.traumatic_shock * 2)
|
||||
|
||||
//Still jittery? More feral.
|
||||
if(jittery)
|
||||
feral = max(feral, H.jitteriness-100)
|
||||
|
||||
//Still hungry? More feral.
|
||||
if(H.feral + H.nutrition < 150)
|
||||
feral++
|
||||
else
|
||||
feral = max(0,--feral)
|
||||
|
||||
//Set our real mob's var to our temp var
|
||||
H.feral = feral
|
||||
|
||||
//Did we just finish being feral?
|
||||
if(!feral)
|
||||
to_chat(H,"<span class='info'>Your thoughts start clearing, your feral urges having passed - for the time being, at least.</span>")
|
||||
log_and_message_admins("is no longer feral.", H)
|
||||
return
|
||||
|
||||
//If they lose enough health to hit softcrit, handle_shock() will keep resetting this. Otherwise, pissed off critters will lose shock faster than they gain it.
|
||||
H.shock_stage = max(H.shock_stage-(feral/20), 0)
|
||||
|
||||
//Handle light/dark areas
|
||||
var/turf/T = get_turf(H)
|
||||
if(!T)
|
||||
return //Nullspace
|
||||
var/darkish = T.get_lumcount() <= 0.1
|
||||
|
||||
//Don't bother doing heavy lifting if we weren't going to give emotes anyway.
|
||||
if(!prob(1))
|
||||
|
||||
//This is basically the 'lite' version of the below block.
|
||||
var/list/nearby = H.living_mobs(world.view)
|
||||
|
||||
//Not in the dark and out in the open.
|
||||
if(!darkish && isturf(H.loc))
|
||||
|
||||
//Always handle feral if nobody's around and not in the dark.
|
||||
if(!nearby.len)
|
||||
H.handle_feral()
|
||||
else // nobody around
|
||||
H.handle_feral()
|
||||
if(prob(2)) //periodic nagmessages
|
||||
if(H.nutrition <= 100) //If hungry, nag them to go and find someone or something to eat.
|
||||
H << "<span class='danger'> Confusing sights and sounds and smells surround you - scary and disorienting it may be, but the drive to hunt, to feed, to survive, compels you.</span>"
|
||||
if(H.stat == CONSCIOUS)
|
||||
H.emote("twitch")
|
||||
else if(H.jitteriness >= 100)
|
||||
H << "<span class='danger'> yesyesyesyesyesyesgetthethingGETTHETHINGfindfoodsfindpreypounceyesyesyes</span>"
|
||||
if(H.stat == CONSCIOUS)
|
||||
H.emote("twitch")
|
||||
else //otherwise, just tell them to hide.
|
||||
H << "<span class='danger'> Confusing sights and sounds and smells surround you, this place is wrong, confusing, frightening. You need to hide, go to ground...</span>"
|
||||
if(H.stat == CONSCIOUS)
|
||||
H.emote("twitch")
|
||||
|
||||
//Rarely handle feral if someone is around
|
||||
else if(prob(1))
|
||||
H.handle_feral()
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////WIP CODE TO MAKE XENOCHIMERAS NOT DIE IN SPACE WHILE REGENNING BELOW/////////// //I put WIP, but what I really meant to put was "Finished"
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
//And bail
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/environment = H.loc.return_air()
|
||||
var/pressure2 = environment.return_pressure()
|
||||
var/adjusted_pressure2 = H.calculate_affecting_pressure(pressure2)
|
||||
// In the darkness or "hidden". No need for custom scene-protection checks as it's just an occational infomessage.
|
||||
if(darkish || !isturf(H.loc))
|
||||
// If hurt, tell 'em to heal up
|
||||
if (shock)
|
||||
to_chat(H,"<span class='info'>This place seems safe, secure, hidden, a place to lick your wounds and recover...</span>")
|
||||
|
||||
if(adjusted_pressure2 <= 20 && H.does_not_breathe) //If they're in a enviroment with no pressure and are not breathing (See: regenerating), don't kill them.
|
||||
//This is just to prevent them from taking damage if they're in stasis.
|
||||
//If hungry, nag them to go and find someone or something to eat.
|
||||
else if(hungry)
|
||||
to_chat(H,"<span class='info'>Secure in your hiding place, your hunger still gnaws at you. You need to catch some food...</span>")
|
||||
|
||||
else if(adjusted_pressure2 <= 20) //If they're in an enviroment with no pressure and are NOT in stasis, damage them.
|
||||
H.take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure")
|
||||
//If jittery, etc
|
||||
else if(jittery)
|
||||
to_chat(H,"<span class='info'>sneakysneakyyesyesyescleverhidingfindthingsyessssss</span>")
|
||||
|
||||
if(H.bodytemperature <= 260 && H.does_not_breathe) //If they're regenerating, don't give them them the negative cold effects
|
||||
//This is just here to prevent them from getting cold effects
|
||||
//Otherwise, just tell them to keep hiding.
|
||||
else
|
||||
to_chat(H,"<span class='info'>...safe...</span>")
|
||||
|
||||
// NOT in the darkness
|
||||
else
|
||||
|
||||
//Twitch twitch
|
||||
if(!H.stat)
|
||||
H.emote("twitch")
|
||||
|
||||
var/list/nearby = H.living_mobs(world.view)
|
||||
|
||||
// Someone/something nearby
|
||||
if(nearby.len)
|
||||
var/M = pick(nearby)
|
||||
if(shock)
|
||||
to_chat(H,"<span class='danger'>You're hurt, in danger, exposed, and [M] looks to be a little too close for comfort...</span>")
|
||||
else if(hungry || jittery)
|
||||
to_chat(H,"<span class='danger'>Every movement, every flick, every sight and sound has your full attention, your hunting instincts on high alert... In fact, [M] looks extremely appetizing...</span>")
|
||||
|
||||
// Nobody around
|
||||
else
|
||||
if(hungry)
|
||||
to_chat(H,"<span class='danger'>Confusing sights and sounds and smells surround you - scary and disorienting it may be, but the drive to hunt, to feed, to survive, compels you.</span>")
|
||||
else if(jittery)
|
||||
to_chat(H,"<span class='danger'>yesyesyesyesyesyesgetthethingGETTHETHINGfindfoodsfindpreypounceyesyesyes</span>")
|
||||
else
|
||||
to_chat(H,"<span class='danger'>Confusing sights and sounds and smells surround you, this place is wrong, confusing, frightening. You need to hide, go to ground...</span>")
|
||||
|
||||
else if(H.bodytemperature <= 260) //If they're not in stasis and are cold. Don't really have to add in an exception to cryo cells, as the effects aren't anything /too/ horrible.
|
||||
var/coldshock = 0
|
||||
if(H.bodytemperature <= 260 && H.bodytemperature >= 200) //Chilly.
|
||||
coldshock = 4 //This will begin to knock them out until they run out of oxygen and suffocate or until someone finds them.
|
||||
H.eye_blurry = 5 //Blurry vision in the cold.
|
||||
if(H.bodytemperature <= 199 && H.bodytemperature >= 100) //Extremely cold. Even in somewhere like the server room it takes a while for bodytemp to drop this low.
|
||||
coldshock = 8
|
||||
H.eye_blurry = 5
|
||||
if(H.bodytemperature <= 99) //Insanely cold.
|
||||
coldshock = 16
|
||||
H.eye_blurry = 5
|
||||
H.shock_stage = min(H.shock_stage + coldshock, 160) //cold hurts and gives them pain messages, eventually weakening and paralysing, but doesn't damage or trigger feral.
|
||||
return
|
||||
|
||||
/datum/species/xenochimera/proc/produceCopy(var/datum/species/to_copy,var/list/traits,var/mob/living/carbon/human/H)
|
||||
ASSERT(to_copy)
|
||||
@@ -272,10 +328,10 @@
|
||||
Before they were found they built great cities out of their silk, being united and subjugated in warring factions under great Star Queens \
|
||||
Who forced the working class to build huge, towering cities to attempt to reach the stars, which they worship as gems of great spiritual and magical significance."
|
||||
|
||||
hazard_low_pressure = -1 //Prevents them from dying normally in space. Special code handled below.
|
||||
cold_level_1 = -5000 // All cold debuffs are handled below in handle_environment_special
|
||||
cold_level_2 = -5000
|
||||
cold_level_3 = -5000
|
||||
hazard_low_pressure = 20 //Prevents them from dying normally in space. Special code handled below.
|
||||
cold_level_1 = -1 // All cold debuffs are handled below in handle_environment_special
|
||||
cold_level_2 = -1
|
||||
cold_level_3 = -1
|
||||
|
||||
//primitive_form = "Monkey" //I dunno. Replace this in the future.
|
||||
|
||||
@@ -288,16 +344,9 @@
|
||||
blood_color = "#0952EF" //Spiders have blue blood.
|
||||
|
||||
/datum/species/spider/handle_environment_special(var/mob/living/carbon/human/H)
|
||||
if(H.stat == 2) // If they're dead they won't need anything.
|
||||
if(H.stat == DEAD) // If they're dead they won't need anything.
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/environment = H.loc.return_air()
|
||||
var/pressure2 = environment.return_pressure()
|
||||
var/adjusted_pressure2 = H.calculate_affecting_pressure(pressure2)
|
||||
|
||||
if(adjusted_pressure2 <= 20) //If they're in an enviroment with no pressure and are NOT in stasis, like a stasis bodybag, damage them.
|
||||
H.take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure")
|
||||
|
||||
if(H.bodytemperature <= 260) //If they're really cold, they go into stasis.
|
||||
var/coldshock = 0
|
||||
if(H.bodytemperature <= 260 && H.bodytemperature >= 200) //Chilly.
|
||||
|
||||
@@ -567,7 +567,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
return //Wearing a suit that prevents uniform rendering
|
||||
|
||||
//Build a uniform sprite
|
||||
overlays_standing[UNIFORM_LAYER] = w_uniform.make_worn_icon(body_type = species.get_bodytype(), slot_name = slot_w_uniform_str, default_icon = INV_W_UNIFORM_DEF_ICON, default_layer = UNIFORM_LAYER)
|
||||
overlays_standing[UNIFORM_LAYER] = w_uniform.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_w_uniform_str, default_icon = INV_W_UNIFORM_DEF_ICON, default_layer = UNIFORM_LAYER)
|
||||
apply_layer(UNIFORM_LAYER)
|
||||
|
||||
/mob/living/carbon/human/update_inv_wear_id()
|
||||
@@ -583,7 +583,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(w_uniform && istype(w_uniform, /obj/item/clothing/under))
|
||||
var/obj/item/clothing/under/U = w_uniform
|
||||
if(U.displays_id)
|
||||
overlays_standing[ID_LAYER] = wear_id.make_worn_icon(body_type = species.get_bodytype(), slot_name = slot_wear_id_str, default_icon = INV_WEAR_ID_DEF_ICON, default_layer = ID_LAYER)
|
||||
overlays_standing[ID_LAYER] = wear_id.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_wear_id_str, default_icon = INV_WEAR_ID_DEF_ICON, default_layer = ID_LAYER)
|
||||
|
||||
apply_layer(ID_LAYER)
|
||||
|
||||
@@ -596,7 +596,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(!gloves)
|
||||
return //No gloves, no reason to be here.
|
||||
|
||||
overlays_standing[GLOVES_LAYER] = gloves.make_worn_icon(body_type = species.get_bodytype(), slot_name = slot_gloves_str, default_icon = INV_GLOVES_DEF_ICON, default_layer = GLOVES_LAYER)
|
||||
overlays_standing[GLOVES_LAYER] = gloves.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_gloves_str, default_icon = INV_GLOVES_DEF_ICON, default_layer = GLOVES_LAYER)
|
||||
|
||||
apply_layer(GLOVES_LAYER)
|
||||
|
||||
@@ -609,7 +609,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(!glasses)
|
||||
return //Not wearing glasses, no need to update anything.
|
||||
|
||||
overlays_standing[GLASSES_LAYER] = glasses.make_worn_icon(body_type = species.get_bodytype(), slot_name = slot_gloves_str, default_icon = INV_EYES_DEF_ICON, default_layer = GLASSES_LAYER)
|
||||
overlays_standing[GLASSES_LAYER] = glasses.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_gloves_str, default_icon = INV_EYES_DEF_ICON, default_layer = GLASSES_LAYER)
|
||||
|
||||
apply_layer(GLASSES_LAYER)
|
||||
|
||||
@@ -629,11 +629,11 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
var/image/both = image(icon = 'icons/effects/effects.dmi', icon_state = "nothing", layer = BODY_LAYER+EARS_LAYER)
|
||||
|
||||
if(l_ear)
|
||||
var/image/standing = l_ear.make_worn_icon(body_type = species.get_bodytype(), slot_name = slot_l_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER)
|
||||
var/image/standing = l_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_l_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER)
|
||||
both.add_overlay(standing)
|
||||
|
||||
if(r_ear)
|
||||
var/image/standing = r_ear.make_worn_icon(body_type = species.get_bodytype(), slot_name = slot_r_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER)
|
||||
var/image/standing = r_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_r_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER)
|
||||
both.add_overlay(standing)
|
||||
|
||||
overlays_standing[EARS_LAYER] = both
|
||||
@@ -657,7 +657,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
shoe_layer = SHOES_LAYER_ALT
|
||||
|
||||
//NB: the use of a var for the layer on this one
|
||||
overlays_standing[shoe_layer] = shoes.make_worn_icon(body_type = species.get_bodytype(), slot_name = slot_shoes_str, default_icon = INV_FEET_DEF_ICON, default_layer = shoe_layer)
|
||||
overlays_standing[shoe_layer] = shoes.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_shoes_str, default_icon = INV_FEET_DEF_ICON, default_layer = shoe_layer)
|
||||
|
||||
apply_layer(SHOES_LAYER)
|
||||
apply_layer(SHOES_LAYER_ALT)
|
||||
@@ -689,7 +689,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(!head)
|
||||
return //No head item, why bother.
|
||||
|
||||
overlays_standing[HEAD_LAYER] = head.make_worn_icon(body_type = species.get_bodytype(), slot_name = slot_head_str, default_icon = INV_HEAD_DEF_ICON, default_layer = HEAD_LAYER)
|
||||
overlays_standing[HEAD_LAYER] = head.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_head_str, default_icon = INV_HEAD_DEF_ICON, default_layer = HEAD_LAYER)
|
||||
|
||||
apply_layer(HEAD_LAYER)
|
||||
|
||||
@@ -711,7 +711,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
belt_layer = BELT_LAYER_ALT
|
||||
|
||||
//NB: this uses a var from above
|
||||
overlays_standing[belt_layer] = belt.make_worn_icon(body_type = species.get_bodytype(), slot_name = slot_belt_str, default_icon = INV_BELT_DEF_ICON, default_layer = belt_layer)
|
||||
overlays_standing[belt_layer] = belt.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_belt_str, default_icon = INV_BELT_DEF_ICON, default_layer = belt_layer)
|
||||
|
||||
apply_layer(belt_layer)
|
||||
|
||||
@@ -730,7 +730,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(!wear_suit)
|
||||
return //No point, no suit.
|
||||
|
||||
overlays_standing[SUIT_LAYER] = wear_suit.make_worn_icon(body_type = species.get_bodytype(), slot_name = slot_wear_suit_str, default_icon = INV_SUIT_DEF_ICON, default_layer = SUIT_LAYER)
|
||||
overlays_standing[SUIT_LAYER] = wear_suit.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_wear_suit_str, default_icon = INV_SUIT_DEF_ICON, default_layer = SUIT_LAYER)
|
||||
|
||||
apply_layer(SUIT_LAYER)
|
||||
|
||||
@@ -746,7 +746,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(!wear_mask || (head && head.flags_inv & HIDEMASK))
|
||||
return //Why bother, nothing in mask slot.
|
||||
|
||||
overlays_standing[FACEMASK_LAYER] = wear_mask.make_worn_icon(body_type = species.get_bodytype(), slot_name = slot_wear_mask_str, default_icon = INV_MASK_DEF_ICON, default_layer = FACEMASK_LAYER)
|
||||
overlays_standing[FACEMASK_LAYER] = wear_mask.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_wear_mask_str, default_icon = INV_MASK_DEF_ICON, default_layer = FACEMASK_LAYER)
|
||||
|
||||
apply_layer(FACEMASK_LAYER)
|
||||
|
||||
@@ -759,7 +759,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(!back)
|
||||
return //Why do anything
|
||||
|
||||
overlays_standing[BACK_LAYER] = back.make_worn_icon(body_type = species.get_bodytype(), slot_name = slot_back_str, default_icon = INV_BACK_DEF_ICON, default_layer = BACK_LAYER)
|
||||
overlays_standing[BACK_LAYER] = back.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_back_str, default_icon = INV_BACK_DEF_ICON, default_layer = BACK_LAYER)
|
||||
|
||||
apply_layer(BACK_LAYER)
|
||||
|
||||
@@ -792,7 +792,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(!handcuffed)
|
||||
return //Not cuffed, why bother
|
||||
|
||||
overlays_standing[HANDCUFF_LAYER] = handcuffed.make_worn_icon(body_type = species.get_bodytype(), slot_name = slot_handcuffed_str, default_icon = INV_HCUFF_DEF_ICON, default_layer = HANDCUFF_LAYER)
|
||||
overlays_standing[HANDCUFF_LAYER] = handcuffed.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_handcuffed_str, default_icon = INV_HCUFF_DEF_ICON, default_layer = HANDCUFF_LAYER)
|
||||
|
||||
apply_layer(HANDCUFF_LAYER)
|
||||
|
||||
@@ -805,7 +805,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(!legcuffed)
|
||||
return //Not legcuffed, why bother.
|
||||
|
||||
overlays_standing[LEGCUFF_LAYER] = legcuffed.make_worn_icon(body_type = species.get_bodytype(), slot_name = slot_legcuffed_str, default_icon = INV_LCUFF_DEF_ICON, default_layer = LEGCUFF_LAYER)
|
||||
overlays_standing[LEGCUFF_LAYER] = legcuffed.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_legcuffed_str, default_icon = INV_LCUFF_DEF_ICON, default_layer = LEGCUFF_LAYER)
|
||||
|
||||
apply_layer(LEGCUFF_LAYER)
|
||||
|
||||
@@ -818,7 +818,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(!r_hand)
|
||||
return //No hand, no bother.
|
||||
|
||||
overlays_standing[R_HAND_LAYER] = r_hand.make_worn_icon(body_type = species.get_bodytype(), inhands = TRUE, slot_name = slot_r_hand_str, default_icon = INV_R_HAND_DEF_ICON, default_layer = R_HAND_LAYER)
|
||||
overlays_standing[R_HAND_LAYER] = r_hand.make_worn_icon(body_type = species.get_bodytype(src), inhands = TRUE, slot_name = slot_r_hand_str, default_icon = INV_R_HAND_DEF_ICON, default_layer = R_HAND_LAYER)
|
||||
|
||||
apply_layer(R_HAND_LAYER)
|
||||
|
||||
@@ -831,7 +831,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(!l_hand)
|
||||
return //No hand, no bother.
|
||||
|
||||
overlays_standing[L_HAND_LAYER] = l_hand.make_worn_icon(body_type = species.get_bodytype(), inhands = TRUE, slot_name = slot_l_hand_str, default_icon = INV_L_HAND_DEF_ICON, default_layer = L_HAND_LAYER)
|
||||
overlays_standing[L_HAND_LAYER] = l_hand.make_worn_icon(body_type = species.get_bodytype(src), inhands = TRUE, slot_name = slot_l_hand_str, default_icon = INV_L_HAND_DEF_ICON, default_layer = L_HAND_LAYER)
|
||||
|
||||
apply_layer(L_HAND_LAYER)
|
||||
|
||||
|
||||
@@ -48,6 +48,12 @@
|
||||
..()
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/mimic/MouseEntered(location, control, params)
|
||||
..()
|
||||
closeToolTip(usr)
|
||||
// ideally, we'd remove the code in ..() that opens the tooltip,
|
||||
// but then we'd need to duplicate all the other code in ..()
|
||||
|
||||
//
|
||||
// Crate Mimic
|
||||
//
|
||||
@@ -194,4 +200,4 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
|
||||
if(istype(L))
|
||||
if(prob(15))
|
||||
L.Weaken(1)
|
||||
L.visible_message("<span class='danger'>\the [src] knocks down \the [L]!</span>")
|
||||
L.visible_message("<span class='danger'>\the [src] knocks down \the [L]!</span>")
|
||||
|
||||
@@ -756,6 +756,7 @@
|
||||
/mob/living/simple_animal/death(gibbed, deathmessage = "dies!")
|
||||
density = 0 //We don't block even if we did before
|
||||
walk(src, 0) //We stop any background-processing walks
|
||||
resting = 0 //We can rest in peace later.
|
||||
|
||||
if(faction_friends.len)
|
||||
faction_friends -= src
|
||||
|
||||
@@ -47,8 +47,10 @@
|
||||
max_n2 = 0
|
||||
minbodytemp = 150
|
||||
maxbodytemp = 900
|
||||
|
||||
var/image/eye_layer = null
|
||||
|
||||
|
||||
vore_active = TRUE
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 15
|
||||
@@ -110,4 +112,4 @@
|
||||
. = ..()
|
||||
remove_eyes()
|
||||
if(stat == CONSCIOUS && !resting)
|
||||
add_eyes()
|
||||
add_eyes()
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
/mob/living/simple_animal/hostile/rous
|
||||
/mob/living/simple_animal/hostile/rat
|
||||
name = "giant rat"
|
||||
desc = "In what passes for a hierarchy among verminous rodents, this one is king."
|
||||
tt_desc = "Mus muscular"
|
||||
@@ -41,6 +41,6 @@
|
||||
vore_pounce_chance = 45
|
||||
vore_icons = SA_ICON_LIVING | SA_ICON_REST
|
||||
|
||||
/mob/living/simple_animal/hostile/rous/death()
|
||||
/mob/living/simple_animal/hostile/rat/death()
|
||||
playsound(src, 'sound/effects/mouse_squeak_loud.ogg', 50, 1)
|
||||
..()
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
/mob/living/simple_animal/wah
|
||||
/mob/living/simple_animal/redpanda
|
||||
name = "red panda"
|
||||
desc = "It's a wah! Beware of doom pounce!"
|
||||
tt_desc = "Ailurus fulgens"
|
||||
@@ -29,7 +29,7 @@
|
||||
emote_see = list("trundles around","rears up onto their hind legs and pounces a bug")
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_animal/wah
|
||||
/mob/living/simple_animal/redpanda
|
||||
vore_active = 1
|
||||
vore_bump_chance = 10
|
||||
vore_bump_emote = "playfully lunges at"
|
||||
@@ -37,7 +37,7 @@
|
||||
vore_default_mode = DM_HOLD // above will only matter if someone toggles it anyway
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
/mob/living/simple_animal/wah/fae
|
||||
/mob/living/simple_animal/redpanda/fae
|
||||
name = "dark wah"
|
||||
desc = "Ominous, but still cute!"
|
||||
tt_desc = "Ailurus brattus"
|
||||
Reference in New Issue
Block a user