From 31630e44425a5f5b9ad6b0109a5c4ad659b4f7b1 Mon Sep 17 00:00:00 2001 From: ParadoxSpace Date: Sun, 21 Jun 2020 12:15:35 -0600 Subject: [PATCH] Synthskin Limb/Shell Changes (#9127) --- code/__defines/damage_organs.dm | 1 + code/game/objects/items/stacks/medical.dm | 17 ++++++++ .../mob/living/carbon/human/examine.dm | 2 +- .../living/carbon/human/species/species.dm | 4 +- code/modules/organs/organ_external.dm | 30 +++++++++---- code/modules/organs/robolimbs.dm | 6 ++- html/changelogs/paradoxspace-skynet.yml | 42 +++++++++++++++++++ 7 files changed, 88 insertions(+), 14 deletions(-) create mode 100644 html/changelogs/paradoxspace-skynet.yml diff --git a/code/__defines/damage_organs.dm b/code/__defines/damage_organs.dm index c525db81f62..93ffcd58f01 100644 --- a/code/__defines/damage_organs.dm +++ b/code/__defines/damage_organs.dm @@ -44,6 +44,7 @@ #define ORGAN_PLANT (1<<10) #define ORGAN_ARTERY_CUT (1<<11) #define ORGAN_TENDON_CUT (1<<12) +#define ORGAN_LIFELIKE (1<<13) // Robotic, made to appear organic. // Limb behaviour defines. #define ORGAN_CAN_AMPUTATE (1<<0) //Can this organ be amputated? diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 51ff26f487e..1465d115102 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -49,6 +49,23 @@ Contains: to_chat(user, "You can't apply [src] through [H.wear_suit]!") return 1 + if(affecting.status & ORGAN_LIFELIKE) + if(!(affecting.brute_dam || affecting.burn_dam)) + to_chat(user, " [M] seems healthy, there are no wounds to treat! ") + return 1 + + user.visible_message( \ + " [user] starts applying \the [src] to [M].", \ + " You start applying \the [src] to [M]." \ + ) + if (do_mob(user, M, 30)) + user.visible_message( \ + " [M] has been applied with [src] by [user].", \ + " You apply \the [src] to [M]." \ + ) + use(1) + return 1 + if(affecting.status & ORGAN_ASSISTED) to_chat(user, "This isn't useful at all on a robotic limb.") return 1 diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 311620fe70a..6714afc48bd 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -297,7 +297,7 @@ // No need to notify about robotic limbs if they're not damaged, really. continue else - wound_flavor_text["[temp.name]"] = "[T.He] [T.has] a robot [temp.name]. It has[temp.get_wounds_desc()]!\n" + wound_flavor_text["[temp.name]"] = "[T.He] [T.has] [temp.get_wounds_desc()] on [T.his] [temp.name].
" else if(temp.wounds.len > 0 || temp.open) if(temp.is_stump() && temp.parent_organ && organs_by_name[temp.parent_organ]) var/obj/item/organ/external/parent = organs_by_name[temp.parent_organ] diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 269061fe473..d2f4517f5c8 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -344,9 +344,9 @@ if(H.isSynthetic()) for(var/obj/item/organ/external/E in H.organs) if(E.status & ORGAN_CUT_AWAY || E.is_stump()) continue - E.robotize() + E.robotize(E.robotize_type) for(var/obj/item/organ/I in H.internal_organs) - I.robotize() + I.robotize(I.robotize_type) if(isvaurca(H)) for (var/obj/item/organ/external/E in H.organs) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 92f5e115988..3b2e08eccea 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -1039,11 +1039,14 @@ Note that amputating the affected organ does in fact remove the infection from t if(R) if (!force_skintone) force_icon = R.icon - name = "[R.company] [initial(name)]" - desc = "[R.desc]" + if(R.lifelike) + status |= ORGAN_LIFELIKE + name = "[initial(name)]" + else + name = "[R.company] [initial(name)]" + desc = "[R.desc]" if(R.paintable) painted = 1 - brute_mod = R.brute_mod burn_mod = R.burn_mod robotize_type = company @@ -1055,7 +1058,7 @@ Note that amputating the affected organ does in fact remove the infection from t unmutate() for (var/obj/item/organ/external/T in children) if(T) - T.robotize() + T.robotize(company) /obj/item/organ/external/mechassist() ..() @@ -1190,22 +1193,31 @@ Note that amputating the affected organ does in fact remove the infection from t . = "" if(status & ORGAN_DESTROYED && !is_stump()) . += "tear at [amputation_point] so severe that it hangs by a scrap of flesh" - + //Handle robotic and synthetic organ damage if(status & ORGAN_ASSISTED) + var/LL = status & ORGAN_LIFELIKE if(brute_dam) switch(brute_dam) if(0 to 20) - . += " some dents" + . += "some [LL ? pick ("cuts","bruises","scars") : "dents"]" if(21 to INFINITY) - . += pick(" a lot of dents"," severe denting") + . += "[LL ? pick("exposed wiring","torn-back synthflesh") : pick("a lot of dents","severe denting")]" if(brute_dam && burn_dam) . += " and" if(burn_dam) switch(burn_dam) if(0 to 20) - . += " some burns" + . += "some burns" if(21 to INFINITY) - . += pick(" a lot of burns"," severe melting") + . += "[LL ? pick("roasted synth-flesh","melted internal wiring") : pick("many burns","scorched metal")]" + if(open) + if(brute_dam || burn_dam) + . += " and " + if(open == 1) + . += "some exposed screws" + else + . += "an open panel" + return var/list/wound_descriptors = list() diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm index d97fbb6b3dc..d7d3a3a42bd 100644 --- a/code/modules/organs/robolimbs.dm +++ b/code/modules/organs/robolimbs.dm @@ -16,8 +16,9 @@ var/global/datum/robolimb/basic_robolimb /datum/robolimb var/company = "Unbranded" // Shown when selecting the limb. var/desc = "A generic unbranded robotic prosthesis." // Seen when examining a limb. - var/icon = 'icons/mob/human_races/ipc/robotic.dmi' // Icon base to draw from. + var/icon = 'icons/mob/human_races/ipc/robotic.dmi' // Icon base to draw from. var/unavailable_at_chargen // If set, not available at chargen. + var/lifelike = FALSE // If set, appears organic. var/list/species_can_use = list( "Human", "Skrell", @@ -30,7 +31,7 @@ var/global/datum/robolimb/basic_robolimb "Baseline Frame", "Off-Worlder Human" ) - var/paintable = 0 //tired of istype exceptions. bullshirt to find, and by god do i know it after this project. + var/paintable = 0 //tired of istype exceptions. bullshit to find, and by god do i know it after this project. var/linked_frame = "Unbranded Frame" //which machine species this limb will create var/brute_mod = 0.9 //how resistant is this mode to brute damage var/burn_mod = 1.1 //how resistant is this mode to burn damage @@ -97,6 +98,7 @@ var/global/datum/robolimb/basic_robolimb species_can_use = list("Human") linked_frame = "Shell Frame" fabricator_available = TRUE + lifelike = TRUE /datum/robolimb/autakh company = PROSTHETIC_AUTAKH diff --git a/html/changelogs/paradoxspace-skynet.yml b/html/changelogs/paradoxspace-skynet.yml new file mode 100644 index 00000000000..0feebf1448a --- /dev/null +++ b/html/changelogs/paradoxspace-skynet.yml @@ -0,0 +1,42 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: ParadoxSpace + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Shells are now more well hidden, a single soda can will no longer produce a massive dent." + - rscadd: "Bandages/ointment/etc will no longer reveal Shells instantly."