This commit is contained in:
Ghommie
2019-11-19 18:00:56 +01:00
parent a52e292cc8
commit dd101ef221
113 changed files with 519 additions and 552 deletions

View File

@@ -862,9 +862,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
change_mob_type( /mob/living/carbon/human , null, null, TRUE) //always delmob, ghosts shouldn't be left lingering
/mob/dead/observer/examine(mob/user)
..()
. = ..()
if(!invisibility)
to_chat(user, "It seems extremely obvious.")
. += "It seems extremely obvious."
/mob/dead/observer/proc/set_invisibility(value)
invisibility = value

View File

@@ -188,17 +188,17 @@
qdel(src)
/obj/item/mmi/examine(mob/user)
..()
. = ..()
if(brainmob)
var/mob/living/brain/B = brainmob
if(!B.key || !B.mind || B.stat == DEAD)
to_chat(user, "<span class='warning'>The MMI indicates the brain is completely unresponsive.</span>")
. += "<span class='warning'>The MMI indicates the brain is completely unresponsive.</span>"
else if(!B.client)
to_chat(user, "<span class='warning'>The MMI indicates the brain is currently inactive; it might change.</span>")
. += "<span class='warning'>The MMI indicates the brain is currently inactive; it might change.</span>"
else
to_chat(user, "<span class='notice'>The MMI indicates the brain is active.</span>")
. += "<span class='notice'>The MMI indicates the brain is active.</span>"
/obj/item/mmi/relaymove(mob/user)
return //so that the MMI won't get a warning about not being able to move if it tries to move

View File

@@ -157,7 +157,7 @@
/obj/item/organ/brain/examine(mob/user)//BUG_PROBABLE_CAUSE to_chats changed to . +=
/obj/item/organ/brain/examine(mob/user)
. = ..()
if(user.suiciding)

View File

@@ -161,7 +161,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
else
msg = "[dead_message]"
to_chat(user, msg)
. += msg
/obj/item/mmi/posibrain/Initialize()
. = ..()

View File

@@ -71,16 +71,16 @@
Leap(M)
/obj/item/clothing/mask/facehugger/examine(mob/user)
..()
. = ..()
if(!real)//So that giant red text about probisci doesn't show up.
return
switch(stat)
if(DEAD,UNCONSCIOUS)
to_chat(user, "<span class='boldannounce'>[src] is not moving.</span>")
. += "<span class='boldannounce'>[src] is not moving.</span>"
if(CONSCIOUS)
to_chat(user, "<span class='boldannounce'>[src] seems to be active!</span>")
. += "<span class='boldannounce'>[src] seems to be active!</span>"
if (sterile)
to_chat(user, "<span class='boldannounce'>It looks like the proboscis has been removed.</span>")
. += "<span class='boldannounce'>It looks like the proboscis has been removed.</span>"
/obj/item/clothing/mask/facehugger/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)

View File

@@ -6,39 +6,39 @@
var/t_has = p_have()
var/t_is = p_are()
var/msg = "<span class='info'>*---------*\nThis is [icon2html(src, user)] \a <EM>[src]</EM>!\n"
. = list("<span class='info'>*---------*\nThis is [icon2html(src, user)] \a <EM>[src]</EM>!")
if (handcuffed)
msg += "<span class='warning'>[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!</span>\n"
. += "<span class='warning'>[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!</span>"
if (head)
msg += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head. \n"
. += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head."
if (wear_mask)
msg += "[t_He] [t_is] wearing [wear_mask.get_examine_string(user)] on [t_his] face.\n"
. += "[t_He] [t_is] wearing [wear_mask.get_examine_string(user)] on [t_his] face."
if (wear_neck)
msg += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck.\n"
. += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck."
for(var/obj/item/I in held_items)
if(!(I.item_flags & ABSTRACT))
msg += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n"
. += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))]."
if (back)
msg += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back.\n"
. += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back."
var/appears_dead = 0
if (stat == DEAD)
appears_dead = 1
if(getorgan(/obj/item/organ/brain))
msg += "<span class='deadsay'>[t_He] [t_is] limp and unresponsive, with no signs of life.</span>\n"
. += "<span class='deadsay'>[t_He] [t_is] limp and unresponsive, with no signs of life.</span>"
else if(get_bodypart(BODY_ZONE_HEAD))
msg += "<span class='deadsay'>It appears that [t_his] brain is missing...</span>\n"
. += "<span class='deadsay'>It appears that [t_his] brain is missing...</span>"
var/list/missing = get_missing_limbs()
for(var/t in missing)
if(t==BODY_ZONE_HEAD)
msg += "<span class='deadsay'><B>[t_His] [parse_zone(t)] is missing!</B></span>\n"
. += "<span class='deadsay'><B>[t_His] [parse_zone(t)] is missing!</B></span>"
continue
msg += "<span class='warning'><B>[t_His] [parse_zone(t)] is missing!</B></span>\n"
. += "<span class='warning'><B>[t_His] [parse_zone(t)] is missing!</B></span>"
msg += "<span class='warning'>"
var/list/msg = list("<span class='warning'>")
var/temp = getBruteLoss()
if(!(user == src && src.hal_screwyhud == SCREWYHUD_HEALTHY)) //fake healthy
if(temp)
@@ -80,35 +80,37 @@
msg += "</span>"
. += msg.Join("")
if(!appears_dead)
if(stat == UNCONSCIOUS)
msg += "[t_He] [t_is]n't responding to anything around [t_him] and seems to be asleep.\n"
. += "[t_He] [t_is]n't responding to anything around [t_him] and seems to be asleep."
else if(InCritical())
msg += "[t_His] breathing is shallow and labored.\n"
. += "[t_His] breathing is shallow and labored."
if(digitalcamo)
msg += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly unsimian manner.\n"
. += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly unsimian manner."
if(combatmode)
msg += "[t_He] [t_is] visibly tense[resting ? "." : ", and [t_is] standing in combative stance."]\n"
msg += common_trait_examine()
. += "[t_He] [t_is] visibly tense[resting ? "." : ", and [t_is] standing in combative stance."]"
var/trait_exam = common_trait_examine()
if (!isnull(trait_exam))
. += trait_exam
var/datum/component/mood/mood = src.GetComponent(/datum/component/mood)
if(mood)
switch(mood.shown_mood)
if(-INFINITY to MOOD_LEVEL_SAD4)
msg += "[t_He] look[p_s()] depressed.\n"
. += "[t_He] look[p_s()] depressed."
if(MOOD_LEVEL_SAD4 to MOOD_LEVEL_SAD3)
msg += "[t_He] look[p_s()] very sad.\n"
. += "[t_He] look[p_s()] very sad."
if(MOOD_LEVEL_SAD3 to MOOD_LEVEL_SAD2)
msg += "[t_He] look[p_s()] a bit down.\n"
. += "[t_He] look[p_s()] a bit down."
if(MOOD_LEVEL_HAPPY2 to MOOD_LEVEL_HAPPY3)
msg += "[t_He] look[p_s()] quite happy.\n"
. += "[t_He] look[p_s()] quite happy."
if(MOOD_LEVEL_HAPPY3 to MOOD_LEVEL_HAPPY4)
msg += "[t_He] look[p_s()] very happy.\n"
. += "[t_He] look[p_s()] very happy."
if(MOOD_LEVEL_HAPPY4 to INFINITY)
msg += "[t_He] look[p_s()] ecstatic.\n"
msg += "*---------*</span>"
to_chat(user, msg)
return msg
. += "[t_He] look[p_s()] ecstatic."
. += "*---------*</span>"

View File

@@ -13,7 +13,7 @@
if(HAS_TRAIT(L, TRAIT_PROSOPAGNOSIA))
obscure_name = TRUE
var/msg = "<span class='info'>*---------*\nThis is <EM>[!obscure_name ? name : "Unknown"]</EM>!\n"
. = list("<span class='info'>*---------*\nThis is <EM>[!obscure_name ? name : "Unknown"]</EM>!)"
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
@@ -22,11 +22,11 @@
var/mob/living/carbon/human/H = src
var/datum/species/pref_species = H.dna.species
if(get_visible_name() == "Unknown") // same as flavor text, but hey it works.
msg += "You can't make out what species they are.\n"
. += "You can't make out what species they are."
else if(skipface)
msg += "You can't make out what species they are.\n"
. += "You can't make out what species they are."
else
msg += "[t_He] [t_is] a [H.dna.custom_species ? H.dna.custom_species : pref_species.name]!\n"
. += "[t_He] [t_is] a [H.dna.custom_species ? H.dna.custom_species : pref_species.name]!"
//uniform
if(w_uniform && !(SLOT_W_UNIFORM in obscured))
@@ -37,121 +37,115 @@
if(U.attached_accessory)
accessory_msg += " with [icon2html(U.attached_accessory, user)] \a [U.attached_accessory]"
msg += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_msg].\n"
. += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_msg]."
//head
if(head)
msg += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head.\n"
. += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head."
//suit/armor
if(wear_suit)
msg += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)].\n"
. += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)]."
//suit/armor storage
if(s_store && !(SLOT_S_STORE in obscured))
msg += "[t_He] [t_is] carrying [s_store.get_examine_string(user)] on [t_his] [wear_suit.name].\n"
. += "[t_He] [t_is] carrying [s_store.get_examine_string(user)] on [t_his] [wear_suit.name]."
//back
if(back)
msg += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back.\n"
. += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back."
//Hands
for(var/obj/item/I in held_items)
if(!(I.item_flags & ABSTRACT))
msg += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n"
. += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))]."
//gloves
if(gloves && !(SLOT_GLOVES in obscured))
msg += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands.\n"
. += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands."
else if(length(blood_DNA))
var/hand_number = get_num_arms(FALSE)
if(hand_number)
msg += "<span class='warning'>[t_He] [t_has] [hand_number > 1 ? "" : "a"] blood-stained hand[hand_number > 1 ? "s" : ""]!</span>\n"
//handcuffed?
. += "<span class='warning'>[t_He] [t_has] [hand_number > 1 ? "" : "a"] blood-stained hand[hand_number > 1 ? "s" : ""]!</span>"
//handcuffed?
if(handcuffed)
if(istype(handcuffed, /obj/item/restraints/handcuffs/cable))
msg += "<span class='warning'>[t_He] [t_is] [icon2html(handcuffed, user)] restrained with cable!</span>\n"
. += "<span class='warning'>[t_He] [t_is] [icon2html(handcuffed, user)] restrained with cable!</span>"
else
msg += "<span class='warning'>[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!</span>\n"
. += "<span class='warning'>[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!</span>"
//belt
if(belt)
msg += "[t_He] [t_has] [belt.get_examine_string(user)] about [t_his] waist.\n"
. += "[t_He] [t_has] [belt.get_examine_string(user)] about [t_his] waist."
//shoes
if(shoes && !(SLOT_SHOES in obscured))
msg += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet.\n"
. += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet."
//mask
if(wear_mask && !(SLOT_WEAR_MASK in obscured))
msg += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face.\n"
. += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face."
if(wear_neck && !(SLOT_NECK in obscured))
msg += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck.\n"
. += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck."
//eyes
if(!(SLOT_GLASSES in obscured))
if(glasses)
msg += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes.\n"
. += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes."
else if(eye_color == BLOODCULT_EYE && iscultist(src) && HAS_TRAIT(src, TRAIT_CULT_EYES))
msg += "<span class='warning'><B>[t_His] eyes are glowing an unnatural red!</B></span>\n"
. += "<span class='warning'><B>[t_His] eyes are glowing an unnatural red!</B></span>"
//ears
if(ears && !(SLOT_EARS in obscured))
msg += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] ears.\n"
. += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] ears."
//ID
if(wear_id)
msg += "[t_He] [t_is] wearing [wear_id.get_examine_string(user)].\n"
. += "[t_He] [t_is] wearing [wear_id.get_examine_string(user)]."
//Status effects
msg += status_effect_examines()
var/effects_exam = status_effect_examines()
if(!isnull(effects_exam))
. += effects_exam
//CIT CHANGES START HERE - adds genital details to examine text
if(LAZYLEN(internal_organs))
for(var/obj/item/organ/genital/dicc in internal_organs)
if(istype(dicc) && dicc.is_exposed())
msg += "[dicc.desc]\n"
. += "[dicc.desc]"
msg += attempt_vr(src,"examine_bellies",args) //vore Code
var/cursed_stuff = attempt_vr(src,"examine_bellies",args) //vore Code
if(!isnull(cursed_stuff))
. += cursed_stuff
//END OF CIT CHANGES
//Jitters
switch(jitteriness)
if(300 to INFINITY)
msg += "<span class='warning'><B>[t_He] [t_is] convulsing violently!</B></span>\n"
. += "<span class='warning'><B>[t_He] [t_is] convulsing violently!</B></span>"
if(200 to 300)
msg += "<span class='warning'>[t_He] [t_is] extremely jittery.</span>\n"
. += "<span class='warning'>[t_He] [t_is] extremely jittery.</span>"
if(100 to 200)
msg += "<span class='warning'>[t_He] [t_is] twitching ever so slightly.</span>\n"
. += "<span class='warning'>[t_He] [t_is] twitching ever so slightly.</span>"
var/appears_dead = 0
if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH)))
appears_dead = 1
if(suiciding)
msg += "<span class='warning'>[t_He] appear[p_s()] to have committed suicide... there is no hope of recovery.</span>\n"
. += "<span class='warning'>[t_He] appear[p_s()] to have committed suicide... there is no hope of recovery.</span>"
if(hellbound)
msg += "<span class='warning'>[t_His] soul seems to have been ripped out of [t_his] body. Revival is impossible.</span>\n"
msg += "<span class='deadsay'>[t_He] [t_is] limp and unresponsive; there are no signs of life"
if(getorgan(/obj/item/organ/brain))
if(!key)
var/foundghost = 0
if(mind)
for(var/mob/dead/observer/G in GLOB.player_list)
if(G.mind == mind)
foundghost = 1
if (G.can_reenter_corpse == 0)
foundghost = 0
break
. += "<span class='warning'>[t_His] soul seems to have been ripped out of [t_his] body. Revival is impossible.</span>"
. += ""
if(getorgan(/obj/item/organ/brain) && !key && !get_ghost(FALSE, TRUE)))
. += "<span class='deadsay'>[t_He] [t_is] limp and unresponsive; there are no signs of life and [t_his] soul has departed...</span>"
if(!foundghost)
msg += " and [t_his] soul has departed"
msg += "...</span>\n"
else
. += "<span class='deadsay'>[t_He] [t_is] limp and unresponsive; there are no signs of life...</span>"
if(get_bodypart(BODY_ZONE_HEAD) && !getorgan(/obj/item/organ/brain))
msg += "<span class='deadsay'>It appears that [t_his] brain is missing...</span>\n"
. += "<span class='deadsay'>It appears that [t_his] brain is missing...</span>"
var/temp = getBruteLoss() //no need to calculate each of these twice
msg += "<span class='warning'>" //Everything below gets this span
var/list/msg = list("<span class='warning'>") //Everything below gets this span
var/list/missing = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
var/list/disabled = list()
@@ -169,8 +163,7 @@
if(!(BP.get_damage(include_stamina = FALSE) >= BP.max_damage)) //Stamina is disabling the limb
damage_text = "limp and lifeless"
else
var/more_brute = BP.brute_dam >= BP.burn_dam
damage_text = more_brute ? "broken and mangled" : "burnt and blistered"
damage_text = (BP.brute_dam >= BP.burn_dam) ? BP.heavy_brute_msg : BP.heavy_burn_msg
msg += "<B>[capitalize(t_his)] [BP.name] is [damage_text]!</B>\n"
//stores missing limbs
@@ -334,7 +327,13 @@
if(digitalcamo)
msg += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly inhuman manner.\n"
msg += common_trait_examine()
if (length(msg)) //End of default warning span
. += "<span class='warning'>[msg.Join("")]</span>"
var/trait_exam = common_trait_examine()
if (!isnull(trait_exam))
. += trait_exam
var/traitstring = get_trait_string()
if(ishuman(user))
@@ -345,28 +344,25 @@
if(perpname)
var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.general)
if(R)
msg += "<span class='deptradio'>Rank:</span> [R.fields["rank"]]<br>"
msg += "<a href='?src=[REF(src)];hud=1;photo_front=1'>\[Front photo\]</a> "
msg += "<a href='?src=[REF(src)];hud=1;photo_side=1'>\[Side photo\]</a><br>"
. += "<span class='deptradio'>Rank:</span> [R.fields["rank"]]\n<a href='?src=[REF(src)];hud=1;photo_front=1'>\[Front photo\]</a><a href='?src=[REF(src)];hud=1;photo_side=1'>\[Side photo\]</a>"
if(istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(CIH, /obj/item/organ/cyberimp/eyes/hud/medical))
var/cyberimp_detect
for(var/obj/item/organ/cyberimp/CI in internal_organs)
if(CI.status == ORGAN_ROBOTIC && !CI.syndicate_implant)
cyberimp_detect += "[name] is modified with a [CI.name].<br>"
cyberimp_detect += "[name] is modified with a [CI.name]."
if(cyberimp_detect)
msg += "Detected cybernetic modifications:<br>"
msg += cyberimp_detect
. += "Detected cybernetic modifications:"
. += cyberimp_detect
if(R)
var/health_r = R.fields["p_stat"]
msg += "<a href='?src=[REF(src)];hud=m;p_stat=1'>\[[health_r]\]</a>"
. += "<a href='?src=[REF(src)];hud=m;p_stat=1'>\[[health_r]\]</a>"
health_r = R.fields["m_stat"]
msg += "<a href='?src=[REF(src)];hud=m;m_stat=1'>\[[health_r]\]</a><br>"
. += "<a href='?src=[REF(src)];hud=m;m_stat=1'>\[[health_r]\]</a>"
R = find_record("name", perpname, GLOB.data_core.medical)
if(R)
msg += "<a href='?src=[REF(src)];hud=m;evaluation=1'>\[Medical evaluation\]</a><br>"
. += "<a href='?src=[REF(src)];hud=m;evaluation=1'>\[Medical evaluation\]</a>"
if(traitstring)
msg += "<span class='info'>Detected physiological traits:<br></span>"
msg += "<span class='info'>[traitstring]</span><br>"
. += "<span class='info'>Detected physiological traits:\n[traitstring]"
@@ -379,25 +375,22 @@
if(R)
criminal = R.fields["criminal"]
msg += "<span class='deptradio'>Criminal status:</span> <a href='?src=[REF(src)];hud=s;status=1'>\[[criminal]\]</a>\n"
msg += "<span class='deptradio'>Security record:</span> <a href='?src=[REF(src)];hud=s;view=1'>\[View\]</a> "
msg += "<a href='?src=[REF(src)];hud=s;add_crime=1'>\[Add crime\]</a> "
msg += "<a href='?src=[REF(src)];hud=s;view_comment=1'>\[View comment log\]</a> "
msg += "<a href='?src=[REF(src)];hud=s;add_comment=1'>\[Add comment\]</a>\n"
. += jointext(list("<span class='deptradio'>Criminal status:</span> <a href='?src=[REF(src)];hud=s;status=1'>\[[criminal]\]</a>",
"<span class='deptradio'>Security record:</span> <a href='?src=[REF(src)];hud=s;view=1'>\[View\]</a>",
"<a href='?src=[REF(src)];hud=s;add_crime=1'>\[Add crime\]</a>",
"<a href='?src=[REF(src)];hud=s;view_comment=1'>\[View comment log\]</a>",
"<a href='?src=[REF(src)];hud=s;add_comment=1'>\[Add comment\]</a>"), "")
else if(isobserver(user) && traitstring)
msg += "<span class='info'><b>Traits:</b> [traitstring]</span><br>"
. += "<span class='info'><b>Traits:</b> [traitstring]</span>"
if(print_flavor_text())
if(get_visible_name() == "Unknown") //Are we sure we know who this is? Don't show flavor text unless we can recognize them. Prevents certain metagaming with impersonation.
msg += "...?<br>"
. += "...?"
else if(skipface) //Sometimes we're not unknown, but impersonating someone in a hardsuit, let's not reveal our flavor text then either.
msg += "...?<br>"
. += "...?"
else
msg += "[print_flavor_text()]\n"
msg += "*---------*</span>"
to_chat(user, msg)
return msg
. += "[print_flavor_text()]"
. += "*---------*</span>"
/mob/living/proc/status_effect_examines(pronoun_replacement) //You can include this in any mob's examine() to show the examine texts of status effects!
var/list/dat = list()

View File

@@ -1,26 +1,24 @@
/mob/living/silicon/ai/examine(mob/user)
var/msg = "<span class='info'>*---------*\nThis is [icon2html(src, user)] <EM>[src]</EM>!\n"
. = list("<span class='info'>*---------*\nThis is [icon2html(src, user)] <EM>[src]</EM>!")
if (stat == DEAD)
msg += "<span class='deadsay'>It appears to be powered-down.</span>\n"
. += "<span class='deadsay'>It appears to be powered-down.</span>"
else
msg += "<span class='warning'>"
. += "<span class='warning'>"
if (getBruteLoss())
if (getBruteLoss() < 30)
msg += "It looks slightly dented.\n"
. += "It looks slightly dented."
else
msg += "<B>It looks severely dented!</B>\n"
. += "<B>It looks severely dented!</B>"
if (getFireLoss())
if (getFireLoss() < 30)
msg += "It looks slightly charred.\n"
. += "It looks slightly charred."
else
msg += "<B>Its casing is melted and heat-warped!</B>\n"
msg += "</span>"
. += "<B>Its casing is melted and heat-warped!</B>"
. += "</span>"
if(deployed_shell)
msg += "The wireless networking light is blinking.\n"
. += "The wireless networking light is blinking."
else if (!shunted && !client)
msg += "[src]Core.exe has stopped responding! NTOS is searching for a solution to the problem...\n"
msg += "*---------*</span>"
. += "[src]Core.exe has stopped responding! NTOS is searching for a solution to the problem..."
. += "*---------*</span>"
to_chat(user, msg)
..()
return msg
. += ..()

View File

@@ -1,4 +1,6 @@
/mob/living/silicon/examine(mob/user) //Displays a silicon's laws to ghosts
. = ..()
if(laws && isobserver(user))
to_chat(user, "<b>[src] has the following laws:</b>")
laws.show_laws(user)
. += "<b>[src] has the following laws:</b>"
for(var/law in laws.get_law_list(include_zeroth = TRUE))
. += law

View File

@@ -266,8 +266,8 @@
return TRUE
/mob/living/silicon/pai/examine(mob/user)
..()
to_chat(user, "A personal AI in holochassis mode. Its master ID string seems to be [master].")
. = ..()
. += "A personal AI in holochassis mode. Its master ID string seems to be [master]."
/mob/living/silicon/pai/Life()
if(stat == DEAD)

View File

@@ -1,55 +1,53 @@
/mob/living/silicon/robot/examine(mob/user)
var/msg = "<span class='info'>*---------*\nThis is [icon2html(src, user)] \a <EM>[src]</EM>, a [src.module.name]!\n"
. = list("<span class='info'>*---------*\nThis is [icon2html(src, user)] \a <EM>[src]</EM>, a [src.module.name]!")
if(desc)
msg += "[desc]\n"
. += "[desc]"
var/obj/act_module = get_active_held_item()
if(act_module)
msg += "It is holding [icon2html(act_module, user)] \a [act_module].\n"
msg += status_effect_examines()
msg += "<span class='warning'>"
if (src.getBruteLoss())
if (src.getBruteLoss() < maxHealth*0.5)
msg += "It looks slightly dented.\n"
. += "It is holding [icon2html(act_module, user)] \a [act_module]."
var/effects_exam = status_effect_examines()
if(!isnull(effects_exam))
. += effects_exam
if (getBruteLoss())
if (getBruteLoss() < maxHealth*0.5)
. += "<span class='warning'>It looks slightly dented.</span>"
else
msg += "<B>It looks severely dented!</B>\n"
. += "<span class='warning'><B>It looks severely dented!</B></span>"
if (getFireLoss() || getToxLoss())
var/overall_fireloss = getFireLoss() + getToxLoss()
if (overall_fireloss < maxHealth * 0.5)
msg += "It looks slightly charred.\n"
. += "<span class='warning'>It looks slightly charred.</span>"
else
msg += "<B>It looks severely burnt and heat-warped!</B>\n"
if (src.health < -maxHealth*0.5)
msg += "It looks barely operational.\n"
if (src.fire_stacks < 0)
msg += "It's covered in water.\n"
else if (src.fire_stacks > 0)
msg += "It's coated in something flammable.\n"
msg += "</span>"
. += "<span class='warning'>It looks slightly charred.</span>"
if (health < -maxHealth*0.5)
. += "<span class='warning'>It looks barely operational.</span>"
if (fire_stacks < 0)
. += "<span class='warning'>It's covered in water.</span>"
else if (fire_stacks > 0)
. += "<span class='warning'>It's coated in something flammable.</span>"
if(opened)
msg += "<span class='warning'>Its cover is open and the power cell is [cell ? "installed" : "missing"].</span>\n"
. += "<span class='warning'>Its cover is open and the power cell is [cell ? "installed" : "missing"].</span>"
else
msg += "Its cover is closed[locked ? "" : ", and looks unlocked"].\n"
. += "Its cover is closed[locked ? "" : ", and looks unlocked"]."
if(cell && cell.charge <= 0)
msg += "<span class='warning'>Its battery indicator is blinking red!</span>\n"
. += "<span class='warning'>Its battery indicator is blinking red!</span>"
if(is_servant_of_ratvar(src) && get_dist(user, src) <= 1 && !stat) //To counter pseudo-stealth by using headlamps
msg += "<span class='warning'>Its eyes are glowing a blazing yellow!</span>\n"
. += "<span class='warning'>Its eyes are glowing a blazing yellow!</span>"
switch(stat)
if(CONSCIOUS)
if(shell)
msg += "It appears to be an [deployed ? "active" : "empty"] AI shell.\n"
. += "It appears to be an [deployed ? "active" : "empty"] AI shell."
else if(!client)
msg += "It appears to be in stand-by mode.\n" //afk
. += "It appears to be in stand-by mode." //afk
if(UNCONSCIOUS)
msg += "<span class='warning'>It doesn't seem to be responding.</span>\n"
. += "<span class='warning'>It doesn't seem to be responding.</span>"
if(DEAD)
msg += "<span class='deadsay'>It looks like its system is corrupted and requires a reset.</span>\n"
msg += "*---------*</span>"
. += "<span class='deadsay'>It looks like its system is corrupted and requires a reset.</span>"
. += "*---------*</span>"
to_chat(user, msg)
..()
return msg
. += ..()

View File

@@ -206,14 +206,14 @@
return TRUE
/mob/living/simple_animal/bot/examine(mob/user)
..()
. = ..()
if(health < maxHealth)
if(health > maxHealth/3)
to_chat(user, "[src]'s parts look loose.")
. += "[src]'s parts look loose."
else
to_chat(user, "[src]'s parts look very loose!")
. += "[src]'s parts look very loose!"
else
to_chat(user, "[src] is in pristine condition.")
. += "[src] is in pristine condition."
/mob/living/simple_animal/bot/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
if(amount>0 && prob(10))

View File

@@ -69,18 +69,13 @@
/mob/living/simple_animal/hostile/construct/examine(mob/user)
var/t_He = p_they(TRUE)
var/t_s = p_s()
var/msg = "<span class='cult'>*---------*\nThis is [icon2html(src, user)] \a <b>[src]</b>!\n"
msg += "[desc]\n"
. = list("<span class='cult'>*---------*\nThis is [icon2html(src, user)] \a <b>[src]</b>!\n[desc]")
if(health < maxHealth)
msg += "<span class='warning'>"
if(health >= maxHealth/2)
msg += "[t_He] look[t_s] slightly dented.\n"
. += "<span class='warning'>[t_He] look[t_s] slightly dented.</span>"
else
msg += "<b>[t_He] look[t_s] severely dented!</b>\n"
msg += "</span>"
msg += "*---------*</span>"
to_chat(user, msg)
. += "<span class='warning'><b>[t_He] look[t_s] severely dented!</b></span>"
. += "*---------*</span>"
/mob/living/simple_animal/hostile/construct/attack_animal(mob/living/simple_animal/M)
if(isconstruct(M)) //is it a construct?

View File

@@ -165,44 +165,43 @@
/mob/living/simple_animal/drone/examine(mob/user)
var/msg = "<span class='info'>*---------*\nThis is [icon2html(src, user)] \a <b>[src]</b>!\n"
. = list("<span class='info'>*---------*\nThis is [icon2html(src, user)] \a <b>[src]</b>!")
//Hands
for(var/obj/item/I in held_items)
if(!(I.item_flags & ABSTRACT))
msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n"
. += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))]."
//Internal storage
if(internal_storage && !(internal_storage.item_flags & ABSTRACT))
msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n"
. += "It is holding [internal_storage.get_examine_string(user)] in its internal storage."
//Cosmetic hat - provides no function other than looks
if(head && !(head.item_flags & ABSTRACT))
msg += "It is wearing [head.get_examine_string(user)] on its head.\n"
. += "It is wearing [head.get_examine_string(user)] on its head."
//Braindead
if(!client && stat != DEAD)
msg += "Its status LED is blinking at a steady rate.\n"
. += "Its status LED is blinking at a steady rate."
//Hacked
if(hacked)
msg += "<span class='warning'>Its display is glowing red!</span>\n"
. += "<span class='warning'>Its display is glowing red!</span>"
//Damaged
if(health != maxHealth)
if(health > maxHealth * 0.33) //Between maxHealth and about a third of maxHealth, between 30 and 10 for normal drones
msg += "<span class='warning'>Its screws are slightly loose.</span>\n"
. += "<span class='warning'>Its screws are slightly loose.</span>"
else //otherwise, below about 33%
msg += "<span class='boldwarning'>Its screws are very loose!</span>\n"
. += "<span class='boldwarning'>Its screws are very loose!</span>"
//Dead
if(stat == DEAD)
if(client)
msg += "<span class='deadsay'>A message repeatedly flashes on its display: \"REBOOT -- REQUIRED\".</span>\n"
. += "<span class='deadsay'>A message repeatedly flashes on its display: \"REBOOT -- REQUIRED\".</span>"
else
msg += "<span class='deadsay'>A message repeatedly flashes on its display: \"ERROR -- OFFLINE\".</span>\n"
msg += "*---------*</span>"
to_chat(user, msg)
. += "<span class='deadsay'>A message repeatedly flashes on its display: \"ERROR -- OFFLINE\".</span>"
. += "*---------*</span>"
/mob/living/simple_animal/drone/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) //Secbots won't hunt maintenance drones.

View File

@@ -18,18 +18,16 @@
/mob/living/simple_animal/hostile/guardian/dextrous/examine(mob/user)
if(dextrous)
var/msg = "<span class='info'>*---------*\nThis is [icon2html(src)] \a <b>[src]</b>!\n"
msg += "[desc]\n"
. = list("<span class='info'>*---------*\nThis is [icon2html(src)] \a <b>[src]</b>!\n[desc]")
for(var/obj/item/I in held_items)
if(!(I.item_flags & ABSTRACT))
msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n"
. += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))]."
if(internal_storage && !(internal_storage.item_flags & ABSTRACT))
msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n"
msg += "*---------*</span>"
to_chat(user, msg)
. += "It is holding [internal_storage.get_examine_string(user)] in its internal storage."
. += "*---------*</span>"
else
..()
return ..()
/mob/living/simple_animal/hostile/guardian/dextrous/Recall(forced)
if(!summoner || loc == summoner || (cooldown > world.time && !forced))

View File

@@ -90,6 +90,6 @@
detonate(user)
/obj/guardian_bomb/examine(mob/user)
stored_obj.examine(user)
. = stored_obj.examine(user)
if(get_dist(user,src)<=2)
to_chat(user, "<span class='holoparasite'>It glows with a strange <font color=\"[spawner.namedatum.colour]\">light</font>!</span>")
. += "<span class='holoparasite'>It glows with a strange <font color=\"[spawner.namedatum.colour]\">light</font>!</span>"

View File

@@ -77,11 +77,9 @@
/mob/living/simple_animal/hostile/poison/bees/examine(mob/user)
..()
. = ..()
if(!beehome)
to_chat(user, "<span class='warning'>This bee is homeless!</span>")
. += "<span class='warning'>This bee is homeless!</span>"
/mob/living/simple_animal/hostile/poison/bees/proc/generate_bee_visuals()
cut_overlays()
@@ -295,7 +293,7 @@
forceMove(beehome.drop_location())
else
..()
/mob/living/simple_animal/hostile/poison/bees/short
desc = "These bees seem unstable and won't survive for long."

View File

@@ -130,7 +130,7 @@
qdel(copy)
/mob/living/simple_animal/hostile/boss/paper_wizard/copy/examine(mob/user)
..()
. = ..()
qdel(src) //I see through your ruse!
//fancy effects

View File

@@ -44,9 +44,8 @@
/mob/living/simple_animal/hostile/illusion/examine(mob/user)
if(parent_mob)
parent_mob.examine(user)
else
return ..()
return parent_mob.examine(user)
return ..()
/mob/living/simple_animal/hostile/illusion/AttackingTarget()

View File

@@ -373,8 +373,8 @@ Difficulty: Very Hard
/obj/machinery/anomalous_crystal/examine(mob/user)
. = ..()
if(isobserver(user))
to_chat(user, observer_desc)
to_chat(user, "It is activated by [activation_method].")
. += observer_desc
. += "It is activated by [activation_method]."
/obj/machinery/anomalous_crystal/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode)
..()

View File

@@ -38,11 +38,11 @@
var/static/mutable_appearance/cap_dead
/mob/living/simple_animal/hostile/mushroom/examine(mob/user)
..()
. = ..()
if(health >= maxHealth)
to_chat(user, "<span class='info'>It looks healthy.</span>")
. += "<span class='info'>It looks healthy.</span>"
else
to_chat(user, "<span class='info'>It looks like it's been roughed up.</span>")
. += "<span class='info'>It looks like it's been roughed up.</span>"
/mob/living/simple_animal/hostile/mushroom/Life()
..()

View File

@@ -119,9 +119,9 @@
/mob/living/simple_animal/parrot/examine(mob/user)
..()
. = ..()
if(stat)
to_chat(user, pick("This parrot is no more.", "This is a late parrot.", "This is an ex-parrot."))
. += pick("This parrot is no more.", "This is a late parrot.", "This is an ex-parrot.")
/mob/living/simple_animal/parrot/death(gibbed)
if(held_item)

View File

@@ -61,7 +61,7 @@
var/mood = "" // To show its face
var/mutator_used = FALSE //So you can't shove a dozen mutators into a single slime
var/force_stasis = FALSE
do_footstep = TRUE
var/static/regex/slime_name_regex = new("\\w+ (baby|adult) slime \\(\\d+\\)")
@@ -408,37 +408,32 @@
return
/mob/living/simple_animal/slime/examine(mob/user)
var/msg = "<span class='info'>*---------*\nThis is [icon2html(src, user)] \a <EM>[src]</EM>!\n"
. = list("<span class='info'>*---------*\nThis is [icon2html(src, user)] \a <EM>[src]</EM>!")
if (src.stat == DEAD)
msg += "<span class='deadsay'>It is limp and unresponsive.</span>\n"
. += "<span class='deadsay'>It is limp and unresponsive.</span>"
else
if (stat == UNCONSCIOUS) // Slime stasis
msg += "<span class='deadsay'>It appears to be alive but unresponsive.</span>\n"
if (src.getBruteLoss())
msg += "<span class='warning'>"
if (src.getBruteLoss() < 40)
msg += "It has some punctures in its flesh!"
. += "<span class='deadsay'>It appears to be alive but unresponsive.</span>"
if (getBruteLoss())
if (getBruteLoss() < 40)
msg += "<span class='warning'>It has some punctures in its flesh!"
else
msg += "<B>It has severe punctures and tears in its flesh!</B>"
msg += "</span>\n"
msg += "<span class='danger'>It has severe punctures and tears in its flesh!</span>"
switch(powerlevel)
if(2 to 3)
msg += "It is flickering gently with a little electrical activity.\n"
. += "It is flickering gently with a little electrical activity."
if(4 to 5)
msg += "It is glowing gently with moderate levels of electrical activity.\n"
. += "It is glowing gently with moderate levels of electrical activity."
if(6 to 9)
msg += "<span class='warning'>It is glowing brightly with high levels of electrical activity.</span>\n"
. += "<span class='warning'>It is glowing brightly with high levels of electrical activity.</span>"
if(10)
msg += "<span class='warning'><B>It is radiating with massive levels of electrical activity!</B></span>\n"
. += "<span class='warning'><B>It is radiating with massive levels of electrical activity!</B></span>"
msg += "*---------*</span>"
to_chat(user, msg)
return
. += "*---------*</span>"
/mob/living/simple_animal/slime/proc/discipline_slime(mob/user)
if(stat)

View File

@@ -319,7 +319,8 @@
return
face_atom(A)
A.examine(src)
var/list/result = A.examine(src)
to_chat(src, result.Join("\n"))
//same as above
//note: ghosts can point, this is intended