mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-09 16:12:17 +00:00
178 lines
6.5 KiB
Plaintext
178 lines
6.5 KiB
Plaintext
/obj/item/deadringer
|
|
name = "silver pocket watch"
|
|
desc = "A fancy silver-plated digital pocket watch. Looks expensive."
|
|
icon = 'icons/obj/deadringer.dmi'
|
|
icon_state = "deadringer"
|
|
w_class = ITEMSIZE_SMALL
|
|
slot_flags = SLOT_ID | SLOT_BELT | SLOT_TIE
|
|
origin_tech = list(TECH_ILLEGAL = 3)
|
|
var/activated = 0
|
|
var/timer = 0
|
|
var/bruteloss_prev = 999999
|
|
var/fireloss_prev = 999999
|
|
var/mob/living/carbon/human/corpse = null
|
|
var/mob/living/carbon/human/watchowner = null
|
|
|
|
|
|
/obj/item/deadringer/Initialize(mapload)
|
|
. = ..()
|
|
START_PROCESSING(SSobj, src)
|
|
|
|
/obj/item/deadringer/Destroy() //just in case some smartass tries to stay invisible by destroying the watch
|
|
reveal()
|
|
STOP_PROCESSING(SSobj, src)
|
|
. = ..()
|
|
|
|
/obj/item/deadringer/dropped(mob/user)
|
|
..()
|
|
if(timer > 20)
|
|
reveal()
|
|
watchowner = null
|
|
return
|
|
|
|
/obj/item/deadringer/attack_self(var/mob/living/user as mob)
|
|
var/mob/living/H = src.loc
|
|
if (!ishuman(H))
|
|
to_chat(H, span_blue("You have no clue what to do with this thing."))
|
|
return
|
|
if(!activated)
|
|
if(timer == 0)
|
|
to_chat(H, span_blue("You press a small button on [src]'s side. It starts to hum quietly."))
|
|
bruteloss_prev = H.getBruteLoss()
|
|
fireloss_prev = H.getFireLoss()
|
|
activated = 1
|
|
return
|
|
else
|
|
to_chat(H, span_blue("You press a small button on [src]'s side. It buzzes a little."))
|
|
return
|
|
if(activated)
|
|
to_chat(H, span_blue("You press a small button on [src]'s side. It stops humming."))
|
|
activated = 0
|
|
return
|
|
|
|
/obj/item/deadringer/process()
|
|
if(activated)
|
|
if(ishuman(src.loc))
|
|
var/mob/living/carbon/human/H = src.loc
|
|
watchowner = H
|
|
if(isbelly(watchowner.loc)) //No spawning people in bellies.
|
|
return
|
|
if(H.getBruteLoss() > bruteloss_prev || H.getFireLoss() > fireloss_prev)
|
|
deathprevent()
|
|
activated = 0
|
|
if(watchowner.isSynthetic())
|
|
to_chat(watchowner, span_blue("You fade into nothingness! [src]'s screen blinks, being unable to copy your synthetic body!"))
|
|
else
|
|
to_chat(watchowner, span_blue("You fade into nothingness, leaving behind a fake body!"))
|
|
icon_state = "deadringer_cd"
|
|
timer = 50
|
|
return
|
|
if(timer > 0)
|
|
timer--
|
|
if(timer == 20)
|
|
reveal()
|
|
if(corpse)
|
|
new /obj/effect/effect/smoke/chem(corpse.loc)
|
|
qdel(corpse)
|
|
if(timer == 0)
|
|
icon_state = "deadringer"
|
|
return
|
|
|
|
/obj/item/deadringer/proc/deathprevent()
|
|
for(var/mob/living/simple_mob/D in oviewers(7, src))
|
|
if(!D.has_AI())
|
|
continue
|
|
D.ai_holder.lose_target()
|
|
watchowner.alpha = 7 //10 is too visible, 5 is too in-visible... 7 is difficult to see but manageable.
|
|
makeacorpse(watchowner)
|
|
return
|
|
|
|
/obj/item/deadringer/proc/reveal()
|
|
if(watchowner)
|
|
watchowner.alpha = 255
|
|
playsound(src, 'sound/effects/uncloak.ogg', 35, 1, -1)
|
|
return
|
|
|
|
/obj/item/deadringer/proc/makeacorpse(var/mob/living/carbon/human/H)
|
|
if(H.isSynthetic())
|
|
return
|
|
corpse = new /mob/living/carbon/human(H.loc)
|
|
QDEL_SWAP(corpse.dna,H.dna.Clone())
|
|
var/obj/item/clothing/temp = null
|
|
if(H.get_equipped_item(slot_w_uniform))
|
|
corpse.equip_to_slot_or_del(new /obj/item/clothing/under/chameleon/changeling(corpse), slot_w_uniform)
|
|
temp = corpse.get_equipped_item(slot_w_uniform)
|
|
var/obj/item/clothing/c_type = H.get_equipped_item(slot_w_uniform)
|
|
temp.disguise(c_type.type)
|
|
temp.canremove = FALSE
|
|
if(H.get_equipped_item(slot_wear_suit))
|
|
corpse.equip_to_slot_or_del(new /obj/item/clothing/suit/chameleon/changeling(corpse), slot_wear_suit)
|
|
temp = corpse.get_equipped_item(slot_wear_suit)
|
|
var/obj/item/clothing/c_type = H.get_equipped_item(slot_wear_suit)
|
|
temp.disguise(c_type.type)
|
|
temp.canremove = FALSE
|
|
if(H.get_equipped_item(slot_shoes))
|
|
corpse.equip_to_slot_or_del(new /obj/item/clothing/shoes/chameleon/changeling(corpse), slot_shoes)
|
|
temp = corpse.get_equipped_item(slot_shoes)
|
|
var/obj/item/clothing/c_type = H.get_equipped_item(slot_shoes)
|
|
temp.disguise(c_type.type)
|
|
temp.canremove = FALSE
|
|
if(H.get_equipped_item(slot_gloves))
|
|
corpse.equip_to_slot_or_del(new /obj/item/clothing/gloves/chameleon/changeling(corpse), slot_gloves)
|
|
temp = corpse.get_equipped_item(slot_gloves)
|
|
var/obj/item/clothing/c_type = H.get_equipped_item(slot_gloves)
|
|
temp.disguise(c_type.type)
|
|
temp.canremove = FALSE
|
|
if(H.get_equipped_item(slot_l_ear))
|
|
temp = H.get_equipped_item(slot_l_ear)
|
|
corpse.equip_to_slot_or_del(new temp.type(corpse), slot_l_ear)
|
|
temp = corpse.get_equipped_item(slot_l_ear)
|
|
temp.canremove = FALSE
|
|
if(H.get_equipped_item(slot_glasses))
|
|
corpse.equip_to_slot_or_del(new /obj/item/clothing/glasses/chameleon/changeling(corpse), slot_glasses)
|
|
temp = corpse.get_equipped_item(slot_glasses)
|
|
var/obj/item/clothing/c_type = H.get_equipped_item(slot_glasses)
|
|
temp.disguise(c_type.type)
|
|
temp.canremove = FALSE
|
|
if(H.get_equipped_item(slot_wear_mask))
|
|
corpse.equip_to_slot_or_del(new /obj/item/clothing/mask/chameleon/changeling(corpse), slot_wear_mask)
|
|
temp = corpse.get_equipped_item(slot_wear_mask)
|
|
var/obj/item/clothing/c_type = H.get_equipped_item(slot_wear_mask)
|
|
temp.disguise(c_type.type)
|
|
temp.canremove = FALSE
|
|
if(H.get_equipped_item(slot_head))
|
|
corpse.equip_to_slot_or_del(new /obj/item/clothing/head/chameleon/changeling(corpse), slot_head)
|
|
temp = corpse.get_equipped_item(slot_head)
|
|
var/obj/item/clothing/c_type = H.get_equipped_item(slot_head)
|
|
temp.disguise(c_type.type)
|
|
temp.canremove = FALSE
|
|
if(H.get_equipped_item(slot_belt))
|
|
corpse.equip_to_slot_or_del(new /obj/item/storage/belt/chameleon/changeling(corpse), slot_belt)
|
|
temp = corpse.get_equipped_item(slot_belt)
|
|
var/obj/item/clothing/c_type = H.get_equipped_item(slot_belt)
|
|
temp.disguise(c_type.type)
|
|
temp.canremove = FALSE
|
|
if(H.get_equipped_item(slot_back))
|
|
corpse.equip_to_slot_or_del(new /obj/item/storage/backpack/chameleon/changeling(corpse), slot_back)
|
|
temp = corpse.get_equipped_item(slot_back)
|
|
var/obj/item/clothing/c_type = H.get_equipped_item(slot_back)
|
|
temp.disguise(c_type.type)
|
|
temp.canremove = FALSE
|
|
corpse.identifying_gender = H.identifying_gender
|
|
corpse.flavor_texts = H.flavor_texts.Copy()
|
|
corpse.real_name = H.real_name
|
|
corpse.name = H.name
|
|
corpse.emote("deathgasp") //Done after the name is set.
|
|
corpse.death(1) //Kills the new mob
|
|
corpse.set_species(corpse.dna.species)
|
|
corpse.change_hair(H.h_style)
|
|
corpse.change_facial_hair(H.f_style)
|
|
corpse.change_hair_color(H.r_hair, H.g_hair, H.b_hair)
|
|
corpse.change_facial_hair_color(H.r_facial, H.g_facial, H.b_facial)
|
|
corpse.change_skin_color(H.r_skin, H.g_skin, H.b_skin)
|
|
corpse.adjustFireLoss(H.getFireLoss())
|
|
corpse.adjustBruteLoss(H.getBruteLoss())
|
|
corpse.UpdateAppearance()
|
|
corpse.regenerate_icons()
|
|
QDEL_NULL_LIST(corpse.internal_organs)
|