mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-19 11:05:03 +01:00
Skin Masquerade: Epidermal Applicator, Lifelike Quirk, and the Skinmonger Implant (#31185)
* adds the epidermal applicator, lifelike quirk, and skinmonger traitor implant * lint * lint * attack chain fix * more linty fixes * more lint * fix some buggy bugs, synthetic skinned body parts recolor to their host * make emp on skinmonger work, fix a skinmonger bug * make bruising / denting examine text not betray the masquerade * burn away synthetic skin with acid * comment / code structure / description tweaks * i sell pharmaceuticals and pharmaceutical accessories * code review comments * oops * god damn it * god damn it (x2) * Update code/modules/surgery/organs/augments_internal.dm Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com> Signed-off-by: Pooble <90473506+poobsie@users.noreply.github.com> * lower syndi level for implant * Update code/modules/research/designs/medical_designs.dm Co-authored-by: JimKil3 <47290811+JimKil3@users.noreply.github.com> Signed-off-by: Pooble <90473506+poobsie@users.noreply.github.com> * Update code/game/objects/items/tools/epidermal_applicator.dm Co-authored-by: JimKil3 <47290811+JimKil3@users.noreply.github.com> Signed-off-by: Pooble <90473506+poobsie@users.noreply.github.com> * Update code/modules/surgery/organs/organ_external.dm Co-authored-by: JimKil3 <47290811+JimKil3@users.noreply.github.com> Signed-off-by: Pooble <90473506+poobsie@users.noreply.github.com> * Update code/modules/surgery/organs/organ_external.dm Co-authored-by: JimKil3 <47290811+JimKil3@users.noreply.github.com> Signed-off-by: Pooble <90473506+poobsie@users.noreply.github.com> * tweaks for review * Update code/__DEFINES/dcs/datum_signals.dm Co-authored-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Signed-off-by: Pooble <90473506+poobsie@users.noreply.github.com> --------- Signed-off-by: Pooble <90473506+poobsie@users.noreply.github.com> Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com> Co-authored-by: JimKil3 <47290811+JimKil3@users.noreply.github.com> Co-authored-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
This commit is contained in:
@@ -409,6 +409,11 @@ emp_act
|
||||
update_hair()
|
||||
update_fhair()
|
||||
|
||||
if(affecting.has_synthetic_skin)
|
||||
visible_message(SPAN_WARNING("The synthetic skin on [src]'s [affecting.name] bubbles and melts away."), \
|
||||
SPAN_WARNING("The synthetic skin on your [affecting.name] bubbles and melts away."))
|
||||
affecting.remove_synthetic_skin(TRUE)
|
||||
|
||||
UpdateDamageIcon()
|
||||
|
||||
//MELTING INVENTORY ITEMS//
|
||||
|
||||
@@ -116,6 +116,8 @@
|
||||
var/list/quirks = list()
|
||||
/// The cooldown for jumping into a closet or crate
|
||||
COOLDOWN_DECLARE(skittish_cooldown)
|
||||
/// Cache whether or not an IPC appears human during examine to avoid needless recalculation
|
||||
var/ipc_masquerade_status
|
||||
|
||||
/mob/living/carbon/human/fake
|
||||
flags = ABSTRACT
|
||||
|
||||
@@ -53,6 +53,12 @@
|
||||
if(C.species_disguise)
|
||||
displayed_species = C.species_disguise
|
||||
break
|
||||
|
||||
// If an IPC's covered in synthetic skin, they can appear human.
|
||||
if(calculate_ipc_masquerade_status())
|
||||
displayed_species = "Human"
|
||||
examine_color = "#d1aa2e"
|
||||
|
||||
if(skip_jumpsuit && skip_face || HAS_TRAIT(src, TRAIT_NOEXAMINE)) //either obscured or on the nospecies list
|
||||
msg += "!" //omit the species when examining
|
||||
else
|
||||
@@ -122,7 +128,7 @@
|
||||
continue
|
||||
|
||||
if(!ismachineperson(src))
|
||||
if(E.is_robotic())
|
||||
if(E.is_robotic() && !E.has_synthetic_skin)
|
||||
wound_flavor_text["[E.limb_name]"] = "[p_they(TRUE)] [p_have()] a robotic [E.name]!\n"
|
||||
|
||||
else if(E.status & ORGAN_SPLINTED)
|
||||
@@ -256,5 +262,61 @@
|
||||
|
||||
return msg
|
||||
|
||||
/mob/living/carbon/human/proc/calculate_ipc_masquerade_status()
|
||||
if(!ismachineperson(src))
|
||||
return FALSE
|
||||
|
||||
var/all_visible_parts_have_skin = TRUE
|
||||
|
||||
for(var/obj/item/organ/external/limb as anything in bodyparts)
|
||||
if(!limb || !limb.is_robotic())
|
||||
continue
|
||||
|
||||
// If it's covered by clothing then it doesn't need to have skin for the masquerade
|
||||
if(is_bodypart_covered_by_clothing(limb.limb_name))
|
||||
continue
|
||||
|
||||
if(!limb.has_synthetic_skin)
|
||||
return FALSE
|
||||
|
||||
return all_visible_parts_have_skin
|
||||
|
||||
/mob/living/carbon/human/examine_get_brute_message()
|
||||
return !ismachineperson(src) ? "bruising" : "denting"
|
||||
if(!ismachineperson(src) || calculate_ipc_masquerade_status())
|
||||
return "bruising"
|
||||
|
||||
return "denting"
|
||||
|
||||
/// Checks if a body part is covered by clothing
|
||||
/mob/living/carbon/human/proc/is_bodypart_covered_by_clothing(part_name)
|
||||
var/bodypart_clothing_bitflag = bodypart_name_to_clothing_bitflag(part_name)
|
||||
if(!bodypart_clothing_bitflag)
|
||||
return FALSE
|
||||
|
||||
// Masks
|
||||
if(bodypart_clothing_bitflag & HEAD)
|
||||
var/obj/item/clothing/mask/current_mask = wear_mask
|
||||
if(istype(current_mask) && (current_mask.body_parts_covered & bodypart_clothing_bitflag))
|
||||
return TRUE
|
||||
|
||||
// Jumpsuit/uniform
|
||||
var/chest_groin_arms_legs_bitflag = ARMS | LEGS | UPPER_TORSO | LOWER_TORSO
|
||||
if(bodypart_clothing_bitflag & chest_groin_arms_legs_bitflag)
|
||||
if(w_uniform && (w_uniform.body_parts_covered & bodypart_clothing_bitflag))
|
||||
return TRUE
|
||||
if(wear_suit && (wear_suit.body_parts_covered & bodypart_clothing_bitflag))
|
||||
return TRUE
|
||||
|
||||
// Gloves
|
||||
if(bodypart_clothing_bitflag & HANDS)
|
||||
var/obj/item/clothing/gloves/current_gloves = gloves
|
||||
if(istype(current_gloves) && (current_gloves.body_parts_covered & bodypart_clothing_bitflag))
|
||||
return TRUE
|
||||
|
||||
// Shoes
|
||||
if(bodypart_clothing_bitflag & FEET)
|
||||
var/obj/item/clothing/shoes/current_shoes = shoes
|
||||
if(istype(current_shoes) && (current_shoes.body_parts_covered & bodypart_clothing_bitflag))
|
||||
return TRUE
|
||||
|
||||
return FALSE
|
||||
|
||||
@@ -198,6 +198,8 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
|
||||
base_icon = chest.get_icon(skeleton)
|
||||
|
||||
for(var/obj/item/organ/external/part in bodyparts)
|
||||
part.sync_colour_to_human(src)
|
||||
|
||||
// We just drew the chest, don't draw it twice.
|
||||
if(part == chest)
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user