mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-07-09 07:11:30 +01:00
The 515 MegaPR early downport (#7783)
Co-authored-by: Selis <selis@xynolabs.com> Co-authored-by: Selis <sirlionfur@hotmail.de> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com> Co-authored-by: SatinIsle <thesatinisle@gmail.com> Co-authored-by: Heroman <alesha3000@list.ru> Co-authored-by: Casey <a.roaming.shadow@gmail.com> Co-authored-by: Raeschen <rycoop29@gmail.com>
This commit is contained in:
@@ -6,4 +6,4 @@
|
||||
else
|
||||
if(mind && mind.assigned_role) //CHOMPEdit
|
||||
return //CHOMPEdit
|
||||
cleanup_timer = QDEL_IN(src, 10 MINUTES)
|
||||
cleanup_timer = QDEL_IN_STOPPABLE(src, 10 MINUTES)
|
||||
|
||||
@@ -462,6 +462,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
if(target != src)
|
||||
if(following && following == target)
|
||||
return
|
||||
if(following)
|
||||
src.stop_following()
|
||||
following = target
|
||||
to_chat(src, "<span class='notice'>Now following [target]</span>")
|
||||
if(ismob(target))
|
||||
|
||||
@@ -214,17 +214,17 @@
|
||||
say("Down on the floor, [suspect_name]! You have [SECBOT_WAIT_TIME*2] seconds to comply.")
|
||||
playsound(src, pick(preparing_arrest_sounds), 50)
|
||||
// Register to be told when the target moves
|
||||
GLOB.moved_event.register(target, src, /mob/living/bot/secbot/proc/target_moved)
|
||||
RegisterSignal(target, COMSIG_OBSERVER_MOVED, /mob/living/bot/secbot/proc/target_moved)
|
||||
|
||||
// Callback invoked if the registered target moves
|
||||
/mob/living/bot/secbot/proc/target_moved(atom/movable/moving_instance, atom/old_loc, atom/new_loc)
|
||||
if(get_dist(get_turf(src), get_turf(target)) >= 1)
|
||||
awaiting_surrender = INFINITY // Done waiting!
|
||||
GLOB.moved_event.unregister(moving_instance, src)
|
||||
UnregisterSignal(moving_instance, COMSIG_OBSERVER_MOVED)
|
||||
|
||||
/mob/living/bot/secbot/resetTarget()
|
||||
..()
|
||||
GLOB.moved_event.unregister(target, src)
|
||||
UnregisterSignal(target, COMSIG_OBSERVER_MOVED)
|
||||
awaiting_surrender = 0
|
||||
attacked = FALSE
|
||||
walk_to(src, 0)
|
||||
@@ -478,4 +478,4 @@
|
||||
return
|
||||
if(!in_range(src, user) && loc != user)
|
||||
return
|
||||
created_name = t
|
||||
created_name = t
|
||||
|
||||
@@ -18,13 +18,11 @@
|
||||
germ_level++
|
||||
|
||||
/mob/living/carbon/Destroy()
|
||||
qdel(ingested)
|
||||
qdel(touching)
|
||||
QDEL_NULL(ingested)
|
||||
QDEL_NULL(touching)
|
||||
// We don't qdel(bloodstr) because it's the same as qdel(reagents)
|
||||
for(var/guts in internal_organs)
|
||||
qdel(guts)
|
||||
for(var/food in stomach_contents)
|
||||
qdel(food)
|
||||
bloodstr = null
|
||||
QDEL_NULL_LIST(stomach_contents)
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/rejuvenate()
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
else if(species.name != "Human")
|
||||
name_ender = ", <b><font color='[species.get_flesh_colour(src)]'>\a [species.get_examine_name()]!</font></b>[species.get_additional_examine_text(src)]"
|
||||
|
||||
var/list/msg = list("<span class='info'>*---------*","This is \icon[src.examine_icon()][bicon(src)] <EM>[src.name]</EM>[name_ender]")
|
||||
var/list/msg = list("<span class='info'>*---------*","This is [icon2html(src, user.client)] <EM>[src.name]</EM>[name_ender]")
|
||||
|
||||
//uniform
|
||||
if(w_uniform && !(skip_gear & EXAMINE_SKIPJUMPSUIT) && w_uniform.show_examine)
|
||||
@@ -125,16 +125,16 @@
|
||||
|
||||
tie_msg += " [lowertext(english_list(accessory_descs))]."
|
||||
if(w_uniform.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[w_uniform][bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[w_uniform]'>[w_uniform.name]</a>![tie_msg]</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing [icon2html(w_uniform,user.client)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[w_uniform]'>[w_uniform.name]</a>![tie_msg]</span>"
|
||||
else
|
||||
msg += "[T.He] [T.is] wearing [bicon(w_uniform)] <a href='?src=\ref[src];lookitem_desc_only=\ref[w_uniform]'>\a [w_uniform]</a>.[tie_msg]"
|
||||
msg += "[T.He] [T.is] wearing [icon2html(w_uniform,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[w_uniform]'>\a [w_uniform]</a>.[tie_msg]"
|
||||
|
||||
//head
|
||||
if(head && !(skip_gear & EXAMINE_SKIPHELMET) && head.show_examine)
|
||||
if(head.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[w_uniform][bicon(head)] [head.gender==PLURAL?"some":"a"] [(head.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[head]'>[head.name]</a> on [T.his] head!</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing [icon2html(head,user.client)] [head.gender==PLURAL?"some":"a"] [(head.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[head]'>[head.name]</a> on [T.his] head!</span>"
|
||||
else
|
||||
msg += "[T.He] [T.is] wearing [bicon(head)] <a href='?src=\ref[src];lookitem_desc_only=\ref[head]'>\a [head]</a> on [T.his] head."
|
||||
msg += "[T.He] [T.is] wearing [icon2html(head,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[head]'>\a [head]</a> on [T.his] head."
|
||||
|
||||
//suit/armour
|
||||
if(wear_suit)
|
||||
@@ -151,71 +151,71 @@
|
||||
tie_msg += " [lowertext(english_list(accessory_descs))]."
|
||||
|
||||
if(wear_suit.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[wear_suit][bicon(wear_suit)] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[wear_suit]'>[wear_suit.name]</a>![tie_msg]</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing [icon2html(wear_suit,user.client)] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[wear_suit]'>[wear_suit.name]</a>![tie_msg]</span>"
|
||||
else
|
||||
msg += "[T.He] [T.is] wearing \icon[wear_suit][bicon(wear_suit)] <a href='?src=\ref[src];lookitem_desc_only=\ref[wear_suit]'>\a [wear_suit]</a>.[tie_msg]"
|
||||
msg += "[T.He] [T.is] wearing [icon2html(wear_suit,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[wear_suit]'>\a [wear_suit]</a>.[tie_msg]"
|
||||
|
||||
//suit/armour storage
|
||||
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][bicon(s_store)] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[s_store]'>[s_store.name]</a> on [T.his] [wear_suit.name]!</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.is] carrying [icon2html(s_store,user.client)] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[s_store]'>[s_store.name]</a> on [T.his] [wear_suit.name]!</span>"
|
||||
else
|
||||
msg += "[T.He] [T.is] carrying \icon[s_store][bicon(s_store)] <a href='?src=\ref[src];lookitem_desc_only=\ref[s_store]'>\a [s_store]</a> on [T.his] [wear_suit.name]."
|
||||
msg += "[T.He] [T.is] carrying [icon2html(s_store,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[s_store]'>\a [s_store]</a> on [T.his] [wear_suit.name]."
|
||||
|
||||
//back
|
||||
if(back && !(skip_gear & EXAMINE_SKIPBACKPACK) && back.show_examine)
|
||||
if(back.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[back][bicon(back)] [back.gender==PLURAL?"some":"a"] [(back.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[back]'>[back]</a> on [T.his] back.</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.has] [icon2html(back,user.client)] [back.gender==PLURAL?"some":"a"] [(back.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[back]'>[back]</a> on [T.his] back.</span>"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[back][bicon(back)] <a href='?src=\ref[src];lookitem_desc_only=\ref[back]'>\a [back]</a> on [T.his] back."
|
||||
msg += "[T.He] [T.has] [icon2html(back,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[back]'>\a [back]</a> on [T.his] back."
|
||||
|
||||
//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][bicon(l_hand)] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[l_hand]'>[l_hand.name]</a> in [T.his] left hand!</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.is] holding [icon2html(l_hand,user.client)] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[l_hand]'>[l_hand.name]</a> in [T.his] left hand!</span>"
|
||||
else
|
||||
msg += "[T.He] [T.is] holding \icon[l_hand][bicon(l_hand)] <a href='?src=\ref[src];lookitem_desc_only=\ref[l_hand]'>\a [l_hand]</a> in [T.his] left hand."
|
||||
msg += "[T.He] [T.is] holding [icon2html(l_hand,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[l_hand]'>\a [l_hand]</a> in [T.his] left hand."
|
||||
|
||||
//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][bicon(r_hand)] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[r_hand]'>[r_hand.name]</a> in [T.his] right hand!</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.is] holding [icon2html(r_hand,user.client)] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[r_hand]'>[r_hand.name]</a> in [T.his] right hand!</span>"
|
||||
else
|
||||
msg += "[T.He] [T.is] holding \icon[r_hand][bicon(r_hand)] <a href='?src=\ref[src];lookitem_desc_only=\ref[r_hand]'>\a [r_hand]</a> in [T.his] right hand."
|
||||
msg += "[T.He] [T.is] holding [icon2html(r_hand,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[r_hand]'>\a [r_hand]</a> in [T.his] right hand."
|
||||
|
||||
//gloves
|
||||
if(gloves && !(skip_gear & EXAMINE_SKIPGLOVES) && gloves.show_examine)
|
||||
if(gloves.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[gloves][bicon(gloves)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[gloves]'>[gloves.name]</a> on [T.his] hands!</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.has] [icon2html(gloves,user.client)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[gloves]'>[gloves.name]</a> on [T.his] hands!</span>"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[gloves][bicon(gloves)] <a href='?src=\ref[src];lookitem_desc_only=\ref[gloves]'>\a [gloves]</a> on [T.his] hands."
|
||||
msg += "[T.He] [T.has] [icon2html(gloves,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[gloves]'>\a [gloves]</a> on [T.his] hands."
|
||||
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>"
|
||||
|
||||
//handcuffed?
|
||||
if(handcuffed && handcuffed.show_examine)
|
||||
if(istype(handcuffed, /obj/item/weapon/handcuffs/cable))
|
||||
msg += "<span class='warning'>[T.He] [T.is] \icon[handcuffed][bicon(handcuffed)] restrained with cable!</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.is] [icon2html(handcuffed,user.client)] restrained with cable!</span>"
|
||||
else
|
||||
msg += "<span class='warning'>[T.He] [T.is] \icon[handcuffed][bicon(handcuffed)] handcuffed!</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.is] [icon2html(handcuffed,user.client)] handcuffed!</span>"
|
||||
|
||||
//buckled
|
||||
if(buckled)
|
||||
msg += "<span class='warning'>[T.He] [T.is] \icon[buckled][bicon(buckled)] buckled to [buckled]!</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.is] [icon2html(buckled,user.client)] buckled to [buckled]!</span>"
|
||||
|
||||
//belt
|
||||
if(belt && !(skip_gear & EXAMINE_SKIPBELT) && belt.show_examine)
|
||||
if(belt.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[belt][bicon(belt)] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[belt]'>[belt.name]</a> about [T.his] waist!</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.has] [icon2html(belt,user.client)] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[belt]'>[belt.name]</a> about [T.his] waist!</span>"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[belt][bicon(belt)] <a href='?src=\ref[src];lookitem_desc_only=\ref[belt]'>\a [belt]</a> about [T.his] waist."
|
||||
msg += "[T.He] [T.has] [icon2html(belt,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[belt]'>\a [belt]</a> about [T.his] waist."
|
||||
|
||||
//shoes
|
||||
if(shoes && !(skip_gear & EXAMINE_SKIPSHOES) && shoes.show_examine)
|
||||
if(shoes.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[shoes][bicon(shoes)] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[shoes]'>[shoes.name]</a> on [T.his] feet!</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing [icon2html(shoes,user.client)] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[shoes]'>[shoes.name]</a> on [T.his] feet!</span>"
|
||||
else
|
||||
msg += "[T.He] [T.is] wearing \icon[shoes][bicon(shoes)] <a href='?src=\ref[src];lookitem_desc_only=\ref[shoes]'>\a [shoes]</a> on [T.his] feet."
|
||||
msg += "[T.He] [T.is] wearing [icon2html(shoes,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[shoes]'>\a [shoes]</a> on [T.his] feet."
|
||||
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>"
|
||||
|
||||
@@ -226,28 +226,28 @@
|
||||
descriptor = "in [T.his] mouth"
|
||||
|
||||
if(wear_mask.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[wear_mask][bicon(wear_mask)] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[wear_mask]'>[wear_mask.name]</a> [descriptor]!</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.has] [icon2html(wear_mask,user.client)] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[wear_mask]'>[wear_mask.name]</a> [descriptor]!</span>"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[wear_mask][bicon(wear_mask)] <a href='?src=\ref[src];lookitem_desc_only=\ref[wear_mask]'>\a [wear_mask]</a> [descriptor]."
|
||||
msg += "[T.He] [T.has] [icon2html(wear_mask,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[wear_mask]'>\a [wear_mask]</a> [descriptor]."
|
||||
|
||||
//eyes
|
||||
if(glasses && !(skip_gear & EXAMINE_SKIPEYEWEAR) && glasses.show_examine)
|
||||
if(glasses.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[glasses][bicon(glasses)] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[glasses]'>[glasses]</a> covering [T.his] eyes!</span>"
|
||||
msg += "<span class='warning'>[T.He] [T.has] [icon2html(glasses,user.client)] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != "#030303") ? "blood" : "oil"]-stained <a href='?src=\ref[src];lookitem_desc_only=\ref[glasses]'>[glasses]</a> covering [T.his] eyes!</span>"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[glasses][bicon(glasses)] <a href='?src=\ref[src];lookitem_desc_only=\ref[glasses]'>\a [glasses]</a> covering [T.his] eyes."
|
||||
msg += "[T.He] [T.has] [icon2html(glasses,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[glasses]'>\a [glasses]</a> covering [T.his] eyes."
|
||||
|
||||
//left ear
|
||||
if(l_ear && !(skip_gear & EXAMINE_SKIPEARS) && l_ear.show_examine)
|
||||
msg += "[T.He] [T.has] \icon[l_ear][bicon(l_ear)] <a href='?src=\ref[src];lookitem_desc_only=\ref[l_ear]'>\a [l_ear]</a> on [T.his] left ear."
|
||||
msg += "[T.He] [T.has] [icon2html(l_ear,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[l_ear]'>\a [l_ear]</a> on [T.his] left ear."
|
||||
|
||||
//right ear
|
||||
if(r_ear && !(skip_gear & EXAMINE_SKIPEARS) && r_ear.show_examine)
|
||||
msg += "[T.He] [T.has] \icon[r_ear][bicon(r_ear)] <a href='?src=\ref[src];lookitem_desc_only=\ref[r_ear]'>\a [r_ear]</a> on [T.his] right ear."
|
||||
msg += "[T.He] [T.has] [icon2html(r_ear,user.client)] <a href='?src=\ref[src];lookitem_desc_only=\ref[r_ear]'>\a [r_ear]</a> on [T.his] right ear."
|
||||
|
||||
//ID
|
||||
if(wear_id && wear_id.show_examine)
|
||||
msg += "[T.He] [T.is] wearing \icon[wear_id][bicon(wear_id)]<a href='?src=\ref[src];lookitem_desc_only=\ref[wear_id]'>\a [wear_id]</a>."
|
||||
msg += "[T.He] [T.is] wearing [icon2html(wear_id,user.client)]<a href='?src=\ref[src];lookitem_desc_only=\ref[wear_id]'>\a [wear_id]</a>."
|
||||
|
||||
//Jitters
|
||||
if(is_jittery)
|
||||
|
||||
@@ -58,10 +58,17 @@
|
||||
|
||||
/mob/living/carbon/human/Destroy()
|
||||
human_mob_list -= src
|
||||
/* //Chomp REMOVE - this is done on mob/living/Destroy
|
||||
for(var/organ in organs)
|
||||
qdel(organ)
|
||||
QDEL_NULL(nif) //VOREStation Add
|
||||
*/
|
||||
if(nif)
|
||||
QDEL_NULL(nif) //VOREStation Add
|
||||
worn_clothing.Cut()
|
||||
|
||||
|
||||
if(vessel)
|
||||
QDEL_NULL(vessel)
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/Stat()
|
||||
|
||||
@@ -73,13 +73,13 @@
|
||||
// Called in robotize(), replaced() and removed() to update our modular limb verbs.
|
||||
/mob/living/carbon/human/proc/refresh_modular_limb_verbs()
|
||||
if(length(get_modular_limbs(return_first_found = TRUE, validate_proc = /obj/item/organ/external/proc/can_attach_modular_limb_here)))
|
||||
verbs |= PROC_REF(attach_limb_verb)
|
||||
verbs |= /mob/living/carbon/human/proc/attach_limb_verb
|
||||
else
|
||||
verbs -= PROC_REF(attach_limb_verb)
|
||||
verbs -= /mob/living/carbon/human/proc/attach_limb_verb
|
||||
if(length(get_modular_limbs(return_first_found = TRUE, validate_proc = /obj/item/organ/external/proc/can_remove_modular_limb)))
|
||||
verbs |= PROC_REF(detach_limb_verb)
|
||||
verbs |= /mob/living/carbon/human/proc/detach_limb_verb
|
||||
else
|
||||
verbs -= PROC_REF(detach_limb_verb)
|
||||
verbs -= /mob/living/carbon/human/proc/detach_limb_verb
|
||||
|
||||
// Proc helper for attachment verb.
|
||||
/mob/living/carbon/human/proc/check_can_attach_modular_limb(var/obj/item/organ/external/E)
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
img.override = TRUE
|
||||
add_alt_appearance("animals", img, displayTo = alt_farmanimals)
|
||||
|
||||
|
||||
/mob/living/carbon/human/Destroy()
|
||||
alt_farmanimals -= src
|
||||
|
||||
@@ -18,4 +17,3 @@
|
||||
|
||||
/mob/living/carbon/human/get_digestion_efficiency_modifier()
|
||||
return species.digestion_efficiency
|
||||
|
||||
|
||||
@@ -101,20 +101,15 @@
|
||||
|
||||
return new_copy
|
||||
|
||||
//We REALLY don't need to go through every variable. Doing so makes this lag like hell on 515
|
||||
/datum/species/proc/copy_variables(var/datum/species/S, var/list/whitelist)
|
||||
//List of variables to ignore, trying to copy type will runtime.
|
||||
var/list/blacklist = list("type", "loc", "client", "ckey")
|
||||
//var/list/blacklist = list("type", "loc", "client", "ckey")
|
||||
//Makes thorough copy of species datum.
|
||||
for(var/i in vars)
|
||||
for(var/i in whitelist)
|
||||
if(!(i in S.vars)) //Don't copy incompatible vars.
|
||||
continue
|
||||
if(S.vars[i] != vars[i] && !islist(vars[i])) //If vars are same, no point in copying.
|
||||
if(i in blacklist)
|
||||
continue
|
||||
if(whitelist)//If whitelist is provided, only vars in the list will be copied.
|
||||
if(i in whitelist)
|
||||
S.vars[i] = vars[i]
|
||||
continue
|
||||
S.vars[i] = vars[i]
|
||||
|
||||
/datum/species/get_bodytype()
|
||||
|
||||
@@ -83,8 +83,7 @@
|
||||
if(stored_blob)
|
||||
stored_blob.drop_l_hand()
|
||||
stored_blob.drop_r_hand()
|
||||
stored_blob = null
|
||||
qdel(stored_blob)
|
||||
QDEL_NULL(stored_blob)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/Stat()
|
||||
|
||||
@@ -50,22 +50,17 @@
|
||||
B.owner = tf_mob_holder
|
||||
tf_mob_holder.vore_organs |= B
|
||||
vore_organs -= B
|
||||
|
||||
if(tf_mob_holder)
|
||||
tf_mob_holder = null
|
||||
//VOREStation Addition End
|
||||
//ChompEDIT START
|
||||
if(selected_image) // prune out images
|
||||
selected_image = null
|
||||
if(hud_list) //prune out images in hud_list
|
||||
for(var/item in hud_list)
|
||||
if(item)
|
||||
item = null
|
||||
//ChompEDIT END
|
||||
|
||||
qdel(selected_image)
|
||||
QDEL_NULL(vorePanel) //VOREStation Add
|
||||
QDEL_LIST_NULL(vore_organs) //VOREStation Add
|
||||
if(selected_image)
|
||||
selected_image = null
|
||||
//QDEL_NULL(vorePanel) //VOREStation Add commented and moved to /mob
|
||||
//QDEL_LIST_NULL(vore_organs) //VOREStation Add commented and moved to /mob
|
||||
temp_language_sources = null //VOREStation Add
|
||||
temp_languages = null //VOREStation Add
|
||||
|
||||
@@ -1329,7 +1324,7 @@
|
||||
/datum/component/character_setup/proc/character_setup_click(source, location, control, params, user)
|
||||
var/mob/owner = user
|
||||
if(owner.client?.prefs)
|
||||
INVOKE_ASYNC(owner.client.prefs, /datum/preferences/proc/ShowChoices, owner)
|
||||
INVOKE_ASYNC(owner.client.prefs, TYPE_PROC_REF(/datum/preferences, ShowChoices), owner)
|
||||
|
||||
/**
|
||||
* Screen object for vore panel
|
||||
|
||||
@@ -493,7 +493,7 @@
|
||||
spawn(0)
|
||||
R.send_signal("ACTIVATE")
|
||||
for(var/mob/O in hearers(1, R.loc))
|
||||
O.show_message("\icon[R][bicon(R)] *beep* *beep*", 3, "*beep* *beep*", 2)
|
||||
O.show_message("[icon2html(R,O.client)] *beep* *beep*", 3, "*beep* *beep*", 2)
|
||||
if("freq")
|
||||
var/frequency = unformat_frequency(params["freq"])
|
||||
frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)
|
||||
|
||||
@@ -229,21 +229,20 @@
|
||||
else
|
||||
src.healths.icon_state = "health6"
|
||||
else
|
||||
switch(health)
|
||||
if(200 to INFINITY)
|
||||
src.healths.icon_state = "health0"
|
||||
if(150 to 200)
|
||||
src.healths.icon_state = "health1"
|
||||
if(100 to 150)
|
||||
src.healths.icon_state = "health2"
|
||||
if(50 to 100)
|
||||
src.healths.icon_state = "health3"
|
||||
if(0 to 50)
|
||||
src.healths.icon_state = "health4"
|
||||
if(config.health_threshold_dead to 0)
|
||||
src.healths.icon_state = "health5"
|
||||
else
|
||||
src.healths.icon_state = "health6"
|
||||
if(health >= 200)
|
||||
src.healths.icon_state = "health0"
|
||||
else if(health >= 150)
|
||||
src.healths.icon_state = "health1"
|
||||
else if(health >= 100)
|
||||
src.healths.icon_state = "health2"
|
||||
else if(health >= 50)
|
||||
src.healths.icon_state = "health3"
|
||||
else if(health >= 0)
|
||||
src.healths.icon_state = "health4"
|
||||
else if(health >= config.health_threshold_dead)
|
||||
src.healths.icon_state = "health5"
|
||||
else
|
||||
src.healths.icon_state = "health6"
|
||||
else
|
||||
src.healths.icon_state = "health7"
|
||||
|
||||
|
||||
@@ -226,9 +226,7 @@
|
||||
return
|
||||
visible_message("<span class='notice'>\The [src] pushes [M]'s hand away from their tummy and furrows their brow!</span>")
|
||||
if(prob(5))
|
||||
ai_holder.target = M
|
||||
ai_holder.track_target_position()
|
||||
ai_holder.set_stance(STANCE_FIGHT)
|
||||
ai_holder.give_target(M, urgent = TRUE)
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -455,9 +453,7 @@
|
||||
return
|
||||
visible_message("<span class='notice'>\The [src] pushes [M]'s hand away from their tummy and furrows their brow, frantically pressing at the buttons [M] so carelessly pushed!</span>")
|
||||
if(prob(5))
|
||||
ai_holder.target = M
|
||||
ai_holder.track_target_position()
|
||||
ai_holder.set_stance(STANCE_FIGHT)
|
||||
ai_holder.give_target(M, urgent = TRUE)
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -557,9 +553,7 @@
|
||||
return
|
||||
visible_message("<span class='notice'>\The [src] pushes [M]'s hand away from their tummy and furrows their brow!</span>")
|
||||
if(prob(5))
|
||||
ai_holder.target = M
|
||||
ai_holder.track_target_position()
|
||||
ai_holder.set_stance(STANCE_FIGHT)
|
||||
ai_holder.give_target(M, urgent = TRUE)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
if( ishuman(AM) )
|
||||
if(!stat)
|
||||
var/mob/M = AM
|
||||
M.visible_message(span_blue("\icon[src][bicon(src)] Squeek!"))
|
||||
M.visible_message(span_blue("[icon2html(src,viewers(src))] Squeek!"))
|
||||
playsound(src, 'sound/effects/mouse_squeak.ogg', 35, 1)
|
||||
..()
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
if( ishuman(AM) )
|
||||
if(!stat)
|
||||
var/mob/M = AM
|
||||
M.visible_message(span_blue("\icon[src] Squeek!"))
|
||||
M.visible_message(span_blue("[icon2html(src,viewers(M))] Squeek!"))
|
||||
playsound(src, 'sound/effects/mouse_squeak.ogg', 35, 1)
|
||||
..()
|
||||
|
||||
|
||||
@@ -143,7 +143,7 @@ var/global/list/grub_machine_overlays = list()
|
||||
sparks.start()
|
||||
if(machine_effect)
|
||||
QDEL_NULL(machine_effect)
|
||||
ai_holder.target = null
|
||||
ai_holder.remove_target()
|
||||
powermachine.draining = 1
|
||||
spawn(30)
|
||||
set_AI_busy(FALSE)
|
||||
@@ -305,4 +305,4 @@ var/global/list/grub_machine_overlays = list()
|
||||
grub.eject_from_machine(O)
|
||||
to_chat(user, "<span class='warning'>You disturb a grub nesting in \the [O]!</span>")
|
||||
return
|
||||
return ..()
|
||||
return ..()
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
var/new_name = sanitizeSafe(tgui_input_text(src, "Who would you like to be now?", "Communicator", src.client.prefs.real_name, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(new_name)
|
||||
if(comm)
|
||||
comm.visible_message("<span class='notice'>\icon[comm][bicon(comm)] [src.name] has left, and now you see [new_name].</span>")
|
||||
comm.visible_message("<span class='notice'>[icon2html(comm,viewers(comm))] [src.name] has left, and now you see [new_name].</span>")
|
||||
//Do a bit of logging in-case anyone tries to impersonate other characters for whatever reason.
|
||||
var/msg = "[src.client.key] ([src]) has changed their communicator identity's name to [new_name]."
|
||||
message_admins(msg)
|
||||
|
||||
+32
-5
@@ -2,21 +2,38 @@
|
||||
mob_list -= src
|
||||
dead_mob_list -= src
|
||||
living_mob_list -= src
|
||||
player_list -= src
|
||||
unset_machine()
|
||||
qdel(hud_used)
|
||||
QDEL_NULL(hud_used)
|
||||
clear_fullscreen()
|
||||
if(client)
|
||||
for(var/obj/screen/movable/spell_master/spell_master in spell_masters)
|
||||
qdel(spell_master)
|
||||
remove_screen_obj_references()
|
||||
client.screen = list()
|
||||
client.screen.Cut()
|
||||
if(mind && mind.current == src)
|
||||
spellremove(src)
|
||||
if(!istype(src,/mob/observer)) //CHOMPEdit
|
||||
ghostize() //CHOMPEdit
|
||||
//ChompEDIT start - fix hard qdels
|
||||
QDEL_NULL(plane_holder)
|
||||
..()
|
||||
return QDEL_HINT_HARDDEL_NOW
|
||||
|
||||
if(pulling)
|
||||
stop_pulling() //TG does this on atom/movable but our stop_pulling proc is here so whatever
|
||||
|
||||
previewing_belly = null // from code/modules/vore/eating/mob_ch.dm
|
||||
vore_selected = null // from code/modules/vore/eating/mob_vr
|
||||
|
||||
|
||||
if(mind)
|
||||
if(mind.current == src)
|
||||
mind.current = null
|
||||
if(mind.original == src)
|
||||
mind.original = null
|
||||
|
||||
. = ..()
|
||||
update_client_z(null)
|
||||
//return QDEL_HINT_HARDDEL_NOW
|
||||
|
||||
/mob/proc/remove_screen_obj_references()
|
||||
hands = null
|
||||
@@ -44,7 +61,8 @@
|
||||
set_focus(src) // VOREStation Add - Key Handling
|
||||
hook_vr("mob_new",list(src)) //VOREStation Code
|
||||
update_transform() // Some mobs may start bigger or smaller than normal.
|
||||
return ..()
|
||||
. = ..()
|
||||
//return QDEL_HINT_HARDDEL_NOW Just keep track of mob references. They delete SO much faster now.
|
||||
|
||||
/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
|
||||
var/time = say_timestamp()
|
||||
@@ -1210,6 +1228,15 @@
|
||||
var/exploitmsg = html_decode("\n" + "Has " + I.name + ".")
|
||||
exploit_record += exploitmsg
|
||||
|
||||
|
||||
/obj/Destroy()
|
||||
if(istype(src.loc, /mob))
|
||||
var/mob/holder = src.loc
|
||||
if(src in holder.exploit_addons)
|
||||
holder.exploit_addons -= src
|
||||
. = ..()
|
||||
|
||||
|
||||
/client/proc/check_has_body_select()
|
||||
return mob && mob.hud_used && istype(mob.zone_sel, /obj/screen/zone_sel)
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
plane_masters[VIS_CH_BACKUP] = new /obj/screen/plane_master{plane = PLANE_CH_BACKUP} //Backup implant status
|
||||
plane_masters[VIS_CH_VANTAG] = new /obj/screen/plane_master{plane = PLANE_CH_VANTAG} //Vore Antags
|
||||
|
||||
plane_masters[VIS_AUGMENTED] = new /obj/screen/plane_master/augmented(my_mob) //Augmented reality
|
||||
plane_masters[VIS_AUGMENTED] = new /obj/screen/plane_master/augmented(M = my_mob) //Augmented reality
|
||||
..()
|
||||
|
||||
/////////////////
|
||||
@@ -15,7 +15,7 @@
|
||||
var/state = FALSE //Saves cost with the lists
|
||||
var/mob/my_mob
|
||||
|
||||
/obj/screen/plane_master/augmented/New(var/mob/M)
|
||||
/obj/screen/plane_master/augmented/New(null, var/mob/M)
|
||||
..()
|
||||
my_mob = M
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
|
||||
..()
|
||||
|
||||
if(created_for)
|
||||
del_mannequin(created_for)
|
||||
//if(created_for)
|
||||
//del_mannequin(created_for) No need to delete this, honestly. It saves up hardly any memory in the long run and fucks the GC in the short run.
|
||||
|
||||
if(!spawning)//Here so that if they are spawning and log out, the other procs can play out and they will have a mob to come back to.
|
||||
key = null//We null their key before deleting the mob, so they are properly kicked out.
|
||||
|
||||
@@ -25,6 +25,12 @@
|
||||
verbs |= /mob/proc/insidePanel
|
||||
initialized = TRUE // Explicitly don't use Initialize(). New players join super early and use New()
|
||||
|
||||
|
||||
/mob/new_player/Destroy()
|
||||
if(panel)
|
||||
QDEL_NULL(panel)
|
||||
. = ..()
|
||||
|
||||
/mob/new_player/verb/new_player_panel()
|
||||
set src = usr
|
||||
new_player_panel_proc()
|
||||
@@ -172,11 +178,11 @@
|
||||
if(!client) return 1
|
||||
|
||||
//Make a new mannequin quickly, and allow the observer to take the appearance
|
||||
var/mob/living/carbon/human/dummy/mannequin = new()
|
||||
var/mob/living/carbon/human/dummy/mannequin = get_mannequin(client.ckey)
|
||||
client.prefs.dress_preview_mob(mannequin)
|
||||
var/mob/observer/dead/observer = new(mannequin)
|
||||
observer.moveToNullspace() //Let's not stay in our doomed mannequin
|
||||
qdel(mannequin)
|
||||
//qdel(mannequin)
|
||||
|
||||
spawning = 1
|
||||
if(client.media)
|
||||
|
||||
Reference in New Issue
Block a user