The Terminator Update

This updates synthetic limbs to make more sense. It tweaks what you can 'see' when examining people. If someone has a robotic leg but is wearing pants, how would you know that? If someone has a burn on their arm, but their jumpsuit sleeves down, how would you know that? If someone has a replacement Vey-Med arm, how would you know it's robotic? It also treats examining FBPs more 'realistically'. If they are covered except for their head, it doesn't matter if their whole body is Bishop robotic. If their head is Vey-Med and that's all you can see, they just look human to you.

So FBP manufacturers can have a 'lifelike' var set. Vey-Med has this. This makes the limbs not show obviously non-organic damage (dents) until they are more damaged and start showing wires/metal. Attempts to treat these limbs with medical stuff results in a different message. Manufacturers can also set individual blood colors. Vey-Med blood is now white, ala Bishop from Aliens.

isSynthetic proc = Is the mob actually synthetic, as in, mechanically for breathing/tox purposes?
looksSynthetic proc = Does the mob display outward signs of being synthetic? Based on head and torso and what's revealed.

Other fixes:
You can no longer attach limbs to non-existent parents. You can't give somone a foot on a leg that doesn't exist.
You can't attach fleshy limbs to robotic ones. BODIES DO NOT WORK THAT WAY.
'Synthetic' var on humans points to manufacturer if you need to grab it quickly. isSynthetic returns this as well.
Robolimb count (and thus overheating speed) updates whenever your limbs change.
Lifelike FBPs do not show a 'system offline glyph'.
isSynthetic and looksSynthetic moved to human_helpers becasue they were defined on human in mob_helpers
Nanopaste correctly repairs limbs using the new procs (both burn and brute, making it an expensive welder+wire)
This commit is contained in:
Arokha Sieyes
2016-05-29 02:37:13 -04:00
parent 7277885c73
commit 34d323e57f
16 changed files with 175 additions and 69 deletions
+3
View File
@@ -266,9 +266,11 @@ proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large)
var/obj/effect/decal/cleanable/blood/B
var/decal_type = /obj/effect/decal/cleanable/blood/splatter
var/turf/T = get_turf(target)
var/synth = 0
if(istype(source,/mob/living/carbon/human))
var/mob/living/carbon/human/M = source
if(M.isSynthetic()) synth = 1
source = M.get_blood(M.vessel)
// Are we dripping or splattering?
@@ -297,6 +299,7 @@ proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large)
// Update appearance.
if(source.data["blood_colour"])
B.basecolor = source.data["blood_colour"]
B.synthblood = synth
B.update_icon()
// Update blood information.
+30 -15
View File
@@ -363,15 +363,16 @@
var/damage_amount
switch(damage_type)
if(BRUTE) damage_amount = brute_dam
if(BURN) damage_amount = burn_dam
if(BRUTE) damage_amount = brute_dam
if(BURN) damage_amount = burn_dam
if("omni") damage_amount = max(brute_dam,burn_dam)
else return 0
if(!damage_amount)
user << "<span class='notice'>Nothing to fix!</span>"
return 0
if(damage_amount >= ROBOLIMB_SELF_REPAIR_CAP)
if(damage_amount >= ROBOLIMB_REPAIR_CAP)
user << "<span class='danger'>The damage is far too severe to patch over externally.</span>"
return 0
@@ -394,10 +395,13 @@
switch(damage_type)
if(BRUTE) src.heal_damage(repair_amount, 0, 0, 1)
if(BURN) src.heal_damage(0, repair_amount, 0, 1)
if(user == src.owner)
user.visible_message("<span class='notice'>\The [user] patches [damage_desc] on \his [src.name] with [tool].</span>")
else
user.visible_message("<span class='notice'>\The [user] patches [damage_desc] on [owner]'s [src.name] with [tool].</span>")
if("omni")src.heal_damage(repair_amount, repair_amount, 0, 1)
if(damage_desc)
if(user == src.owner)
user.visible_message("<span class='notice'>\The [user] patches [damage_desc] on \his [src.name] with [tool].</span>")
else
user.visible_message("<span class='notice'>\The [user] patches [damage_desc] on [owner]'s [src.name] with [tool].</span>")
return 1
@@ -1028,7 +1032,11 @@ Note that amputating the affected organ does in fact remove the infection from t
R = basic_robolimb
if(R)
force_icon = R.icon
name = "robotic [initial(name)]"
if(R.lifelike)
robotic = ORGAN_LIFELIKE
name = "[initial(name)]"
else
name = "robotic [initial(name)]"
desc = "[R.desc] It looks like it was produced by [R.company]."
dislocated = -1
@@ -1041,9 +1049,6 @@ Note that amputating the affected organ does in fact remove the infection from t
if(owner)
if(!skip_prosthetics)
owner.full_prosthetic = null // Will be rechecked next isSynthetic() call.
if(!keep_organs)
for(var/obj/item/organ/thing in internal_organs)
if(istype(thing))
@@ -1175,29 +1180,39 @@ 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(robotic >= ORGAN_ROBOT)
var/LL //Life-Like, aka only show that it's robotic in heavy damage
if(robotic >= ORGAN_LIFELIKE)
LL = 1
if(brute_dam)
switch(brute_dam)
if(0 to 20)
. += "some dents"
. += "some [LL ? "cuts" : "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"
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 an open panel"
. += " and "
if(open == 1)
. += "some exposed screws"
else
. += "an open panel"
return
//Normal organic organ damage
var/list/wound_descriptors = list()
if(open > 1)
wound_descriptors["an open incision"] = 1
+5
View File
@@ -15,6 +15,9 @@ var/datum/robolimb/basic_robolimb
var/desc = "A generic unbranded robotic prosthesis." // Seen when examining a limb.
var/icon = 'icons/mob/human_races/robotic.dmi' // Icon base to draw from.
var/unavailable_at_chargen // If set, not available at chargen.
var/unavailable_to_build // If set, can't be constructed.
var/lifelike // If set, appears organic.
var/blood_color = "#030303"
var/list/species_cannot_use = list("Teshari")
/datum/robolimb/bishop
@@ -48,6 +51,8 @@ var/datum/robolimb/basic_robolimb
icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi.dmi'
/datum/robolimb/veymed
lifelike = 1
blood_color = "#CCCCCC"
company = "Vey-Med"
desc = "This high quality limb is nearly indistinguishable from an organic one."
icon = 'icons/mob/human_races/cyberlimbs/veymed.dmi'