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."