mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-25 13:06:38 +01:00
Merge branch 'virgoMaster' into virgoPull
This commit is contained in:
@@ -27,8 +27,6 @@ var/const/CE_STABLE_THRESHOLD = 0.5
|
||||
return
|
||||
|
||||
vessel.add_reagent("blood",species.blood_volume)
|
||||
spawn(1)
|
||||
fixblood()
|
||||
|
||||
//Resets blood data
|
||||
/mob/living/carbon/human/proc/fixblood()
|
||||
|
||||
@@ -52,7 +52,7 @@ var/list/organ_cache = list()
|
||||
if(istype(holder))
|
||||
src.owner = holder
|
||||
src.w_class = max(src.w_class + mob_size_difference(holder.mob_size, MOB_MEDIUM), 1) //smaller mobs have smaller organs.
|
||||
species = all_species["Human"]
|
||||
species = all_species[SPECIES_HUMAN]
|
||||
if(holder.dna)
|
||||
dna = holder.dna.Clone()
|
||||
species = holder.species //VOREStation Edit - For custom species
|
||||
@@ -142,6 +142,7 @@ var/list/organ_cache = list()
|
||||
if(status & ORGAN_DEAD)
|
||||
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()
|
||||
//** Handle the effects of infections
|
||||
if(robotic >= ORGAN_ROBOT) //Just in case!
|
||||
@@ -152,11 +153,14 @@ var/list/organ_cache = list()
|
||||
|
||||
var/infection_damage = 0
|
||||
|
||||
if((status & ORGAN_DEAD) && antibiotics < ANTIBIO_OD) //Sepsis from 'dead' organs
|
||||
infection_damage = min(1, 1 + round((germ_level - INFECTION_LEVEL_THREE)/200,0.25)) //1 Tox plus a little based on germ level
|
||||
/// Infection damage
|
||||
|
||||
//If the organ is dead, for the sake of organs that may have died due to non-infection, we'll only do damage if they have at least L1 infection (built up below)
|
||||
if((status & ORGAN_DEAD) && antibiotics < ANTIBIO_OD && germ_level >= INFECTION_LEVEL_ONE)
|
||||
infection_damage = max(1, 1 + round((germ_level - INFECTION_LEVEL_THREE)/200,0.25)) //1 Tox plus a little based on germ level
|
||||
|
||||
else if(germ_level > INFECTION_LEVEL_TWO && antibiotics < ANTIBIO_OD)
|
||||
infection_damage = min(0.25, 0.25 + round((germ_level - INFECTION_LEVEL_TWO)/200,0.25))
|
||||
infection_damage = max(0.25, 0.25 + round((germ_level - INFECTION_LEVEL_TWO)/200,0.25))
|
||||
|
||||
if(infection_damage)
|
||||
owner.adjustToxLoss(infection_damage)
|
||||
@@ -164,23 +168,31 @@ var/list/organ_cache = list()
|
||||
if (germ_level > 0 && germ_level < INFECTION_LEVEL_ONE/2 && prob(30))
|
||||
adjust_germ_level(-antibiotics)
|
||||
|
||||
/// Germ Accumulation
|
||||
|
||||
//Dead organs accumulate germs indefinitely
|
||||
if(status & ORGAN_DEAD)
|
||||
adjust_germ_level(1)
|
||||
|
||||
//Half of level 1 is growing but harmless
|
||||
if (germ_level >= INFECTION_LEVEL_ONE/2)
|
||||
//aiming for germ level to go from ambient to INFECTION_LEVEL_TWO in an average of 15 minutes
|
||||
if(!antibiotics && prob(round(germ_level/6)))
|
||||
adjust_germ_level(1)
|
||||
|
||||
//Level 1 qualifies for specific organ processing effects
|
||||
if(germ_level >= INFECTION_LEVEL_ONE)
|
||||
. = 1 //Organ qualifies for effect-specific processing
|
||||
//var/fever_temperature = (owner.species.heat_level_1 - owner.species.body_temperature - 5)* min(germ_level/INFECTION_LEVEL_TWO, 1) + owner.species.body_temperature
|
||||
//owner.bodytemperature += between(0, (fever_temperature - T20C)/BODYTEMP_COLD_DIVISOR + 1, fever_temperature - owner.bodytemperature)
|
||||
. = 1
|
||||
var/fever_temperature = owner.species.heat_discomfort_level * 1.10 //Heat discomfort level plus 10%
|
||||
if(owner.bodytemperature < fever_temperature)
|
||||
owner.bodytemperature += min(0.2,(fever_temperature - owner.bodytemperature) / 10) //Will usually climb by 0.2, else 10% of the difference if less
|
||||
|
||||
//Level two qualifies for further processing effects
|
||||
if (germ_level >= INFECTION_LEVEL_TWO)
|
||||
. = 2 //Organ qualifies for effect-specific processing
|
||||
//No particular effect on the general 'organ' at 3
|
||||
|
||||
//Level three qualifies for significant growth and further effects
|
||||
if (germ_level >= INFECTION_LEVEL_THREE && antibiotics < ANTIBIO_OD)
|
||||
. = 3 //Organ qualifies for effect-specific processing
|
||||
adjust_germ_level(rand(5,10)) //Germ_level increases without overdose of antibiotics
|
||||
@@ -294,15 +306,16 @@ var/list/organ_cache = list()
|
||||
/obj/item/organ/emp_act(severity)
|
||||
if(!(robotic >= ORGAN_ASSISTED))
|
||||
return
|
||||
switch (severity)
|
||||
if (1)
|
||||
take_damage(rand(6,12))
|
||||
if (2)
|
||||
take_damage(rand(4,8))
|
||||
if (3)
|
||||
take_damage(rand(3,6))
|
||||
if (4)
|
||||
take_damage(rand(1,4))
|
||||
for(var/i = 1; i <= robotic; i++)
|
||||
switch (severity)
|
||||
if (1)
|
||||
take_damage(rand(5,9))
|
||||
if (2)
|
||||
take_damage(rand(3,7))
|
||||
if (3)
|
||||
take_damage(rand(2,5))
|
||||
if (4)
|
||||
take_damage(rand(1,3))
|
||||
|
||||
/obj/item/organ/proc/removed(var/mob/living/user)
|
||||
|
||||
@@ -317,7 +330,7 @@ var/list/organ_cache = list()
|
||||
var/obj/item/organ/external/affected = owner.get_organ(parent_organ)
|
||||
if(affected) affected.internal_organs -= src
|
||||
|
||||
loc = get_turf(owner)
|
||||
loc = owner.drop_location()
|
||||
processing_objects |= src
|
||||
rejecting = null
|
||||
var/datum/reagent/blood/organ_blood = locate(/datum/reagent/blood) in reagents.reagent_list
|
||||
|
||||
@@ -107,15 +107,16 @@
|
||||
if(!(robotic >= ORGAN_ROBOT))
|
||||
return
|
||||
var/burn_damage = 0
|
||||
switch (severity)
|
||||
if (1)
|
||||
burn_damage += rand(8, 13)
|
||||
if (2)
|
||||
burn_damage += rand(6, 9)
|
||||
if(3)
|
||||
burn_damage += rand(4, 7)
|
||||
if(4)
|
||||
burn_damage += rand(1, 5)
|
||||
for(var/i = 1; i <= robotic; i++)
|
||||
switch (severity)
|
||||
if (1)
|
||||
burn_damage += rand(5, 8)
|
||||
if (2)
|
||||
burn_damage += rand(4, 6)
|
||||
if(3)
|
||||
burn_damage += rand(2, 5)
|
||||
if(4)
|
||||
burn_damage += rand(1, 3)
|
||||
|
||||
if(burn_damage)
|
||||
take_damage(0, burn_damage)
|
||||
@@ -213,8 +214,6 @@
|
||||
|
||||
/obj/item/organ/external/update_health()
|
||||
damage = min(max_damage, (brute_dam + burn_dam))
|
||||
return
|
||||
|
||||
|
||||
/obj/item/organ/external/New(var/mob/living/carbon/holder)
|
||||
..(holder, 0)
|
||||
@@ -271,7 +270,7 @@
|
||||
|
||||
if(status & ORGAN_BROKEN && brute)
|
||||
jostle_bone(brute)
|
||||
if(organ_can_feel_pain() && prob(40))
|
||||
if(organ_can_feel_pain() && prob(40) && !isbelly(owner.loc)) //VOREStation Edit
|
||||
owner.emote("scream") //getting hit on broken hand hurts
|
||||
if(used_weapon)
|
||||
add_autopsy_data("[used_weapon]", brute + burn)
|
||||
@@ -400,7 +399,7 @@
|
||||
user << "<span class='notice'>Nothing to fix!</span>"
|
||||
return 0
|
||||
|
||||
if(damage_amount >= min_broken_damage) //VOREStation Edit - Makes robotic limb damage scalable
|
||||
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>"
|
||||
return 0
|
||||
|
||||
@@ -775,6 +774,8 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
if(config.bones_can_break && brute_dam > min_broken_damage * config.organ_health_multiplier && !(robotic >= ORGAN_ROBOT))
|
||||
src.fracture()
|
||||
|
||||
update_health()
|
||||
|
||||
// new damage icon system
|
||||
// adjusted to set damage_state to brute/burn code only (without r_name0 as before)
|
||||
/obj/item/organ/external/update_icon()
|
||||
@@ -810,6 +811,17 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
tbrute = 3
|
||||
return "[tbrute][tburn]"
|
||||
|
||||
/obj/item/organ/external/take_damage()
|
||||
..()
|
||||
|
||||
if(!cannot_amputate)
|
||||
if(nonsolid && damage >= max_damage)
|
||||
droplimb(TRUE, DROPLIMB_EDGE)
|
||||
//VOREStation Add Start
|
||||
if(robotic >= ORGAN_NANOFORM && damage >= max_damage)
|
||||
droplimb(TRUE, DROPLIMB_BURN)
|
||||
//VOREStation Add End
|
||||
|
||||
/****************************************************
|
||||
DISMEMBERMENT
|
||||
****************************************************/
|
||||
@@ -819,8 +831,10 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
|
||||
if(cannot_amputate || !owner)
|
||||
return
|
||||
|
||||
if(disintegrate == DROPLIMB_EDGE && nonsolid)
|
||||
//VOREStation Add
|
||||
if(robotic >= ORGAN_NANOFORM)
|
||||
disintegrate = DROPLIMB_BURN //Ashes will be fine
|
||||
else if(disintegrate == DROPLIMB_EDGE && nonsolid) //VOREStation Add End
|
||||
disintegrate = DROPLIMB_BLUNT //splut
|
||||
|
||||
switch(disintegrate)
|
||||
@@ -874,9 +888,10 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
spawn(1)
|
||||
victim.updatehealth()
|
||||
victim.UpdateDamageIcon()
|
||||
victim.regenerate_icons()
|
||||
victim.update_icons_body()
|
||||
dir = 2
|
||||
|
||||
var/atom/droploc = victim.drop_location()
|
||||
switch(disintegrate)
|
||||
if(DROPLIMB_EDGE)
|
||||
appearance_flags &= ~PIXEL_SCALE
|
||||
@@ -891,17 +906,17 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),5)
|
||||
dir = 2
|
||||
if(DROPLIMB_BURN)
|
||||
new /obj/effect/decal/cleanable/ash(get_turf(victim))
|
||||
new /obj/effect/decal/cleanable/ash(droploc)
|
||||
for(var/obj/item/I in src)
|
||||
if(I.w_class > ITEMSIZE_SMALL && !istype(I,/obj/item/organ))
|
||||
I.loc = get_turf(src)
|
||||
I.forceMove(droploc)
|
||||
qdel(src)
|
||||
if(DROPLIMB_BLUNT)
|
||||
var/obj/effect/decal/cleanable/blood/gibs/gore
|
||||
if(robotic >= ORGAN_ROBOT)
|
||||
gore = new /obj/effect/decal/cleanable/blood/gibs/robot(get_turf(victim))
|
||||
gore = new /obj/effect/decal/cleanable/blood/gibs/robot(droploc)
|
||||
else
|
||||
gore = new /obj/effect/decal/cleanable/blood/gibs(get_turf(victim))
|
||||
gore = new /obj/effect/decal/cleanable/blood/gibs(droploc)
|
||||
if(species)
|
||||
gore.fleshcolor = use_flesh_colour
|
||||
gore.basecolor = use_blood_colour
|
||||
@@ -918,7 +933,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
if(I.w_class <= ITEMSIZE_SMALL)
|
||||
qdel(I)
|
||||
continue
|
||||
I.loc = get_turf(src)
|
||||
I.forceMove(droploc)
|
||||
I.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),5)
|
||||
|
||||
qdel(src)
|
||||
@@ -1016,7 +1031,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
"<span class='danger'>Something feels like it shattered in your [name]!</span>",\
|
||||
"<span class='danger'>You hear a sickening crack.</span>")
|
||||
jostle_bone()
|
||||
if(organ_can_feel_pain())
|
||||
if(organ_can_feel_pain() && !isbelly(owner.loc))
|
||||
owner.emote("scream")
|
||||
|
||||
playsound(src.loc, "fracture", 10, 1, -2)
|
||||
@@ -1091,7 +1106,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)
|
||||
T.robotize(company, 1)
|
||||
T.robotize(company, keep_organs = keep_organs)
|
||||
|
||||
if(owner)
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
//Sideways override for nanoform limbs (ugh)
|
||||
/obj/item/organ/external/robotize(var/company, var/skip_prosthetics = FALSE, var/keep_organs = FALSE)
|
||||
var/original_robotic = robotic
|
||||
if(original_robotic >= ORGAN_NANOFORM)
|
||||
var/o_encased = encased
|
||||
var/o_max_damage = max_damage
|
||||
var/o_min_broken_damage = min_broken_damage
|
||||
robotic = FALSE
|
||||
. = ..(company = company, keep_organs = TRUE)
|
||||
robotic = original_robotic
|
||||
encased = o_encased
|
||||
max_damage = o_max_damage
|
||||
min_broken_damage = o_min_broken_damage
|
||||
else
|
||||
return ..()
|
||||
@@ -50,44 +50,60 @@ var/global/list/limb_icon_cache = list()
|
||||
if(eyes) eyes.update_colour()
|
||||
|
||||
/obj/item/organ/external/head/get_icon()
|
||||
|
||||
..()
|
||||
overlays.Cut()
|
||||
|
||||
//The overlays are not drawn on the mob, they are used for if the head is removed and becomes an item
|
||||
cut_overlays()
|
||||
|
||||
//Every 'addon' below requires information from species
|
||||
if(!owner || !owner.species)
|
||||
return
|
||||
if(owner.should_have_organ(O_EYES))
|
||||
|
||||
//Eye color/icon
|
||||
var/should_have_eyes = owner.should_have_organ(O_EYES)
|
||||
var/has_eye_color = owner.species.appearance_flags & HAS_EYE_COLOR
|
||||
if((should_have_eyes || has_eye_color) && eye_icon)
|
||||
var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name[O_EYES]
|
||||
if(eye_icon)
|
||||
var/icon/eyes_icon = new/icon(eye_icon_location, eye_icon)
|
||||
var/icon/eyes_icon = new/icon(eye_icon_location, eye_icon)
|
||||
//Should have eyes
|
||||
if(should_have_eyes)
|
||||
//And we have them
|
||||
if(eyes)
|
||||
eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD)
|
||||
//They're gone!
|
||||
else
|
||||
eyes_icon.Blend(rgb(128,0,0), ICON_ADD)
|
||||
mob_icon.Blend(eyes_icon, ICON_OVERLAY)
|
||||
overlays |= eyes_icon
|
||||
|
||||
//We have weird other-sorts of eyes (as we're not supposed to have eye organ, but we have HAS_EYE_COLOR species)
|
||||
else
|
||||
eyes_icon.Blend(rgb(owner.r_eyes, owner.g_eyes, owner.b_eyes), ICON_ADD)
|
||||
add_overlay(eyes_icon)
|
||||
mob_icon.Blend(eyes_icon, ICON_OVERLAY)
|
||||
|
||||
//Lip color/icon
|
||||
if(owner.lip_style && (species && (species.appearance_flags & HAS_LIPS)))
|
||||
var/icon/lip_icon = new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s")
|
||||
overlays |= lip_icon
|
||||
add_overlay(lip_icon)
|
||||
mob_icon.Blend(lip_icon, ICON_OVERLAY)
|
||||
|
||||
//Head markings.
|
||||
//Head markings
|
||||
for(var/M in markings)
|
||||
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
|
||||
var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
|
||||
mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit
|
||||
overlays |= mark_s //So when it's not on your body, it has icons
|
||||
add_overlay(mark_s) //So when it's not on your body, it has icons
|
||||
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
|
||||
icon_cache_key += "[M][markings[M]["color"]]"
|
||||
|
||||
//Facial hair
|
||||
if(owner.f_style)
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style]
|
||||
if(facial_hair_style && facial_hair_style.species_allowed && (species.get_bodytype(owner) in facial_hair_style.species_allowed))
|
||||
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
|
||||
if(facial_hair_style.do_colouration)
|
||||
facial_s.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_MULTIPLY) // VOREStation edit
|
||||
overlays |= facial_s
|
||||
add_overlay(facial_s)
|
||||
|
||||
//Head hair
|
||||
if(owner.h_style && !(owner.head && (owner.head.flags_inv & BLOCKHEADHAIR)))
|
||||
var/datum/sprite_accessory/hair/hair_style = hair_styles_list[owner.h_style]
|
||||
if(hair_style && (species.get_bodytype(owner) in hair_style.species_allowed))
|
||||
@@ -96,7 +112,7 @@ var/global/list/limb_icon_cache = list()
|
||||
if(hair_style.do_colouration && islist(h_col) && h_col.len >= 3)
|
||||
hair_s.Blend(rgb(h_col[1], h_col[2], h_col[3]), ICON_MULTIPLY)
|
||||
hair_s.Blend(hair_s_add, ICON_ADD)
|
||||
overlays |= hair_s
|
||||
add_overlay(hair_s)
|
||||
|
||||
return mob_icon
|
||||
|
||||
@@ -106,7 +122,7 @@ var/global/list/limb_icon_cache = list()
|
||||
if(owner && owner.gender == MALE)
|
||||
gender = "m"
|
||||
|
||||
icon_cache_key = "[icon_name]_[species ? species.get_bodytype() : "Human"]" //VOREStation Edit
|
||||
icon_cache_key = "[icon_name]_[species ? species.get_bodytype() : SPECIES_HUMAN]" //VOREStation Edit
|
||||
|
||||
if(force_icon)
|
||||
mob_icon = new /icon(force_icon, "[icon_name][gendered_icon ? "_[gender]" : ""]")
|
||||
@@ -179,7 +195,7 @@ var/global/list/limb_icon_cache = list()
|
||||
|
||||
if(nonsolid)
|
||||
applying.MapColors("#4D4D4D","#969696","#1C1C1C", "#000000")
|
||||
if(species && species.get_bodytype(owner) != "Human")
|
||||
if(species && species.get_bodytype(owner) != SPECIES_HUMAN)
|
||||
applying.SetIntensity(1) // Unathi, Taj and Skrell have -very- dark base icons. VOREStation edit fixes this and brings the number back to 1
|
||||
else
|
||||
applying.SetIntensity(1) //VOREStation edit to make Prometheans not look like shit with mob coloring.
|
||||
|
||||
@@ -42,7 +42,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
var/lifelike // If set, appears organic.
|
||||
var/skin_tone // If set, applies skin tone rather than part color
|
||||
var/blood_color = "#030303"
|
||||
var/list/species_cannot_use = list("Teshari")
|
||||
var/list/species_cannot_use = list(SPECIES_TESHARI, "Promethean") //VOREStation Add
|
||||
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.
|
||||
|
||||
@@ -0,0 +1,139 @@
|
||||
// // // External Organs
|
||||
/obj/item/organ/external/chest/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 50 // <-- This is different from the rest
|
||||
min_broken_damage = 1000
|
||||
vital = TRUE // <-- This is different from the rest
|
||||
/obj/item/organ/external/groin/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 30 // <-- This is different from the rest
|
||||
min_broken_damage = 1000 //Multiple
|
||||
vital = FALSE
|
||||
/obj/item/organ/external/head/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 10
|
||||
min_broken_damage = 1000 //Inheritance
|
||||
vital = FALSE
|
||||
/obj/item/organ/external/arm/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 10
|
||||
min_broken_damage = 1000 //Please
|
||||
vital = FALSE
|
||||
/obj/item/organ/external/arm/right/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 10
|
||||
min_broken_damage = 1000
|
||||
vital = FALSE
|
||||
/obj/item/organ/external/leg/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 10
|
||||
min_broken_damage = 1000
|
||||
vital = FALSE
|
||||
/obj/item/organ/external/leg/right/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 10
|
||||
min_broken_damage = 1000
|
||||
vital = FALSE
|
||||
/obj/item/organ/external/hand/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 10
|
||||
min_broken_damage = 1000
|
||||
vital = FALSE
|
||||
/obj/item/organ/external/hand/right/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 10
|
||||
min_broken_damage = 1000
|
||||
vital = FALSE
|
||||
/obj/item/organ/external/foot/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 10
|
||||
min_broken_damage = 1000
|
||||
vital = FALSE
|
||||
/obj/item/organ/external/foot/right/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 10
|
||||
min_broken_damage = 1000
|
||||
vital = FALSE
|
||||
|
||||
// // // Internal Organs
|
||||
/obj/item/organ/internal/nano
|
||||
robotic = ORGAN_ROBOT
|
||||
|
||||
/obj/item/organ/internal/nano/orchestrator
|
||||
name = "orchestrator module"
|
||||
desc = "A small computer, designed for highly parallel workloads."
|
||||
icon = 'icons/mob/species/protean/protean.dmi'
|
||||
icon_state = "orchestrator"
|
||||
organ_tag = O_ORCH
|
||||
parent_organ = BP_TORSO
|
||||
vital = TRUE
|
||||
|
||||
/obj/item/organ/internal/nano/refactory
|
||||
name = "refactory module"
|
||||
desc = "A miniature metal processing unit and nanite factory."
|
||||
icon = 'icons/mob/species/protean/protean.dmi'
|
||||
icon_state = "refactory"
|
||||
organ_tag = O_FACT
|
||||
parent_organ = BP_TORSO
|
||||
|
||||
var/list/materials = list(DEFAULT_WALL_MATERIAL = 0)
|
||||
var/max_storage = 10000
|
||||
|
||||
/obj/item/organ/internal/nano/refactory/proc/get_stored_material(var/material)
|
||||
if(status & ORGAN_DEAD)
|
||||
return 0
|
||||
return materials[material] || 0
|
||||
|
||||
/obj/item/organ/internal/nano/refactory/proc/add_stored_material(var/material,var/amt)
|
||||
if(status & ORGAN_DEAD)
|
||||
return 0
|
||||
var/increase = min(amt,max(max_storage-materials[material],0))
|
||||
if(isnum(materials[material]))
|
||||
materials[material] += increase
|
||||
else
|
||||
materials[material] = increase
|
||||
|
||||
return increase
|
||||
|
||||
/obj/item/organ/internal/nano/refactory/proc/use_stored_material(var/material,var/amt)
|
||||
if(status & ORGAN_DEAD)
|
||||
return 0
|
||||
|
||||
var/available = materials[material]
|
||||
|
||||
//Success
|
||||
if(available >= amt)
|
||||
var/new_amt = available-amt
|
||||
if(new_amt == 0)
|
||||
materials -= material
|
||||
else
|
||||
materials[material] = new_amt
|
||||
return amt
|
||||
|
||||
//Failure
|
||||
return 0
|
||||
|
||||
/obj/item/organ/internal/mmi_holder/posibrain/nano
|
||||
name = "protean posibrain"
|
||||
desc = "A more advanced version of the standard posibrain, typically found in protean bodies."
|
||||
icon = 'icons/mob/species/protean/protean.dmi'
|
||||
icon_state = "posi"
|
||||
parent_organ = BP_TORSO
|
||||
|
||||
/obj/item/organ/internal/mmi_holder/posibrain/nano/update_from_mmi()
|
||||
..()
|
||||
icon = initial(icon)
|
||||
icon_state = "posi1"
|
||||
|
||||
stored_mmi.brainmob.languages = owner.languages
|
||||
@@ -23,8 +23,8 @@
|
||||
organ_rel_size = 70
|
||||
base_miss_chance = 10
|
||||
|
||||
/obj/item/organ/external/chest/robotize()
|
||||
if(..())
|
||||
/obj/item/organ/external/chest/robotize(var/company, var/skip_prosthetics = 0, var/keep_organs = 0)
|
||||
if(..() && robotic != ORGAN_NANOFORM) //VOREStation Edit
|
||||
// Give them a new cell.
|
||||
owner.internal_organs_by_name["cell"] = new /obj/item/organ/internal/cell(owner,1)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user