Merge branch 'master' of https://github.com/Yawn-Wider/YWPolarisVore into UpstreamMergeApril2020

This commit is contained in:
Erik
2020-04-11 16:53:35 -07:00
2323 changed files with 1758903 additions and 156537 deletions
+3 -3
View File
@@ -29,11 +29,11 @@
if(inflamed == 1)
if(prob(5))
owner << "<span class='warning'>You feel a stinging pain in your abdomen!</span>"
to_chat(owner, "<span class='warning'>You feel a stinging pain in your abdomen!</span>")
owner.emote("me", 1, "winces slightly.")
if(inflamed > 1)
if(prob(3))
owner << "<span class='warning'>You feel a stabbing pain in your abdomen!</span>"
to_chat(owner, "<span class='warning'>You feel a stabbing pain in your abdomen!</span>")
owner.emote("me", 1, "winces painfully.")
owner.adjustToxLoss(1)
if(inflamed > 2)
@@ -41,7 +41,7 @@
owner.vomit()
if(inflamed > 3)
if(prob(1))
owner << "<span class='danger'>Your abdomen is a world of pain!</span>"
to_chat(owner, "<span class='danger'>Your abdomen is a world of pain!</span>")
owner.Weaken(10)
var/obj/item/organ/external/groin = owner.get_organ(BP_GROIN)
+1 -1
View File
@@ -12,7 +12,7 @@
organ_verbs = list(/mob/living/carbon/human/proc/augment_menu) // Verbs added by the organ when present in the body.
target_parent_classes = list() // Is the parent supposed to be organic, robotic, assisted?
forgiving_class = FALSE // Will the organ give its verbs when it isn't a perfect match? I.E., assisted in organic, synthetic in organic.
forgiving_class = TRUE // Will the organ give its verbs when it isn't a perfect match? I.E., assisted in organic, synthetic in organic.
var/obj/item/integrated_object // Objects held by the organ, used for re-usable, deployable things.
var/integrated_object_type // Object type the organ will spawn.
+3 -3
View File
@@ -92,15 +92,15 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
brainmob.languages = H.languages
brainmob << "<span class='notice'>You feel slightly disoriented. That's normal when you're just \a [initial(src.name)].</span>"
to_chat(brainmob, "<span class='notice'>You feel slightly disoriented. That's normal when you're just \a [initial(src.name)].</span>")
callHook("debrain", list(brainmob))
/obj/item/organ/internal/brain/examine(mob/user) // -- TLE
..(user)
if(brainmob && brainmob.client)//if thar be a brain inside... the brain.
user << "You can feel the small spark of life still left in this one."
to_chat(user, "You can feel the small spark of life still left in this one.")
else
user << "This one seems particularly lifeless. Perhaps it will regain some of its luster later.."
to_chat(user, "This one seems particularly lifeless. Perhaps it will regain some of its luster later..")
/obj/item/organ/internal/brain/removed(var/mob/living/user)
+1 -1
View File
@@ -75,7 +75,7 @@
var/oldbroken = is_broken()
..()
if(is_broken() && !oldbroken && owner && !owner.stat)
owner << "<span class='danger'>You go blind!</span>"
to_chat(owner, "<span class='danger'>You go blind!</span>")
/obj/item/organ/internal/eyes/process() //Eye damage replaces the old eye_stat var.
..()
+1 -1
View File
@@ -55,7 +55,7 @@
owner.custom_pain("There's a sharp pain in your upper-right abdomen!",1)
if (. >= 2)
if(prob(1) && owner.getToxLoss() < owner.getMaxHealth()*0.3)
//owner << "" //Toxins provide their own messages for pain
//to_chat(owner, "") //Toxins provide their own messages for pain
owner.adjustToxLoss(5) //Not realistic to PA but there are basically no 'real' liver infections
/obj/item/organ/internal/liver/grey
+9 -8
View File
@@ -15,28 +15,29 @@
if(is_bruised())
if(prob(4))
spawn owner.emote("me", 1, "coughs up blood!")
spawn owner?.emote("me", 1, "coughs up blood!")
owner.drip(10)
if(prob(8))
spawn owner.emote("me", 1, "gasps for air!")
spawn owner?.emote("me", 1, "gasps for air!")
owner.AdjustLosebreath(15)
if(owner.internal_organs_by_name[O_BRAIN]) // As the brain starts having Trouble, the lungs start malfunctioning.
var/obj/item/organ/internal/brain/Brain = owner.internal_organs_by_name[O_BRAIN]
if(Brain.get_control_efficiency() <= 0.8)
if(prob(4 / max(0.1,Brain.get_control_efficiency())))
spawn owner.emote("me", 1, "gasps for air!")
spawn owner?.emote("me", 1, "gasps for air!")
owner.AdjustLosebreath(round(3 / max(0.1,Brain.get_control_efficiency())))
/obj/item/organ/internal/lungs/proc/rupture()
var/obj/item/organ/external/parent = owner.get_organ(parent_organ)
if(istype(parent))
owner.custom_pain("You feel a stabbing pain in your [parent.name]!", 50)
if(owner)
var/obj/item/organ/external/parent = owner.get_organ(parent_organ)
if(istype(parent))
owner.custom_pain("You feel a stabbing pain in your [parent.name]!", 50)
bruise()
/obj/item/organ/internal/lungs/handle_germ_effects()
. = ..() //Up should return an infection level as an integer
if(!.) return
if(!. || !owner) return
//Bacterial pneumonia
if (. >= 1)
@@ -54,6 +55,6 @@
..()
var/mob/living/carbon/human/H = null
spawn(15)
if(ishuman(owner))
if(owner && ishuman(owner))
H = owner
color = H.species.blood_color
+3 -2
View File
@@ -4,6 +4,7 @@ var/list/organ_cache = list()
name = "organ"
icon = 'icons/obj/surgery.dmi'
germ_level = 0
drop_sound = 'sound/items/drop/flesh.ogg'
// Strings.
var/organ_tag = "organ" // Unique identifier.
@@ -159,7 +160,7 @@ var/list/organ_cache = list()
/obj/item/organ/examine(mob/user)
..(user)
if(status & ORGAN_DEAD)
user << "<span class='notice'>The decay has set in.</span>"
to_chat(user, "<span class='notice'>The decay has set in.</span>")
//A little wonky: internal organs stop calling this (they return early in process) when dead, but external ones cause further damage when dead
/obj/item/organ/proc/handle_germ_effects()
@@ -398,7 +399,7 @@ var/list/organ_cache = list()
if(robotic >= ORGAN_ROBOT)
return
user << "<span class='notice'>You take an experimental bite out of \the [src].</span>"
to_chat(user, "<span class='notice'>You take an experimental bite out of \the [src].</span>")
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list
blood_splatter(src,B,1)
+6 -6
View File
@@ -151,7 +151,7 @@
for(var/obj/item/I in contents)
if(istype(I, /obj/item/organ))
continue
usr << "<span class='danger'>There is \a [I] sticking out of it.</span>"
to_chat(usr, "<span class='danger'>There is \a [I] sticking out of it.</span>")
return
/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/living/user as mob)
@@ -411,11 +411,11 @@
else return 0
if(!damage_amount)
user << "<span class='notice'>Nothing to fix!</span>"
to_chat(user, "<span class='notice'>Nothing to fix!</span>")
return 0
if(brute_dam + burn_dam >= min_broken_damage) //VOREStation Edit - Makes robotic limb damage scalable
user << "<span class='danger'>The damage is far too severe to patch over externally.</span>"
to_chat(user, "<span class='danger'>The damage is far too severe to patch over externally.</span>")
return 0
if(user == src.owner)
@@ -426,12 +426,12 @@
grasp = "r_hand"
if(grasp)
user << "<span class='warning'>You can't reach your [src.name] while holding [tool] in your [owner.get_bodypart_name(grasp)].</span>"
to_chat(user, "<span class='warning'>You can't reach your [src.name] while holding [tool] in your [owner.get_bodypart_name(grasp)].</span>")
return 0
user.setClickCooldown(user.get_attack_speed(tool))
if(!do_mob(user, owner, 10))
user << "<span class='warning'>You must stand still to do that.</span>"
to_chat(user, "<span class='warning'>You must stand still to do that.</span>")
return 0
switch(damage_type)
@@ -690,7 +690,7 @@ Note that amputating the affected organ does in fact remove the infection from t
if(. >= 3 && antibiotics < ANTIBIO_OD) //INFECTION_LEVEL_THREE
if (!(status & ORGAN_DEAD))
status |= ORGAN_DEAD
owner << "<span class='notice'>You can't feel your [name] anymore...</span>"
to_chat(owner, "<span class='notice'>You can't feel your [name] anymore...</span>")
owner.update_icons_body()
for (var/obj/item/organ/external/child in children)
child.germ_level += 110 //Burst of infection from a parent organ becoming necrotic
+2 -2
View File
@@ -18,7 +18,7 @@ var/global/list/limb_icon_cache = list()
h_col = null
if(robotic >= ORGAN_ROBOT)
var/datum/robolimb/franchise = all_robolimbs[model]
if(!(franchise && franchise.skin_tone))
if(!(franchise && franchise.skin_tone) && !(franchise && franchise.skin_color))
if(human.synth_color)
s_col = list(human.r_synth, human.g_synth, human.b_synth)
return
@@ -36,7 +36,7 @@ var/global/list/limb_icon_cache = list()
h_col = null
if(robotic >= ORGAN_ROBOT)
var/datum/robolimb/franchise = all_robolimbs[model]
if(!(franchise && franchise.skin_tone))
if(!(franchise && franchise.skin_tone) && !(franchise && franchise.skin_color))
return
if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && (species.appearance_flags & HAS_SKIN_TONE))
s_tone = dna.GetUIValue(DNA_UI_SKIN_TONE)
+1 -1
View File
@@ -18,7 +18,7 @@ mob/living/carbon/proc/custom_pain(message, power, force)
// Anti message spam checks
if(force || (message != last_pain_message) || (world.time >= next_pain_time))
last_pain_message = message
src << message
to_chat(src,message)
next_pain_time = world.time + (100-power)
mob/living/carbon/human/proc/handle_pain()
+130 -3
View File
@@ -33,6 +33,14 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
if(!R.unavailable_at_chargen)
chargen_robolimbs[R.company] = R //List only main brands and solo parts.
for(var/company in all_robolimbs)
var/datum/robolimb/R = all_robolimbs[company]
if(R.species_alternates)
for(var/species in R.species_alternates)
var/species_company = R.species_alternates[species]
if(species_company in all_robolimbs)
R.species_alternates[species] = all_robolimbs[species_company]
/datum/robolimb
var/company = "Unbranded" // Shown when selecting the limb.
var/desc = "A generic unbranded robotic prosthesis." // Seen when examining a limb.
@@ -40,9 +48,11 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
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/skin_tone // If set, applies skin tone rather than part color
var/skin_tone // If set, applies skin tone rather than part color Overrides color.
var/skin_color // If set, applies skin color rather than part color.
var/blood_color = "#030303"
var/list/species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_XENOCHIMERA) //VOREStation Edit
var/list/species_alternates = list(SPECIES_TAJ = "Unbranded - Tajaran", SPECIES_UNATHI = "Unbranded - Unathi") //"Species Name" = "Robolimb Company" , List, when initialized, will become "Species Name" = RobolimbDatum, used for alternate species sprites.
var/list/monitor_styles //If empty, the model of limbs offers a head compatible with monitors.
var/parts = BP_ALL //Defines what parts said brand can replace on a body.
var/health_hud_intensity = 1 // Intensity modifier for the health GUI indicator.
@@ -72,10 +82,62 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
icon = 'icons/mob/human_races/cyberlimbs/unbranded/unbranded_alt2.dmi'
unavailable_to_build = 1
/datum/robolimb/unbranded_tajaran
company = "Unbranded - Tajaran"
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_ZADDAT)
suggested_species = SPECIES_TAJ
desc = "A simple robotic limb with feline design. Seems rather stiff."
icon = 'icons/mob/human_races/cyberlimbs/unbranded/unbranded_tajaran.dmi'
unavailable_to_build = 1
/datum/robolimb/unbranded_unathi
company = "Unbranded - Unathi"
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ZADDAT)
suggested_species = SPECIES_UNATHI
desc = "A simple robotic limb with reptilian design. Seems rather stiff."
icon = 'icons/mob/human_races/cyberlimbs/unbranded/unbranded_unathi.dmi'
unavailable_to_build = 1
/datum/robolimb/unbranded_teshari
company = "Unbranded - Teshari"
species_cannot_use = list(SPECIES_UNATHI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ZADDAT)
suggested_species = SPECIES_TESHARI
desc = "A simple robotic limb with a small, raptor-like design. Seems rather stiff."
icon = 'icons/mob/human_races/cyberlimbs/unbranded/unbranded_teshari.dmi'
unavailable_to_build = 0
/datum/robolimb/nanotrasen
company = "NanoTrasen"
desc = "A simple but efficient robotic limb, created by NanoTrasen."
icon = 'icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_main.dmi'
species_alternates = list(SPECIES_TAJ = "NanoTrasen - Tajaran", SPECIES_UNATHI = "NanoTrasen - Unathi")
/datum/robolimb/nanotrasen_tajaran
company = "NanoTrasen - Tajaran"
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_ZADDAT)
species_alternates = list(SPECIES_HUMAN = "NanoTrasen")
suggested_species = SPECIES_TAJ
desc = "A simple but efficient robotic limb, created by NanoTrasen."
icon = 'icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_tajaran.dmi'
unavailable_to_build = 1
/datum/robolimb/nanotrasen_unathi
company = "NanoTrasen - Unathi"
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ZADDAT)
species_alternates = list(SPECIES_HUMAN = "NanoTrasen")
suggested_species = SPECIES_UNATHI
desc = "A simple but efficient robotic limb, created by NanoTrasen."
icon = 'icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_unathi.dmi'
unavailable_to_build = 1
/datum/robolimb/cenilimicybernetics_teshari
company = "Cenilimi Cybernetics"
species_cannot_use = list(SPECIES_UNATHI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ZADDAT)
species_alternates = list(SPECIES_HUMAN = "NanoTrasen")
suggested_species = SPECIES_TESHARI
desc = "Made by a Teshari-owned company, for Teshari."
icon = 'icons/mob/human_races/cyberlimbs/cenilimicybernetics/cenilimicybernetics_teshari.dmi'
unavailable_to_build = 1
/datum/robolimb/bishop
company = "Bishop"
@@ -104,6 +166,19 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
parts = list(BP_HEAD)
monitor_styles = standard_monitor_styles
/datum/robolimb/gestaltframe
company = "Skrellian Exoskeleton"
desc = "This limb looks to be more like a strange.. puppet, than a prosthetic."
icon = 'icons/mob/human_races/cyberlimbs/veymed/dionaea/skrellian.dmi'
blood_color = "#63b521"
speech_bubble_appearance = "machine"
unavailable_to_build = 1
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_TAJ, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_ZADDAT)
suggested_species = SPECIES_DIONA
// Dionaea are naturally very tanky, so the robotic limbs are actually far weaker than their normal bodies.
robo_brute_mod = 1.3
robo_burn_mod = 1.3
/datum/robolimb/cybersolutions
company = "Cyber Solutions"
desc = "This limb is grey and rough, with little in the way of aesthetic."
@@ -224,11 +299,25 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
unavailable_to_build = 1
lifelike = 1
skin_tone = 1
species_alternates = list(SPECIES_SKRELL = "Vey-Med - Skrell")
blood_color = "#CCCCCC"
speech_bubble_appearance = "normal"
//robo_brute_mod = 1.1 //VOREStation Edit
//robo_burn_mod = 1.1 //VOREStation Edit
/datum/robolimb/veymed_skrell
company = "Vey-Med - Skrell"
desc = "This high quality limb is nearly indistinguishable from an organic one."
icon = 'icons/mob/human_races/cyberlimbs/veymed/veymed_skrell.dmi'
unavailable_to_build = 1
lifelike = 1
skin_color = TRUE
species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_TAJ, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_DIONA, SPECIES_ZADDAT)
blood_color = "#4451cf"
speech_bubble_appearance = "normal"
robo_brute_mod = 1.05
robo_burn_mod = 1.05
/datum/robolimb/wardtakahashi
company = "Ward-Takahashi"
desc = "This limb features sleek black and white polymers."
@@ -312,8 +401,8 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
/obj/item/weapon/disk/limb
name = "Limb Blueprints"
desc = "A disk containing the blueprints for prosthetics."
icon = 'icons/obj/cloning.dmi'
icon_state = "datadisk2"
icon = 'icons/obj/discs_vr.dmi' //VOREStation Edit
icon_state = "data-white" //VOREStation Edit
var/company = ""
/obj/item/weapon/disk/limb/New(var/newloc)
@@ -343,6 +432,10 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
company = "Vey-Med"
catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med)
// Bus disk for Diona mech parts.
/obj/item/weapon/disk/limb/veymed/diona
company = "Skrellian Exoskeleton"
/obj/item/weapon/disk/limb/wardtakahashi
company = "Ward-Takahashi"
catalogue_data = list(/datum/category_item/catalogue/information/organization/ward_takahashi)
@@ -358,3 +451,37 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
/obj/item/weapon/disk/limb/nanotrasen
company = "NanoTrasen"
catalogue_data = list(/datum/category_item/catalogue/information/organization/nanotrasen)
/obj/item/weapon/disk/species
name = "Species Bioprints"
desc = "A disk containing the blueprints for species-specific prosthetics."
icon = 'icons/obj/cloning.dmi'
icon_state = "datadisk2"
var/species = SPECIES_HUMAN
/obj/item/weapon/disk/species/Initialize()
..()
if(species)
name = "[species] [initial(name)]"
/obj/item/weapon/disk/species/skrell
species = SPECIES_SKRELL
/obj/item/weapon/disk/species/unathi
species = SPECIES_UNATHI
/obj/item/weapon/disk/species/tajaran
species = SPECIES_TAJ
/obj/item/weapon/disk/species/teshari
species = SPECIES_TESHARI
// In case of bus, presently.
/obj/item/weapon/disk/species/diona
species = SPECIES_DIONA
/obj/item/weapon/disk/species/zaddat
species = SPECIES_ZADDAT
/obj/item/weapon/disk/limb/cenilimicybernetics
company = "Cenilimi Cybernetics"
+1 -1
View File
@@ -4,7 +4,7 @@
var/list/whitelisted_to //List of ckeys that are allowed to pick this in charsetup.
//////////////// For-specific-character fluff ones /////////////////
// arokha : Aronai Kadigan
// arokha : Aronai Sieyes
/datum/robolimb/kitsuhana
company = "Kitsuhana"
desc = "This limb seems rather vulpine and fuzzy, with realistic-feeling flesh."
+31
View File
@@ -205,6 +205,37 @@
/obj/item/organ/internal/diona/node/removed()
return
// A 'brain' for the tree, still becomes a mindless nymph when removed like any other. Satisfies the FBP code.
/obj/item/organ/internal/brain/cephalon
name = "cephalon mass"
parent_organ = BP_TORSO
vital = TRUE
/obj/item/organ/internal/brain/cephalon/Initialize()
..()
spawn(30 SECONDS) // FBP Dionaea need some way to be disassembled through surgery, if absolutely necessary.
if(!owner.isSynthetic())
vital = FALSE
/obj/item/organ/internal/brain/cephalon/robotize()
return
/obj/item/organ/internal/brain/cephalon/mechassist()
return
/obj/item/organ/internal/brain/cephalon/digitize()
return
/obj/item/organ/internal/brain/cephalon/removed(var/mob/living/user, var/skip_nymph)
if(robotic >= ORGAN_ROBOT)
return ..()
var/mob/living/carbon/human/H = owner
..()
if(!istype(H) || !H.organs || !H.organs.len)
H.death()
if(prob(50) && !skip_nymph && spawn_diona_nymph(get_turf(src)))
qdel(src)
/obj/item/organ/external/head/no_eyes/diona
max_damage = 50
min_broken_damage = 25
+2 -2
View File
@@ -14,7 +14,7 @@
..()
// This is very ghetto way of rebooting an IPC. TODO better way.
if(owner && owner.stat == DEAD)
owner.stat = 0
owner.set_stat(CONSCIOUS)
owner.visible_message("<span class='danger'>\The [owner] twitches visibly!</span>")
/obj/item/organ/internal/cell/emp_act(severity)
@@ -68,7 +68,7 @@
stored_mmi.brainmob.languages = owner.languages
if(owner && owner.stat == DEAD)
owner.stat = 0
owner.set_stat(CONSCIOUS)
dead_mob_list -= owner
living_mob_list |= owner
owner.visible_message("<span class='danger'>\The [owner] twitches visibly!</span>")
+9 -9
View File
@@ -14,55 +14,55 @@
/obj/item/organ/external/head/unbreakable/nano
robotic = ORGAN_NANOFORM
encased = FALSE
max_damage = 10
max_damage = 30
min_broken_damage = 1000 //Inheritance
vital = FALSE
/obj/item/organ/external/arm/unbreakable/nano
robotic = ORGAN_NANOFORM
encased = FALSE
max_damage = 10
max_damage = 20
min_broken_damage = 1000 //Please
vital = FALSE
/obj/item/organ/external/arm/right/unbreakable/nano
robotic = ORGAN_NANOFORM
encased = FALSE
max_damage = 10
max_damage = 20
min_broken_damage = 1000
vital = FALSE
/obj/item/organ/external/leg/unbreakable/nano
robotic = ORGAN_NANOFORM
encased = FALSE
max_damage = 10
max_damage = 20
min_broken_damage = 1000
vital = FALSE
/obj/item/organ/external/leg/right/unbreakable/nano
robotic = ORGAN_NANOFORM
encased = FALSE
max_damage = 10
max_damage = 20
min_broken_damage = 1000
vital = FALSE
/obj/item/organ/external/hand/unbreakable/nano
robotic = ORGAN_NANOFORM
encased = FALSE
max_damage = 10
max_damage = 20
min_broken_damage = 1000
vital = FALSE
/obj/item/organ/external/hand/right/unbreakable/nano
robotic = ORGAN_NANOFORM
encased = FALSE
max_damage = 10
max_damage = 20
min_broken_damage = 1000
vital = FALSE
/obj/item/organ/external/foot/unbreakable/nano
robotic = ORGAN_NANOFORM
encased = FALSE
max_damage = 10
max_damage = 20
min_broken_damage = 1000
vital = FALSE
/obj/item/organ/external/foot/right/unbreakable/nano
robotic = ORGAN_NANOFORM
encased = FALSE
max_damage = 10
max_damage = 20
min_broken_damage = 1000
vital = FALSE