From 3c7ca73c0481294ed7a2746cbc90dcef90f38d91 Mon Sep 17 00:00:00 2001 From: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Date: Mon, 6 Oct 2025 14:30:31 -0400 Subject: [PATCH] Gives many cybernetics on mob sprites. Adds synthetic skin to allow hiding of them. (#30098) * the first half * rest of the skin * duplicate * new sprite / updated description / no more yell at me * the rest of the owl * oops, fixed --- code/__DEFINES/misc_defines.dm | 39 ++++----- .../objects/items/stacks/synthetic_skin.dm | 44 ++++++++++ code/game/objects/items/storage/firstaid.dm | 1 + .../mob/living/carbon/human/human_defense.dm | 8 ++ .../living/carbon/human/human_update_icons.dm | 14 ++++ code/modules/mob/living/living_defense.dm | 6 +- .../research/designs/medical_designs.dm | 33 ++++++++ code/modules/surgery/organs/augments_arms.dm | 75 ++++++++++++++++++ .../surgery/organs/augments_internal.dm | 34 +++++++- code/modules/surgery/organs/autosurgeon.dm | 5 ++ code/modules/surgery/organs/organ_external.dm | 40 ++++++++++ code/modules/surgery/organs/organ_internal.dm | 47 ++++++++++- icons/mob/human_races/robotic.dmi | Bin 2226 -> 5315 bytes icons/obj/surgery.dmi | Bin 43995 -> 44719 bytes paradise.dme | 1 + 15 files changed, 325 insertions(+), 22 deletions(-) create mode 100644 code/game/objects/items/stacks/synthetic_skin.dm diff --git a/code/__DEFINES/misc_defines.dm b/code/__DEFINES/misc_defines.dm index a407bb9657e..d74adff7d5d 100644 --- a/code/__DEFINES/misc_defines.dm +++ b/code/__DEFINES/misc_defines.dm @@ -191,24 +191,25 @@ #define FOAM_REACT_BEFORE_SPREAD (1<<3) //Human Overlays Indexes///////// -#define EYES_OVERLAY_LAYER 50 -#define MISC_LAYER 49 // Handles eye_shine() -> cybernetic eyes, specific eye traits. -#define WING_LAYER 48 -#define WING_UNDERLIMBS_LAYER 47 -#define MUTANTRACE_LAYER 46 -#define TAIL_UNDERLIMBS_LAYER 45 //Tail split-rendering. -#define LIMBS_LAYER 44 -#define MARKINGS_LAYER 43 -#define INTORGAN_LAYER 42 -#define UNDERWEAR_LAYER 41 -#define MUTATIONS_LAYER 40 -#define H_DAMAGE_LAYER 39 -#define UNIFORM_LAYER 38 -#define ID_LAYER 37 -#define HANDS_LAYER 36 //Exists to overlay hands over jumpsuits -#define SHOES_LAYER 35 -#define L_FOOT_BLOOD_LAYER 34 // Blood overlay separation Left-Foot -#define R_FOOT_BLOOD_LAYER 33 // Blood overlay separation Right-Foot +#define EYES_OVERLAY_LAYER 51 +#define MISC_LAYER 50 // Handles eye_shine() -> cybernetic eyes, specific eye traits. +#define WING_LAYER 49 +#define WING_UNDERLIMBS_LAYER 48 +#define MUTANTRACE_LAYER 47 +#define TAIL_UNDERLIMBS_LAYER 46 //Tail split-rendering. +#define LIMBS_LAYER 45 +#define MARKINGS_LAYER 44 +#define INTORGAN_LAYER 43 +#define UNDERWEAR_LAYER 42 +#define MUTATIONS_LAYER 41 +#define H_DAMAGE_LAYER 40 +#define UNIFORM_LAYER 39 +#define ID_LAYER 38 +#define HANDS_LAYER 37 //Exists to overlay hands over jumpsuits +#define SHOES_LAYER 36 +#define L_FOOT_BLOOD_LAYER 35 // Blood overlay separation Left-Foot +#define R_FOOT_BLOOD_LAYER 34 // Blood overlay separation Right-Foot +#define HAND_INTORGAN_LAYER 33 #define GLOVES_LAYER 32 #define L_HAND_BLOOD_LAYER 31 // Blood overlay separation Left-Hand #define R_HAND_BLOOD_LAYER 30 // Blood overlay separation Right-Hand @@ -241,7 +242,7 @@ #define HALO_LAYER 3 //blood cult ascended halo, because there's currently no better solution for adding/removing #define FIRE_LAYER 2 //If you're on fire #define FROZEN_LAYER 1 -#define TOTAL_LAYERS 50 +#define TOTAL_LAYERS 51 ///Access Region Codes/// #define REGION_ALL 0 diff --git a/code/game/objects/items/stacks/synthetic_skin.dm b/code/game/objects/items/stacks/synthetic_skin.dm new file mode 100644 index 00000000000..82b1378dc6c --- /dev/null +++ b/code/game/objects/items/stacks/synthetic_skin.dm @@ -0,0 +1,44 @@ +/obj/item/stack/synthetic_skin + name = "level-1 synthetic skin plate" + desc = "A sheet of level-1 synthetic skin plating. Used as a cheap covering for cybernetic organs, is able to match the colour of the limb but not the texture." + icon = 'icons/obj/surgery.dmi' + icon_state = "skin_1" + w_class = WEIGHT_CLASS_SMALL + singular_name = "skin plate" + max_amount = 10 + merge_type = /obj/item/stack/synthetic_skin + var/skin_level = 1 + +/obj/item/stack/synthetic_skin/attack__legacy__attackchain(mob/living/M as mob, mob/user as mob) + if(!ishuman(M) || !istype(user)) + return FALSE + var/mob/living/carbon/human/H = M + var/obj/item/organ/external/external_limb = H.get_organ(user.zone_selected) + if(external_limb) + user.visible_message("[user] starts to apply [src] on [H]'s [external_limb.name]...") + if(!do_mob(user, H, 5 SECONDS)) + return FALSE + use(1) + if(external_limb.apply_augmented_skin(skin_level)) + user.visible_message("[user] applies some [src] on [H]'s [external_limb.name].") + return TRUE + else + to_chat(user, "You fail to apply a better skin cover to [H]'s [external_limb.name].") + return FALSE + +/obj/item/stack/synthetic_skin/level_2 + name = "level-2 synthetic skin patch" + desc = "A sealed patch of synthetic skin. An improvement over the basic version, more water resistant and less prone to peeling off." + icon_state = "skin_2" + merge_type = /obj/item/stack/synthetic_skin/level_2 + singular_name = "skin patch" + skin_level = 2 + + +/obj/item/stack/synthetic_skin/level_3 + name = "level-3 synthetic skin foam" + desc = "A nanite foam injector meeting the requirements of level-3 synthetic skin. The best one can buy, best used to hide major cybernetic alterations, for beauty or for infiltration." + icon_state = "skin_3" + merge_type = /obj/item/stack/synthetic_skin/level_3 + singular_name = "nanite foam" + skin_level = 3 diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index f9aaef94fb6..4cc16ad2a2b 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -155,6 +155,7 @@ new /obj/item/stack/cable_coil(src) new /obj/item/stack/cable_coil(src) new /obj/item/robotanalyzer(src) + new /obj/item/stack/synthetic_skin(src, 3) /obj/item/storage/firstaid/machine/empty/populate_contents() return diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 5015bf2d994..5411923516d 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -875,3 +875,11 @@ emp_act to_contaminate -= to_contaminate[1] for(var/atom/thing in to_contaminate) thing.AddComponent(/datum/component/radioactive, intensity, source, emission_type) + +/mob/living/carbon/human/proc/peel_off_synthetic_skin() + var/obj/item/organ/external/external_limb = get_organ(zone_selected) + if(external_limb && external_limb.augmented_skin_cover_level) + visible_message("[src] begins to pull at their skin...") + if(!do_mob(src, src, 5 SECONDS)) + return + external_limb.break_augmented_skin(TRUE) diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index d44871697cd..711fa84aae2 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -1356,6 +1356,20 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) overlays_standing[INTORGAN_LAYER] = standing apply_overlay(INTORGAN_LAYER) + update_hand_int_organs() + +/mob/living/carbon/human/proc/update_hand_int_organs() + remove_overlay(HAND_INTORGAN_LAYER) + + var/list/standing = list() + for(var/organ in internal_organs) + var/obj/item/organ/internal/I = organ + var/extra_render = I.extra_render() + if(extra_render) + standing += extra_render + + overlays_standing[HAND_INTORGAN_LAYER] = standing + apply_overlay(HAND_INTORGAN_LAYER) /mob/living/carbon/human/handle_transform_change() ..() diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 7f41a8ef6e1..a924c29823d 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -294,7 +294,11 @@ // End BS12 momentum-transfer code. /mob/living/proc/grabbedby(mob/living/carbon/user, supress_message = FALSE) - if(user == src || anchored) + if(user == src && ishuman(user)) + var/mob/living/carbon/human/self = user + INVOKE_ASYNC(self, TYPE_PROC_REF(/mob/living/carbon/human, peel_off_synthetic_skin)) + return + if(anchored) return FALSE if(!(status_flags & CANPUSH)) return FALSE diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 3369b429aee..33a0c93b6a4 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -174,6 +174,39 @@ build_path = /obj/item/stack/nanopaste category = list("Medical") +/datum/design/skin_1 + name = "level-1 synthetic skin plate" + desc = "A sheet of level-1 synthetic skin plating. Used as a cheap covering for cybernetic organs, is able to match the colour of the limb but not the texture." + id = "skin_1" + req_tech = list("biotech" = 1, "materials" = 1) + build_type = PROTOLATHE | MECHFAB + construction_time = 20 + materials = list(MAT_METAL = 1000, MAT_GLASS = 500) + build_path = /obj/item/stack/synthetic_skin + category = list("Medical") + +/datum/design/skin_2 + name = "level-2 synthetic skin patch" + desc = "A sealed patch of synthetic skin. An improvement over the basic version, more water resistant and less prone to peeling off." + id = "skin_2" + req_tech = list("biotech" = 5, "materials" = 5) + build_type = PROTOLATHE | MECHFAB + construction_time = 40 + materials = list(MAT_METAL = 2000, MAT_GLASS = 1000, MAT_TITANIUM = 250) + build_path = /obj/item/stack/synthetic_skin/level_2 + category = list("Medical") + +/datum/design/skin_3 + name = "level-3 synthetic skin foam" + desc = "A nanite foam injector meeting the requirements of level-3 synthetic skin. The best one can buy, best used to hide major cybernetic alterations, for beauty or for infiltration." + id = "skin_3" + req_tech = list("biotech" = 7, "materials" = 7) + build_type = PROTOLATHE | MECHFAB + construction_time = 60 + materials = list(MAT_METAL = 2500, MAT_GLASS = 2000, MAT_TITANIUM = 500, MAT_BLUESPACE = 250) + build_path = /obj/item/stack/synthetic_skin/level_3 + category = list("Medical") + /datum/design/reagent_scanner name = "Reagent Scanner" desc = "A device for identifying chemicals." diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index d04f2b78897..a8cb43c31a3 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -14,6 +14,7 @@ var/obj/item/holder = null // You can use this var for item path, it would be converted into an item on New() + /obj/item/organ/internal/cyberimp/arm/New() ..() if(ispath(holder)) @@ -66,6 +67,34 @@ Retract() ..() +/obj/item/organ/internal/cyberimp/arm/proc/get_overlay_state(image_layer) + return "[augment_icon][parent_organ == BODY_ZONE_L_ARM ? "_left" : "_right"]" + +/obj/item/organ/internal/cyberimp/arm/render() + . = ..() + if(!.) + return + + var/mutable_appearance/arm_overlay = mutable_appearance( + icon = augment_state, + icon_state = get_overlay_state(), + layer = -INTORGAN_LAYER, + ) + return arm_overlay + +/obj/item/organ/internal/cyberimp/arm/extra_render() + . = ..() + if(!.) + return + var/mutable_appearance/hand_overlay = mutable_appearance( + icon = augment_state, + icon_state = "[get_overlay_state()]_hand", + layer = -HAND_INTORGAN_LAYER, + ) + return hand_overlay + + + /obj/item/organ/internal/cyberimp/arm/proc/retract_to_linked_implant() SIGNAL_HANDLER if(holder && holder == owner.get_active_hand()) @@ -231,6 +260,8 @@ contents = newlist(/obj/item/screwdriver/cyborg, /obj/item/wrench/cyborg, /obj/item/weldingtool/largetank/cyborg, /obj/item/crowbar/cyborg, /obj/item/wirecutters/cyborg, /obj/item/multitool/cyborg) actions_types = list(/datum/action/item_action/organ_action/toggle/utility_belt) + augment_icon = "toolkit_engi" + do_extra_render = TRUE /obj/item/organ/internal/cyberimp/arm/toolset/l parent_organ = "l_arm" @@ -253,6 +284,8 @@ origin_tech = "materials=5;engineering=5;plasmatech=5;powerstorage=4;abductor=3" contents = newlist(/obj/item/screwdriver/abductor, /obj/item/wirecutters/abductor, /obj/item/crowbar/abductor, /obj/item/wrench/abductor, /obj/item/weldingtool/abductor, /obj/item/multitool/abductor) actions_types = list(/datum/action/item_action/organ_action/toggle/abductor_belt) + augment_icon = "toolkit_engi" + do_extra_render = TRUE /obj/item/organ/internal/cyberimp/arm/toolset_abductor/l parent_organ = "l_arm" @@ -268,6 +301,8 @@ origin_tech = "materials=5;engineering=5;biotech=5;powerstorage=4;abductor=2" contents = newlist(/obj/item/mop/advanced/abductor, /obj/item/soap/syndie/abductor, /obj/item/lightreplacer/bluespace/abductor, /obj/item/holosign_creator/janitor, /obj/item/melee/flyswatter/abductor, /obj/item/reagent_containers/spray/cleaner/safety/abductor) actions_types = list(/datum/action/item_action/organ_action/toggle/abductor_belt) + augment_icon = "toolkit_jani" + do_extra_render = TRUE /obj/item/organ/internal/cyberimp/arm/janitorial_abductor/l parent_organ = "l_arm" @@ -279,6 +314,8 @@ origin_tech = "materials=5;engineering=5;plasmatech=5;powerstorage=4;abductor=2" contents = newlist(/obj/item/retractor/alien, /obj/item/hemostat/alien, /obj/item/bonesetter/alien, /obj/item/scalpel/laser/alien, /obj/item/circular_saw/alien, /obj/item/bonegel/alien, /obj/item/fix_o_vein/alien, /obj/item/surgicaldrill/alien) actions_types = list(/datum/action/item_action/organ_action/toggle/abductor_belt) + augment_icon = "toolkit_med" + do_extra_render = TRUE /obj/item/organ/internal/cyberimp/arm/surgical_abductor/l parent_organ = "l_arm" @@ -297,8 +334,11 @@ name = "integrated medical beamgun" desc = "A cybernetic implant that allows the user to project a healing beam from their hand." contents = newlist(/obj/item/gun/medbeam) + icon_state = "toolkit_surgical" origin_tech = "materials=5;combat=2;biotech=5;powerstorage=4;syndicate=1" actions_types = list(/datum/action/item_action/organ_action/toggle/medibeam) + augment_icon = "toolkit_med" + do_extra_render = TRUE /datum/action/item_action/organ_action/toggle/flash button_icon = 'icons/obj/device.dmi' @@ -310,6 +350,8 @@ contents = newlist(/obj/item/flash/armimplant) origin_tech = "materials=4;combat=3;biotech=4;magnets=4;powerstorage=3" actions_types = list(/datum/action/item_action/organ_action/toggle/flash) + augment_icon = "toolkit" + do_extra_render = TRUE /obj/item/organ/internal/cyberimp/arm/flash/New() ..() @@ -322,6 +364,8 @@ desc = "An illegal combat implant that allows the user to administer disabling shocks from their arm." contents = newlist(/obj/item/borg/stun) origin_tech = "materials=3;combat=5;biotech=4;powerstorage=4;syndicate=3" + augment_icon = "toolkit" + do_extra_render = TRUE /obj/item/organ/internal/cyberimp/arm/combat name = "combat cybernetics implant" @@ -355,6 +399,8 @@ contents = newlist(/obj/item/retractor/augment, /obj/item/hemostat/augment, /obj/item/cautery/augment, /obj/item/bonesetter/augment, /obj/item/scalpel/augment, /obj/item/circular_saw/augment, /obj/item/bonegel/augment, /obj/item/fix_o_vein/augment, /obj/item/surgicaldrill/augment) origin_tech = "materials=3;engineering=3;biotech=3;programming=2;magnets=3" actions_types = list(/datum/action/item_action/organ_action/toggle/dufflebag_med) + augment_icon = "toolkit_med" + do_extra_render = TRUE /obj/item/organ/internal/cyberimp/arm/surgery/l parent_organ = "l_arm" @@ -371,6 +417,8 @@ contents = newlist(/obj/item/mop/advanced, /obj/item/soap, /obj/item/lightreplacer, /obj/item/holosign_creator/janitor, /obj/item/melee/flyswatter, /obj/item/reagent_containers/spray/cleaner/safety) origin_tech = "materials=3;engineering=4;biotech=3" actions_types = list(/datum/action/item_action/organ_action/toggle/janibelt) + augment_icon = "toolkit_jani" + do_extra_render = TRUE /obj/item/organ/internal/cyberimp/arm/janitorial/l parent_organ = "l_arm" @@ -401,6 +449,8 @@ contents = newlist(/obj/item/plant_analyzer, /obj/item/cultivator, /obj/item/hatchet, /obj/item/shovel/spade, /obj/item/reagent_containers/spray/weedspray, /obj/item/reagent_containers/spray/pestspray) origin_tech = "materials=3;engineering=4;biotech=3" actions_types = list(/datum/action/item_action/organ_action/toggle/botanybelt) + augment_icon = "toolkit_hydro" + do_extra_render = TRUE /obj/item/organ/internal/cyberimp/arm/botanical/l parent_organ = "l_arm" @@ -498,6 +548,8 @@ contents = newlist(/obj/item/melee/classic_baton) actions_types = list(/datum/action/item_action/organ_action/toggle/telebaton) + augment_icon = "toolkit" + do_extra_render = TRUE /datum/action/item_action/organ_action/toggle/advanced_mop button_icon = 'icons/obj/janitor.dmi' @@ -506,9 +558,12 @@ /obj/item/organ/internal/cyberimp/arm/advmop name = "advanced mop implant" desc = "Advanced mop implant. Does what it says on the tin" // A better description + icon_state = "toolkit_janitor" contents = newlist(/obj/item/mop/advanced) actions_types = list(/datum/action/item_action/organ_action/toggle/advanced_mop) + augment_icon = "toolkit_jani" + do_extra_render = TRUE /obj/item/organ/internal/cyberimp/arm/cargo name = "integrated cargo implant" @@ -620,6 +675,8 @@ actions_types = list(/datum/action/item_action/organ_action/toggle/razorwire) origin_tech = "combat=5;biotech=5;syndicate=2" stealth_level = 1 // Hidden from health analyzers + augment_icon = "razor" // Note: By default the autosurgeons apply the highest level of cover plating. + do_extra_render = TRUE /obj/item/organ/internal/cyberimp/arm/razorwire/examine_more(mob/user) . = ..() @@ -674,6 +731,8 @@ contents = newlist(/obj/item/gun/projectile/revolver/doublebarrel/shell_launcher) icon_state = "shell_cannon" actions_types = list(/datum/action/item_action/organ_action/toggle/shell_cannon) + augment_icon = "razor" + do_extra_render = TRUE /obj/item/organ/internal/cyberimp/arm/shell_launcher/emp_act(severity) if(!owner) @@ -737,6 +796,8 @@ contents = newlist(/obj/item/shield/v1_arm) actions_types = list(/datum/action/item_action/organ_action/toggle/v1_arm) + augment_icon = "v1_arm" + do_extra_render = TRUE var/disabled = FALSE /obj/item/organ/internal/cyberimp/arm/v1_arm/emp_act(severity) @@ -757,6 +818,15 @@ return FALSE ..() +/obj/item/organ/internal/cyberimp/arm/v1_arm/render() + if(isvox(owner)) + augment_icon = "v1_arm_vox" + else if(isdrask(owner)) + augment_icon = "v1_arm_drask" + else + augment_icon = "v1_arm" + return ..() + /obj/item/shield/v1_arm name = "vortex feedback arm" desc = "A modification to a users arm, allowing them to use a vortex core energy feedback, to parry, reflect, and even empower projectile attacks. Rumors that it runs on the user's blood are unconfirmed." @@ -865,6 +935,7 @@ slot = "l_arm_device" actions_types = list() + augment_icon = "strongarm" var/datum/martial_art/muscle_implant/muscle_implant /obj/item/organ/internal/cyberimp/arm/muscle/Initialize(mapload) @@ -962,6 +1033,8 @@ contents = newlist(/obj/item/melee/mantis_blade/syndicate) icon_state = "syndie_mantis" icon = 'icons/obj/weapons/melee.dmi' + augment_icon = "razor" + do_extra_render = TRUE /obj/item/organ/internal/cyberimp/arm/syndie_mantis/l parent_organ = "l_arm" @@ -973,6 +1046,8 @@ contents = newlist(/obj/item/melee/mantis_blade/nt) icon_state = "mantis" icon = 'icons/obj/weapons/melee.dmi' + augment_icon = "razor" + do_extra_render = TRUE /obj/item/organ/internal/cyberimp/arm/nt_mantis/l parent_organ = "l_arm" diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 370e8aa97f9..730f50d7606 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -6,6 +6,7 @@ var/implant_overlay var/crit_fail = FALSE //Used by certain implants to disable them. tough = TRUE // Immune to damage + augment_state ='icons/mob/human_races/robotic.dmi' /obj/item/organ/internal/cyberimp/New(mob/M = null) . = ..() @@ -330,6 +331,8 @@ emp_proof = TRUE actions_types = list(/datum/action/item_action/organ_action/toggle/sensory_enhancer) origin_tech = "combat=6;biotech=6;syndicate=4" + augment_icon = "sandy" + always_show_augment = TRUE // A bit too big and bright to hide with synthetic skin. ///The icon state used for the on mob sprite. Default is sandy. Drask and vox have their own unique sprites var/custom_mob_sprite = "sandy" COOLDOWN_DECLARE(sensory_enhancer_cooldown) @@ -363,13 +366,16 @@ REMOVE_TRAIT(M, TRAIT_MEPHEDRONE_ADAPTED, "[UID()]") /obj/item/organ/internal/cyberimp/brain/sensory_enhancer/render() + . = ..() + if(!.) + return if(isvox(owner)) custom_mob_sprite = "vox_sandy" else if(isdrask(owner)) custom_mob_sprite = "drask_sandy" else custom_mob_sprite = "sandy" - var/mutable_appearance/our_MA = mutable_appearance('icons/mob/human_races/robotic.dmi', icon_state, layer = -INTORGAN_LAYER) + var/mutable_appearance/our_MA = mutable_appearance(augment_state, custom_mob_sprite, layer = -INTORGAN_LAYER) return our_MA /obj/item/organ/internal/cyberimp/brain/sensory_enhancer/emp_act(severity) @@ -581,6 +587,14 @@ slot = "breathing_tube" w_class = WEIGHT_CLASS_TINY origin_tech = "materials=2;biotech=3" + augment_icon = "breathing_tube" + +/obj/item/organ/internal/cyberimp/mouth/breathing_tube/render() + . = ..() + if(!.) + return + var/mutable_appearance/our_MA = mutable_appearance(augment_state, augment_icon, layer = -INTORGAN_LAYER) + return our_MA /obj/item/organ/internal/cyberimp/mouth/breathing_tube/emp_act(severity) if(emp_proof) @@ -607,6 +621,7 @@ var/disabled_by_emp = FALSE slot = "stomach" origin_tech = "materials=2;powerstorage=2;biotech=2" + augment_icon = "nutripump" /obj/item/organ/internal/cyberimp/chest/nutriment/examine(mob/user) . = ..() @@ -646,6 +661,14 @@ synthesizing = FALSE addtimer(CALLBACK(src, PROC_REF(emp_cool)), 60 SECONDS) +/obj/item/organ/internal/cyberimp/chest/nutriment/render() + . = ..() + if(!.) + return + var/mutable_appearance/our_MA = mutable_appearance(augment_state, augment_icon, layer = -INTORGAN_LAYER) + return our_MA + + /obj/item/organ/internal/cyberimp/chest/nutriment/plus name = "Nutriment pump implant PLUS" desc = "This implant will synthesize a small amount of nutriment and pumps it directly into your bloodstream when you are hungry." @@ -653,6 +676,7 @@ hunger_threshold = NUTRITION_LEVEL_HUNGRY poison_amount = 10 origin_tech = "materials=4;powerstorage=3;biotech=3" + augment_icon = "nutripump_adv" /obj/item/organ/internal/cyberimp/chest/nutriment/hardened name = "hardened nutriment pump implant" @@ -669,6 +693,7 @@ implant_overlay = null origin_tech = "materials=5;programming=5;biotech=6" slot = "heartdrive" + augment_icon = "reviver" /// How long the implant will go on cooldown for once the user has exited crit, in seconds. var/revive_cost = 0 SECONDS /// Are we in the progress of healing the user? @@ -692,6 +717,13 @@ . = ..() desc += " The implant has been hardened. It is invulnerable to EMPs." +/obj/item/organ/internal/cyberimp/chest/reviver/render() + . = ..() + if(!.) + return + var/mutable_appearance/our_MA = mutable_appearance(augment_state, augment_icon, layer = -INTORGAN_LAYER) + return our_MA + /obj/item/organ/internal/cyberimp/chest/reviver/dead_process() try_heal() // Allows implant to work even on dead people diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm index 177ab68ed39..a3121e6998a 100644 --- a/code/modules/surgery/organs/autosurgeon.dm +++ b/code/modules/surgery/organs/autosurgeon.dm @@ -110,6 +110,11 @@ name = "suspicious implant autosurgeon" icon_state = "syndicate_autoimplanter" +/obj/item/autosurgeon/organ/syndicate/attack_self__legacy__attackchain(mob/user) + if(storedorgan && uses && storedorgan.is_robotic()) // Helps keep the syndicate ones hidden. One can peel them off if they want them to be visable. + storedorgan.self_augmented_skin_level = 3 + return ..() + /obj/item/autosurgeon/organ/syndicate/oneuse uses = 1 diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 2e020896125..c8382c1f7f6 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -63,6 +63,8 @@ var/splinted_count = 0 //Time when this organ was last splinted ///If this organ's max HP is reduced by the IPC magnetic joints implant var/fragile = FALSE + ///The level of false skin used to cover robotic organs on the limb. Updated when too damaged, when installed, or when an organ with it is installed. + var/augmented_skin_cover_level = 0 /obj/item/organ/external/necrotize(update_sprite=TRUE, ignore_vital_death = FALSE) if(status & (ORGAN_ROBOT|ORGAN_DEAD)) @@ -241,6 +243,8 @@ check_for_internal_bleeding(brute) // See if we need to inflict severe burns check_for_burn_wound(burn) + // See what happens to the skin covers. + check_skin_covers(brute, burn) // Threshold needed to have a chance of hurting internal bits with something sharp #define LIMB_SHARP_THRESH_INT_DMG 5 // Threshold needed to have a chance of hurting internal bits @@ -538,6 +542,15 @@ Note that amputating the affected organ does in fact remove the infection from t if(burn_dam >= min_broken_damage && prob(damage * max(owner.bodytemperature / BODYTEMP_HEAT_DAMAGE_LIMIT, 1))) cause_burn_wound(update_health) +/obj/item/organ/external/proc/check_skin_covers(brute, burn) + if(!augmented_skin_cover_level || augmented_skin_cover_level == 4) // No need to run it if they don't have it, or if it is unbreakable. + return + if(((brute_dam >= min_broken_damage && brute) || (burn_dam >= min_broken_damage && burn)) && augmented_skin_cover_level == 1) // We want this at 50% for arms / feet which have low max hp, 35% for head / chest + break_augmented_skin() + return + if((brute_dam >= max_damage * (augmented_skin_cover_level / 3) && brute) || (burn_dam >= max_damage * (augmented_skin_cover_level / 3) && burn)) // 66% for level 2, 100% for level 3 + break_augmented_skin() + // new damage icon system // returns just the brute/burn damage code /obj/item/organ/external/proc/damage_state_text() @@ -814,6 +827,31 @@ Note that amputating the affected organ does in fact remove the infection from t if(update_health) owner.updatehealth("burn wound fixed") +/obj/item/organ/external/proc/break_augmented_skin(intentional = FALSE) + augmented_skin_cover_level = 0 + if(!owner) + return + playsound(owner.loc, 'sound/items/poster_ripped.ogg', 50, TRUE) + if(!intentional) + owner.visible_message("Synthetic skin shatters and flakes off [owner]'s [name]!", + "Your synthetic skin fails on your [name]!") + else + owner.visible_message("[owner] tears their synthetic skin off their [name], exposing the cybernetics beneath!", + "You peel your synthetic skin off your cybernetics on your [name].") + if(ishuman(owner)) + var/mob/living/carbon/human/refreshing = owner + refreshing.update_int_organs() + +/obj/item/organ/external/proc/apply_augmented_skin(applied_level) + if(applied_level + is_robotic() <= augmented_skin_cover_level) // Don't do anything if the application matches or is below the current level. + return FALSE + augmented_skin_cover_level = (applied_level + is_robotic()) // Robotic limbs get an extra level of protection. + if(!owner || !ishuman(owner)) + return TRUE + var/mob/living/carbon/human/refreshing = owner + refreshing.update_int_organs() + return TRUE + /obj/item/organ/external/robotize(company, make_tough = FALSE, convert_all = TRUE) ..() //robot limbs take reduced damage @@ -821,6 +859,8 @@ Note that amputating the affected organ does in fact remove the infection from t dismember_at_max_damage = TRUE else tough = TRUE + if(augmented_skin_cover_level) + apply_augmented_skin(augmented_skin_cover_level) // Raises it a level // Robot parts also lack bones // This is so surgery isn't kaput, let's see how this does encased = null diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 71656876a6e..e24d5bf3a58 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -20,6 +20,16 @@ var/is_xeno_organ = FALSE /// Does this organ give a warning upon being inserted? var/warning = FALSE + /// Does this organ show outside the mob, and what is the icon state? + var/augment_state = null + /// Does this organ actually have a sprite for it being on the arm? And what is the path of it. + var/augment_icon = null + /// Does this organ have a extra render mechanic? + var/do_extra_render = FALSE + /// Does this organ ignore skin covers? + var/always_show_augment = FALSE + /// Does this organ have augmented skin to apply to the user on install? If so, apply it to the user and remove it. + var/self_augmented_skin_level = 0 /obj/item/organ/internal/New(mob/living/carbon/holder) ..() @@ -49,6 +59,8 @@ . = ..() if(is_xeno_organ) . += "It looks like it would replace \the [slot]." + if(self_augmented_skin_level) + . += "It seems to have level-[self_augmented_skin_level] synthetic skin applied." /obj/item/organ/internal/proc/insert(mob/living/carbon/M, special = 0, dont_remove_slot = 0) if(!iscarbon(M) || owner == M) @@ -80,6 +92,9 @@ stack_trace("[src] attempted to insert into a [parent_organ], but [parent_organ] wasn't an organ! [atom_loc_line(M)]") else parent.internal_organs |= src + if(self_augmented_skin_level) + parent.apply_augmented_skin(self_augmented_skin_level) + self_augmented_skin_level = 0 loc = null for(var/X in actions) var/datum/action/A = X @@ -218,7 +233,27 @@ // Rendering! /obj/item/organ/internal/proc/render() - return + if(!augment_state || !augment_icon || !owner) + return FALSE + var/obj/item/organ/external/our_parent = owner.get_organ(parent_organ) + if(!our_parent) // I don't know how you pulled that off, let us be safe. + return FALSE + if(our_parent.augmented_skin_cover_level && !always_show_augment) + return FALSE + + return TRUE + +// An extra render used in certain situations. +/obj/item/organ/internal/proc/extra_render() + if(!augment_state || !augment_icon || !owner || !do_extra_render) + return FALSE + var/obj/item/organ/external/our_parent = owner.get_organ(parent_organ) + if(!our_parent) // I don't know how you pulled that off, let us be safe. + return FALSE + if(our_parent.augmented_skin_cover_level && !always_show_augment) + return FALSE + + return TRUE /obj/item/organ/internal/attack__legacy__attackchain(mob/living/carbon/M, mob/user) if(M == user && ishuman(user)) @@ -235,6 +270,16 @@ else ..() +/obj/item/organ/internal/attackby__legacy__attackchain(obj/item/I, mob/user, params) + if(is_robotic() && istype(I, /obj/item/stack/synthetic_skin)) + var/obj/item/stack/synthetic_skin/skin = I + skin.use(1) + self_augmented_skin_level = skin.skin_level + to_chat(user, "You apply [skin] to [src].") + return + return ..() + + /**************************************************** INTERNAL ORGANS DEFINES ****************************************************/ diff --git a/icons/mob/human_races/robotic.dmi b/icons/mob/human_races/robotic.dmi index 7fe9926b98a4cebc8b8d356f5bff561ca44b05a3..27ceb7e1978fc7d27e4b3f35d4359ad2c23cb9ed 100644 GIT binary patch literal 5315 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¨yISsJI;uz7F3% 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 Y(Urlcx9TvR5b*I>T}Q3*p=Hqj0BR|8ivR!s delta 24738 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 jk8JpVvCvIMtm2L+`x8@LlTXmLJb