mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-26 10:03:45 +00:00
Tweaks to previous commits.
More tweaks to IPC fixes. Merge resolution/compile fixes. Further work on properly integrating, updating and fixing prosthetic options. Repathed internal organs to organ/internal. More work on full synthetics, changelings, overheating. Working on getting organs to qdel properly and spawn properly when robotized. Finalized some overheating values, added remaining prosthetic icons. Finalizing the testing version of the full prosthetic bodies branch. Added suit cyclers to the autolathe and map. Fixing runtime errors. Fixing errors. Changelog. Replacing limb and organ strings with constants. Prevented brainless species from becoming full cyborgs. Fixed issues with brain/MMIs renaming themselves inappropriately. Various fixes and oversights.
This commit is contained in:
@@ -19,7 +19,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
|
||||
vessel = new/datum/reagents(600)
|
||||
vessel.my_atom = src
|
||||
|
||||
if(!should_have_organ("heart")) //We want the var for safety but we can do without the actual blood.
|
||||
if(!should_have_organ(O_HEART)) //We want the var for safety but we can do without the actual blood.
|
||||
return
|
||||
|
||||
vessel.add_reagent("blood",560)
|
||||
@@ -39,7 +39,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
|
||||
if(in_stasis)
|
||||
return
|
||||
|
||||
if(!should_have_organ("heart"))
|
||||
if(!should_have_organ(O_HEART))
|
||||
return
|
||||
|
||||
if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood.
|
||||
@@ -62,8 +62,8 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
|
||||
|
||||
// Damaged heart virtually reduces the blood volume, as the blood isn't
|
||||
// being pumped properly anymore.
|
||||
if(species && should_have_organ("heart"))
|
||||
var/obj/item/organ/heart/heart = internal_organs_by_name["heart"]
|
||||
if(species && should_have_organ(O_HEART))
|
||||
var/obj/item/organ/internal/heart/heart = internal_organs_by_name[O_HEART]
|
||||
|
||||
if(!heart)
|
||||
blood_volume = 0
|
||||
@@ -137,7 +137,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
|
||||
//Makes a blood drop, leaking amt units of blood from the mob
|
||||
/mob/living/carbon/human/proc/drip(var/amt as num)
|
||||
|
||||
if(!should_have_organ("heart")) //TODO: Make drips come from the reagents instead.
|
||||
if(!should_have_organ(O_HEART)) //TODO: Make drips come from the reagents instead.
|
||||
return
|
||||
|
||||
if(!amt)
|
||||
@@ -188,7 +188,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
|
||||
//For humans, blood does not appear from blue, it comes from vessels.
|
||||
/mob/living/carbon/human/take_blood(obj/item/weapon/reagent_containers/container, var/amount)
|
||||
|
||||
if(!should_have_organ("heart"))
|
||||
if(!should_have_organ(O_HEART))
|
||||
return null
|
||||
|
||||
if(vessel.get_reagent_amount("blood") < amount)
|
||||
@@ -216,7 +216,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
|
||||
//Transfers blood from reagents to vessel, respecting blood types compatability.
|
||||
/mob/living/carbon/human/inject_blood(var/datum/reagent/blood/injected, var/amount)
|
||||
|
||||
if(should_have_organ("heart"))
|
||||
if(should_have_organ(O_HEART))
|
||||
reagents.add_reagent("blood", amount, injected.data)
|
||||
reagents.update_total()
|
||||
return
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
//CORTICAL BORER ORGANS.
|
||||
/obj/item/organ/borer/process()
|
||||
/obj/item/organ/internal/borer
|
||||
name = "cortical borer"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "borer"
|
||||
organ_tag = "brain"
|
||||
desc = "A disgusting space slug."
|
||||
parent_organ = BP_HEAD
|
||||
vital = 1
|
||||
|
||||
/obj/item/organ/internal/borer/process()
|
||||
|
||||
// Borer husks regenerate health, feel no pain, and are resistant to stuns and brainloss.
|
||||
for(var/chem in list("tricordrazine","tramadol","hyperzine","alkysine"))
|
||||
@@ -21,16 +30,7 @@
|
||||
goo.basecolor = "#412464"
|
||||
goo.update_icon()
|
||||
|
||||
/obj/item/organ/borer
|
||||
name = "cortical borer"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "borer"
|
||||
organ_tag = "brain"
|
||||
desc = "A disgusting space slug."
|
||||
parent_organ = "head"
|
||||
vital = 1
|
||||
|
||||
/obj/item/organ/borer/removed(var/mob/living/user)
|
||||
/obj/item/organ/internal/borer/removed(var/mob/living/user)
|
||||
|
||||
..()
|
||||
|
||||
@@ -43,19 +43,19 @@
|
||||
qdel(src)
|
||||
|
||||
//VOX ORGANS.
|
||||
/obj/item/organ/stack
|
||||
/obj/item/organ/internal/stack
|
||||
name = "cortical stack"
|
||||
parent_organ = "head"
|
||||
parent_organ = BP_HEAD
|
||||
icon_state = "brain-prosthetic"
|
||||
organ_tag = "stack"
|
||||
vital = 1
|
||||
var/backup_time = 0
|
||||
var/datum/mind/backup
|
||||
|
||||
/obj/item/organ/stack/process()
|
||||
/obj/item/organ/internal/stack/process()
|
||||
if(owner && owner.stat != DEAD && !is_broken())
|
||||
backup_time = world.time
|
||||
if(owner.mind) backup = owner.mind
|
||||
|
||||
/obj/item/organ/stack/vox/stack
|
||||
/obj/item/organ/internal/stack/vox/stack
|
||||
name = "vox cortical stack"
|
||||
|
||||
@@ -6,47 +6,37 @@ var/list/organ_cache = list()
|
||||
germ_level = 0
|
||||
|
||||
// Strings.
|
||||
var/organ_tag = "organ"
|
||||
var/parent_organ = "chest"
|
||||
|
||||
// Appearance.
|
||||
var/dead_icon
|
||||
var/organ_tag = "organ" // Unique identifier.
|
||||
var/parent_organ = BP_TORSO // Organ holding this object.
|
||||
|
||||
// Status tracking.
|
||||
var/status = 0
|
||||
var/vital //Lose a vital limb, die immediately.
|
||||
var/damage = 0 // amount of damage to the organ
|
||||
var/status = 0 // Various status flags (such as robotic)
|
||||
var/vital // Lose a vital limb, die immediately.
|
||||
var/damage = 0 // Current damage to the organ
|
||||
|
||||
// Reference data.
|
||||
var/mob/living/carbon/human/owner = null
|
||||
var/list/transplant_data
|
||||
var/list/datum/autopsy_data/autopsy_data = list()
|
||||
var/list/trace_chemicals = list() // traces of chemicals in the organ,
|
||||
var/datum/dna/dna
|
||||
var/datum/species/species
|
||||
var/mob/living/carbon/human/owner // Current mob owning the organ.
|
||||
var/list/transplant_data // Transplant match data.
|
||||
var/list/autopsy_data = list() // Trauma data for forensics.
|
||||
var/list/trace_chemicals = list() // Traces of chemicals in the organ.
|
||||
var/datum/dna/dna // Original DNA.
|
||||
var/datum/species/species // Original species.
|
||||
|
||||
// Damage vars.
|
||||
var/min_bruised_damage = 10
|
||||
var/min_broken_damage = 30
|
||||
var/max_damage
|
||||
var/rejecting // Is this organ already being rejected?
|
||||
var/min_bruised_damage = 10 // Damage before considered bruised
|
||||
var/min_broken_damage = 30 // Damage before becoming broken
|
||||
var/max_damage // Damage cap
|
||||
var/rejecting // Is this organ already being rejected?
|
||||
|
||||
/obj/item/organ/Destroy()
|
||||
if(!owner)
|
||||
return ..()
|
||||
if(istype(owner, /mob/living/carbon))
|
||||
if((owner.internal_organs) && (src in owner.internal_organs))
|
||||
owner.internal_organs -= src
|
||||
if(istype(owner, /mob/living/carbon/human))
|
||||
if((owner.internal_organs_by_name) && (src in owner.internal_organs_by_name))
|
||||
owner.internal_organs_by_name -= src
|
||||
if((owner.organs) && (src in owner.organs))
|
||||
owner.organs -= src
|
||||
if((owner.organs_by_name) && (src in owner.organs_by_name))
|
||||
owner.organs_by_name -= src
|
||||
if(src in owner.contents)
|
||||
owner.contents -= src
|
||||
owner = null
|
||||
|
||||
if(owner) owner = null
|
||||
if(transplant_data) transplant_data.Cut()
|
||||
if(autopsy_data) autopsy_data.Cut()
|
||||
if(trace_chemicals) trace_chemicals.Cut()
|
||||
dna = null
|
||||
species = null
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/proc/update_health()
|
||||
@@ -92,8 +82,6 @@ var/list/organ_cache = list()
|
||||
damage = max_damage
|
||||
status |= ORGAN_DEAD
|
||||
processing_objects -= src
|
||||
if(dead_icon)
|
||||
icon_state = dead_icon
|
||||
if(owner && vital)
|
||||
owner.death()
|
||||
|
||||
@@ -115,7 +103,7 @@ var/list/organ_cache = list()
|
||||
germ_level = 0
|
||||
return
|
||||
|
||||
if(!owner)
|
||||
if(!owner && reagents)
|
||||
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list
|
||||
if(B && prob(40))
|
||||
reagents.remove_reagent("blood",0.1)
|
||||
@@ -193,6 +181,9 @@ var/list/organ_cache = list()
|
||||
/obj/item/organ/proc/receive_chem(chemical as obj)
|
||||
return 0
|
||||
|
||||
/obj/item/organ/proc/remove_rejuv()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/proc/rejuvenate(var/ignore_prosthetic_prefs)
|
||||
damage = 0
|
||||
status = 0
|
||||
@@ -203,16 +194,6 @@ var/list/organ_cache = list()
|
||||
else if(status == "mechanical")
|
||||
robotize()
|
||||
|
||||
/obj/item/organ/proc/remove_rejuv()
|
||||
if(owner)
|
||||
owner.internal_organs -= src
|
||||
owner.internal_organs_by_name[organ_tag] = null
|
||||
while(null in owner.internal_organs)
|
||||
owner.internal_organs -= null
|
||||
while(null in owner.internal_organs_by_name)
|
||||
owner.internal_organs_by_name -= null
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/proc/is_damaged()
|
||||
return damage > 0
|
||||
|
||||
@@ -336,16 +317,6 @@ var/list/organ_cache = list()
|
||||
affected.internal_organs |= src
|
||||
target.internal_organs_by_name[organ_tag] = src
|
||||
|
||||
/obj/item/organ/eyes/replaced(var/mob/living/carbon/human/target)
|
||||
|
||||
// Apply our eye colour to the target.
|
||||
if(istype(target) && eye_colour)
|
||||
target.r_eyes = eye_colour[1]
|
||||
target.g_eyes = eye_colour[2]
|
||||
target.b_eyes = eye_colour[3]
|
||||
target.update_eyes()
|
||||
..()
|
||||
|
||||
/obj/item/organ/proc/bitten(mob/user)
|
||||
|
||||
if(status & ORGAN_ROBOT)
|
||||
@@ -374,7 +345,7 @@ var/list/organ_cache = list()
|
||||
/obj/item/organ/attack_self(mob/user as mob)
|
||||
|
||||
// Convert it to an edible form, yum yum.
|
||||
if((status & ORGAN_ROBOT) && user.a_intent == "help" && user.zone_sel.selecting == "mouth")
|
||||
if((status & ORGAN_ROBOT) && user.a_intent == I_HELP && user.zone_sel.selecting == O_MOUTH)
|
||||
bitten(user)
|
||||
return
|
||||
|
||||
|
||||
@@ -15,50 +15,51 @@
|
||||
organ_tag = "limb"
|
||||
|
||||
// Strings
|
||||
var/limb_name
|
||||
var/broken_description // fracture string if any.
|
||||
var/damage_state = "00" // Modifier used for generating the on-mob damage overlay for this limb.
|
||||
|
||||
// Damage vars.
|
||||
var/brute_mod = 1 // Multiplier for incoming brute damage.
|
||||
var/burn_mod = 1 // As above for burn.
|
||||
var/damage_state = "00" // Modifier used for generating the on-mob damage overlay for this limb.
|
||||
var/brute_dam = 0 // Actual current brute damage.
|
||||
var/burn_dam = 0 // Actual current burn damage.
|
||||
var/last_dam = -1
|
||||
var/brute_mod = 1 // Multiplier for incoming brute damage.
|
||||
var/burn_mod = 1 // As above for burn.
|
||||
var/brute_dam = 0 // Actual current brute damage.
|
||||
var/burn_dam = 0 // Actual current burn damage.
|
||||
var/last_dam = -1 // used in healing/processing calculations.
|
||||
|
||||
// Appearance vars.
|
||||
var/icon_name = null
|
||||
var/body_part = null
|
||||
var/icon_position = 0
|
||||
var/model
|
||||
var/force_icon
|
||||
var/icon/mob_icon
|
||||
var/gendered_icon = 0
|
||||
var/s_tone
|
||||
var/list/s_col
|
||||
var/list/h_col
|
||||
var/body_hair
|
||||
var/icon_name = null // Icon state base.
|
||||
var/body_part = null // Part flag
|
||||
var/icon_position = 0 // Used in mob overlay layering calculations.
|
||||
var/model // Used when caching robolimb icons.
|
||||
var/force_icon // Used to force override of species-specific limb icons (for prosthetics).
|
||||
var/icon/mob_icon // Cached icon for use in mob overlays.
|
||||
var/gendered_icon = 0 // Whether or not the icon state appends a gender.
|
||||
var/s_tone // Skin tone.
|
||||
var/list/s_col // skin colour
|
||||
var/list/h_col // hair colour
|
||||
var/body_hair // Icon blend for body hair if any.
|
||||
|
||||
// Wound and structural data.
|
||||
var/wound_update_accuracy = 1 // how often wounds should be updated, a higher number means less often
|
||||
var/list/wounds = list()
|
||||
var/number_wounds = 0 // cache the number of wounds, which is NOT wounds.len!
|
||||
var/obj/item/organ/external/parent
|
||||
var/list/obj/item/organ/external/children
|
||||
var/list/internal_organs = list() // Internal organs of this body part
|
||||
var/broken_description
|
||||
var/sabotaged = 0 // If a prosthetic limb is emagged, it will detonate when it fails.
|
||||
var/list/implants = list()
|
||||
var/wound_update_accuracy = 1 // how often wounds should be updated, a higher number means less often
|
||||
var/list/wounds = list() // wound datum list.
|
||||
var/number_wounds = 0 // number of wounds, which is NOT wounds.len!
|
||||
var/obj/item/organ/external/parent // Master-limb.
|
||||
var/list/children // Sub-limbs.
|
||||
var/list/internal_organs = list() // Internal organs of this body part
|
||||
var/sabotaged = 0 // If a prosthetic limb is emagged, it will detonate when it fails.
|
||||
var/list/implants = list() // Currently implanted objects.
|
||||
var/organ_rel_size = 25 // Relative size of the organ.
|
||||
var/base_miss_chance = 20 // Chance of missing.
|
||||
|
||||
// Joint/state stuff.
|
||||
var/can_grasp //It would be more appropriate if these two were named "affects_grasp" and "affects_stand" at this point
|
||||
var/can_stand
|
||||
var/disfigured = 0
|
||||
var/cannot_amputate
|
||||
var/cannot_break
|
||||
var/joint = "joint" // Descriptive string used in dislocation.
|
||||
var/amputation_point // Descriptive string used in amputation.
|
||||
var/dislocated = 0 // If you target a joint, you can dislocate the limb, causing temporary damage to the organ.
|
||||
var/encased // Needs to be opened with a saw to access the organs.
|
||||
var/can_grasp // It would be more appropriate if these two were named "affects_grasp" and "affects_stand" at this point
|
||||
var/can_stand // Modifies stance tally/ability to stand.
|
||||
var/disfigured = 0 // Scarred/burned beyond recognition.
|
||||
var/cannot_amputate // Impossible to amputate.
|
||||
var/cannot_break // Impossible to fracture.
|
||||
var/joint = "joint" // Descriptive string used in dislocation.
|
||||
var/amputation_point // Descriptive string used in amputation.
|
||||
var/dislocated = 0 // If you target a joint, you can dislocate the limb, causing temporary damage to the organ.
|
||||
var/encased // Needs to be opened with a saw to access the organs.
|
||||
|
||||
// Surgery vars.
|
||||
var/open = 0
|
||||
@@ -67,6 +68,7 @@
|
||||
|
||||
|
||||
/obj/item/organ/external/Destroy()
|
||||
|
||||
if(parent && parent.children)
|
||||
parent.children -= src
|
||||
|
||||
@@ -78,6 +80,13 @@
|
||||
for(var/obj/item/organ/O in internal_organs)
|
||||
qdel(O)
|
||||
|
||||
if(owner)
|
||||
owner.organs -= src
|
||||
owner.organs_by_name[organ_tag] = null
|
||||
owner.organs_by_name -= organ_tag
|
||||
while(null in owner.organs)
|
||||
owner.organs -= null
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/external/attack_self(var/mob/user)
|
||||
@@ -183,7 +192,7 @@
|
||||
/obj/item/organ/external/replaced(var/mob/living/carbon/human/target)
|
||||
owner = target
|
||||
if(istype(owner))
|
||||
owner.organs_by_name[limb_name] = src
|
||||
owner.organs_by_name[organ_tag] = src
|
||||
owner.organs |= src
|
||||
for(var/obj/item/organ/organ in src)
|
||||
organ.loc = owner
|
||||
@@ -319,11 +328,6 @@
|
||||
if(internal)
|
||||
status &= ~ORGAN_BROKEN
|
||||
|
||||
/*if((brute || burn) && children && children.len && (owner.species.flags & REGENERATES_LIMBS))
|
||||
var/obj/item/organ/external/stump/S = locate() in children
|
||||
if(S)
|
||||
world << "Extra healing to go around ([brute+burn]) and [owner] needs a replacement limb."*/
|
||||
|
||||
//Sync the organ's damage with its wounds
|
||||
src.update_damages()
|
||||
owner.updatehealth()
|
||||
@@ -356,11 +360,11 @@ This function completely restores a damaged organ to perfect condition.
|
||||
|
||||
if(owner && !ignore_prosthetic_prefs)
|
||||
if(owner.client && owner.client.prefs && owner.client.prefs.real_name == owner.real_name)
|
||||
var/status = owner.client.prefs.organ_data[limb_name]
|
||||
var/status = owner.client.prefs.organ_data[organ_tag]
|
||||
if(status == "amputated")
|
||||
remove_rejuv()
|
||||
else if(status == "cyborg")
|
||||
var/robodata = owner.client.prefs.rlimb_data[limb_name]
|
||||
var/robodata = owner.client.prefs.rlimb_data[organ_tag]
|
||||
if(robodata)
|
||||
robotize(robodata)
|
||||
else
|
||||
@@ -370,20 +374,16 @@ This function completely restores a damaged organ to perfect condition.
|
||||
/obj/item/organ/external/remove_rejuv()
|
||||
if(owner)
|
||||
owner.organs -= src
|
||||
owner.organs_by_name[limb_name] = null
|
||||
while(null in owner.organs)
|
||||
owner.organs -= null
|
||||
while(null in owner.organs_by_name)
|
||||
owner.organs_by_name -= null
|
||||
owner.organs_by_name[organ_tag] = null
|
||||
owner.organs_by_name -= organ_tag
|
||||
while(null in owner.organs) owner.organs -= null
|
||||
if(children && children.len)
|
||||
for(var/obj/item/organ/external/E in children)
|
||||
E.remove_rejuv()
|
||||
children.Cut()
|
||||
|
||||
for(var/obj/item/organ/O in contents)
|
||||
O.remove_rejuv()
|
||||
|
||||
qdel(src)
|
||||
for(var/obj/item/organ/internal/I in internal_organs)
|
||||
I.remove_rejuv()
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/proc/createwound(var/type = CUT, var/damage)
|
||||
if(damage == 0) return
|
||||
@@ -652,7 +652,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
else if(W.damage_type == BURN)
|
||||
burn_dam += W.damage
|
||||
|
||||
if(!(status & ORGAN_ROBOT) && W.bleeding() && (H && H.should_have_organ("heart")))
|
||||
if(!(status & ORGAN_ROBOT) && W.bleeding() && (H && H.should_have_organ(O_HEART)))
|
||||
W.bleed_timer--
|
||||
status |= ORGAN_BLEEDING
|
||||
|
||||
@@ -661,7 +661,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
number_wounds += W.amount
|
||||
|
||||
//things tend to bleed if they are CUT OPEN
|
||||
if (open && !clamped && (H && H.should_have_organ("heart")))
|
||||
if (open && !clamped && (H && H.should_have_organ(O_HEART)))
|
||||
status |= ORGAN_BLEEDING
|
||||
|
||||
//Bone fractures
|
||||
@@ -789,7 +789,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
if(status & ORGAN_ROBOT)
|
||||
gore = new /obj/effect/decal/cleanable/blood/gibs/robot(get_turf(victim))
|
||||
else
|
||||
gore = new victim.species.single_gib_type(get_turf(victim))
|
||||
gore = new /obj/effect/decal/cleanable/blood/gibs(get_turf(victim))
|
||||
if(species)
|
||||
if(species.get_flesh_colour())
|
||||
gore.fleshcolor = species.get_flesh_colour()
|
||||
@@ -905,7 +905,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
if(isnull(suit.supporting_limbs))
|
||||
return
|
||||
|
||||
owner << "You feel \the [suit] constrict about your [name], supporting it."
|
||||
owner << "<span class='notice'>You feel \the [suit] constrict about your [name], supporting it.</span>"
|
||||
status |= ORGAN_SPLINTED
|
||||
suit.supporting_limbs |= src
|
||||
return
|
||||
@@ -919,14 +919,20 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
status &= ~ORGAN_BROKEN
|
||||
return 1
|
||||
|
||||
/obj/item/organ/external/robotize(var/company, var/ski)
|
||||
/obj/item/organ/external/robotize(var/company, var/skip_prosthetics = 0, var/keep_organs = 0)
|
||||
|
||||
if(status & ORGAN_ROBOT)
|
||||
return
|
||||
|
||||
|
||||
if(status & ORGAN_ROBOT)
|
||||
return
|
||||
|
||||
..()
|
||||
brute_mod = 0.8
|
||||
burn_mod = 0.8
|
||||
|
||||
brute_mod = 0.8 // More resistant to brute.
|
||||
burn_mod = 0.8 // More resistant to burn.
|
||||
max_damage = initial(max_damage)*0.65 // Significantly easier to remove with trauma.
|
||||
|
||||
brute_mod = 0.8
|
||||
burn_mod = 0.8
|
||||
@@ -949,23 +955,25 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
for(var/obj/item/organ/external/T in children)
|
||||
T.robotize(company, 1)
|
||||
|
||||
|
||||
if(owner)
|
||||
|
||||
if(!skip_prosthetics)
|
||||
owner.full_prosthetic = null // Will be rechecked next isSynthetic() call.
|
||||
|
||||
for(var/obj/item/organ/thing in src.contents)
|
||||
if(istype(thing))
|
||||
if(thing.vital)
|
||||
continue
|
||||
owner.internal_organs_by_name[thing.organ_tag] = null
|
||||
owner.internal_organs.Remove(thing)
|
||||
qdel(thing)
|
||||
if(!keep_organs)
|
||||
for(var/obj/item/organ/thing in internal_organs)
|
||||
if(istype(thing))
|
||||
if(thing.vital)
|
||||
continue
|
||||
internal_organs -= thing
|
||||
owner.internal_organs_by_name[thing.organ_tag] = null
|
||||
owner.internal_organs_by_name -= thing.organ_tag
|
||||
owner.internal_organs.Remove(thing)
|
||||
qdel(thing)
|
||||
|
||||
while(null in owner.internal_organs)
|
||||
owner.internal_organs -= null
|
||||
while(null in owner.internal_organs_by_name)
|
||||
owner.internal_organs -= null
|
||||
|
||||
return 1
|
||||
|
||||
@@ -1047,7 +1055,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
|
||||
release_restraints(victim)
|
||||
victim.organs -= src
|
||||
victim.organs_by_name[limb_name] = null // Remove from owner's vars.
|
||||
victim.organs_by_name[organ_tag] = null // Remove from owner's vars.
|
||||
|
||||
//Robotic limbs explode if sabotaged.
|
||||
if(is_robotic && sabotaged)
|
||||
@@ -1140,7 +1148,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
|
||||
/obj/item/organ/external/chest
|
||||
name = "upper body"
|
||||
limb_name = "chest"
|
||||
organ_tag = BP_TORSO
|
||||
icon_name = "torso"
|
||||
max_damage = 100
|
||||
min_broken_damage = 35
|
||||
@@ -1154,43 +1162,46 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
cannot_amputate = 1
|
||||
parent_organ = null
|
||||
encased = "ribcage"
|
||||
organ_rel_size = 70
|
||||
base_miss_chance = 10
|
||||
|
||||
/obj/item/organ/external/chest/robotize()
|
||||
if(..())
|
||||
// Give them a new cell.
|
||||
owner.internal_organs_by_name["cell"] = new /obj/item/organ/cell(owner,1)
|
||||
owner.internal_organs_by_name["cell"] = new /obj/item/organ/internal/cell(owner,1)
|
||||
|
||||
|
||||
/obj/item/organ/external/groin
|
||||
name = "lower body"
|
||||
limb_name = "groin"
|
||||
organ_tag = BP_GROIN
|
||||
icon_name = "groin"
|
||||
max_damage = 100
|
||||
min_broken_damage = 35
|
||||
w_class = 5
|
||||
body_part = LOWER_TORSO
|
||||
vital = 1
|
||||
parent_organ = "chest"
|
||||
parent_organ = BP_TORSO
|
||||
amputation_point = "lumbar"
|
||||
joint = "hip"
|
||||
dislocated = -1
|
||||
gendered_icon = 1
|
||||
organ_rel_size = 30
|
||||
|
||||
/obj/item/organ/external/arm
|
||||
limb_name = "l_arm"
|
||||
organ_tag = "l_arm"
|
||||
name = "left arm"
|
||||
icon_name = "l_arm"
|
||||
max_damage = 50
|
||||
min_broken_damage = 30
|
||||
w_class = 3
|
||||
body_part = ARM_LEFT
|
||||
parent_organ = "chest"
|
||||
parent_organ = BP_TORSO
|
||||
joint = "left elbow"
|
||||
amputation_point = "left shoulder"
|
||||
can_grasp = 1
|
||||
|
||||
/obj/item/organ/external/arm/right
|
||||
limb_name = "r_arm"
|
||||
organ_tag = "r_arm"
|
||||
name = "right arm"
|
||||
icon_name = "r_arm"
|
||||
body_part = ARM_RIGHT
|
||||
@@ -1198,7 +1209,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
amputation_point = "right shoulder"
|
||||
|
||||
/obj/item/organ/external/leg
|
||||
limb_name = "l_leg"
|
||||
organ_tag = "l_leg"
|
||||
name = "left leg"
|
||||
icon_name = "l_leg"
|
||||
max_damage = 50
|
||||
@@ -1206,13 +1217,13 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
w_class = 3
|
||||
body_part = LEG_LEFT
|
||||
icon_position = LEFT
|
||||
parent_organ = "groin"
|
||||
parent_organ = BP_GROIN
|
||||
joint = "left knee"
|
||||
amputation_point = "left hip"
|
||||
can_stand = 1
|
||||
|
||||
/obj/item/organ/external/leg/right
|
||||
limb_name = "r_leg"
|
||||
organ_tag = "r_leg"
|
||||
name = "right leg"
|
||||
icon_name = "r_leg"
|
||||
body_part = LEG_RIGHT
|
||||
@@ -1221,7 +1232,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
amputation_point = "right hip"
|
||||
|
||||
/obj/item/organ/external/foot
|
||||
limb_name = "l_foot"
|
||||
organ_tag = "l_foot"
|
||||
name = "left foot"
|
||||
icon_name = "l_foot"
|
||||
min_broken_damage = 15
|
||||
@@ -1232,13 +1243,15 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
joint = "left ankle"
|
||||
amputation_point = "left ankle"
|
||||
can_stand = 1
|
||||
organ_rel_size = 10
|
||||
base_miss_chance = 50
|
||||
|
||||
/obj/item/organ/external/foot/removed()
|
||||
if(owner) owner.u_equip(owner.shoes)
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/foot/right
|
||||
limb_name = "r_foot"
|
||||
organ_tag = "r_foot"
|
||||
name = "right foot"
|
||||
icon_name = "r_foot"
|
||||
body_part = FOOT_RIGHT
|
||||
@@ -1248,7 +1261,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
amputation_point = "right ankle"
|
||||
|
||||
/obj/item/organ/external/hand
|
||||
limb_name = "l_hand"
|
||||
organ_tag = "l_hand"
|
||||
name = "left hand"
|
||||
icon_name = "l_hand"
|
||||
min_broken_damage = 15
|
||||
@@ -1258,13 +1271,15 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
joint = "left wrist"
|
||||
amputation_point = "left wrist"
|
||||
can_grasp = 1
|
||||
organ_rel_size = 10
|
||||
base_miss_chance = 50
|
||||
|
||||
/obj/item/organ/external/hand/removed()
|
||||
owner.u_equip(owner.gloves)
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/hand/right
|
||||
limb_name = "r_hand"
|
||||
organ_tag = "r_hand"
|
||||
name = "right hand"
|
||||
icon_name = "r_hand"
|
||||
body_part = HAND_RIGHT
|
||||
@@ -1273,7 +1288,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
amputation_point = "right wrist"
|
||||
|
||||
/obj/item/organ/external/head
|
||||
limb_name = "head"
|
||||
organ_tag = BP_HEAD
|
||||
icon_name = "head"
|
||||
name = "head"
|
||||
max_damage = 75
|
||||
@@ -1281,14 +1296,19 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
w_class = 3
|
||||
body_part = HEAD
|
||||
vital = 1
|
||||
parent_organ = "chest"
|
||||
parent_organ = BP_TORSO
|
||||
joint = "jaw"
|
||||
amputation_point = "neck"
|
||||
gendered_icon = 1
|
||||
encased = "skull"
|
||||
base_miss_chance = 40
|
||||
|
||||
var/eye_icon = "eyes_s"
|
||||
|
||||
// These organs are important for robotizing at chargen.
|
||||
/obj/item/organ/external/head/robotize(var/company, var/skip_prosthetics, var/keep_organs)
|
||||
return ..(company, skip_prosthetics, 1)
|
||||
|
||||
/obj/item/organ/external/head/removed()
|
||||
if(owner)
|
||||
name = "[owner.real_name]'s head"
|
||||
|
||||
@@ -40,7 +40,7 @@ var/global/list/limb_icon_cache = list()
|
||||
|
||||
/obj/item/organ/external/head/sync_colour_to_human(var/mob/living/carbon/human/human)
|
||||
..()
|
||||
var/obj/item/organ/eyes/eyes = owner.internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name[O_EYES]
|
||||
if(eyes) eyes.update_colour()
|
||||
|
||||
/obj/item/organ/external/head/removed()
|
||||
@@ -53,8 +53,8 @@ var/global/list/limb_icon_cache = list()
|
||||
overlays.Cut()
|
||||
if(!owner || !owner.species)
|
||||
return
|
||||
if(owner.should_have_organ("eyes"))
|
||||
var/obj/item/organ/eyes/eyes = owner.internal_organs_by_name["eyes"]
|
||||
if(owner.should_have_organ(O_EYES))
|
||||
var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name[O_EYES]
|
||||
if(eye_icon)
|
||||
var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', eye_icon)
|
||||
if(eyes)
|
||||
|
||||
@@ -3,24 +3,52 @@
|
||||
/****************************************************
|
||||
INTERNAL ORGANS DEFINES
|
||||
****************************************************/
|
||||
/obj/item/organ/internal
|
||||
var/dead_icon // Icon to use when the organ has died.
|
||||
|
||||
/obj/item/organ/internal/die()
|
||||
..()
|
||||
if((status & ORGAN_DEAD) && dead_icon)
|
||||
icon_state = dead_icon
|
||||
|
||||
/obj/item/organ/internal/Destroy()
|
||||
if(owner)
|
||||
owner.internal_organs.Remove(src)
|
||||
owner.internal_organs_by_name[organ_tag] = null
|
||||
owner.internal_organs_by_name -= organ_tag
|
||||
while(null in owner.internal_organs)
|
||||
owner.internal_organs -= null
|
||||
var/obj/item/organ/external/E = owner.organs_by_name[parent_organ]
|
||||
if(istype(E)) E.internal_organs -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/internal/remove_rejuv()
|
||||
if(owner)
|
||||
owner.internal_organs -= src
|
||||
owner.internal_organs_by_name[organ_tag] = null
|
||||
owner.internal_organs_by_name -= organ_tag
|
||||
while(null in owner.internal_organs)
|
||||
owner.internal_organs -= null
|
||||
var/obj/item/organ/external/E = owner.organs_by_name[parent_organ]
|
||||
if(istype(E)) E.internal_organs -= src
|
||||
..()
|
||||
|
||||
// Brain is defined in brain_item.dm.
|
||||
/obj/item/organ/heart
|
||||
/obj/item/organ/internal/heart
|
||||
name = "heart"
|
||||
icon_state = "heart-on"
|
||||
organ_tag = "heart"
|
||||
parent_organ = "chest"
|
||||
organ_tag = O_HEART
|
||||
parent_organ = BP_TORSO
|
||||
dead_icon = "heart-off"
|
||||
|
||||
/obj/item/organ/lungs
|
||||
/obj/item/organ/internal/lungs
|
||||
name = "lungs"
|
||||
icon_state = "lungs"
|
||||
gender = PLURAL
|
||||
organ_tag = "lungs"
|
||||
parent_organ = "chest"
|
||||
organ_tag = O_LUNGS
|
||||
parent_organ = BP_TORSO
|
||||
|
||||
/obj/item/organ/lungs/process()
|
||||
/obj/item/organ/internal/lungs/process()
|
||||
..()
|
||||
|
||||
if(!owner)
|
||||
@@ -38,14 +66,14 @@
|
||||
spawn owner.emote("me", 1, "gasps for air!")
|
||||
owner.losebreath += 15
|
||||
|
||||
/obj/item/organ/kidneys
|
||||
/obj/item/organ/internal/kidneys
|
||||
name = "kidneys"
|
||||
icon_state = "kidneys"
|
||||
gender = PLURAL
|
||||
organ_tag = "kidneys"
|
||||
parent_organ = "groin"
|
||||
organ_tag = O_KIDNEYS
|
||||
parent_organ = BP_GROIN
|
||||
|
||||
/obj/item/organ/kidneys/process()
|
||||
/obj/item/organ/internal/kidneys/process()
|
||||
|
||||
..()
|
||||
|
||||
@@ -62,22 +90,39 @@
|
||||
else if(is_broken())
|
||||
owner.adjustToxLoss(0.3 * PROCESS_ACCURACY)
|
||||
|
||||
/obj/item/organ/eyes
|
||||
/obj/item/organ/internal/eyes
|
||||
name = "eyeballs"
|
||||
icon_state = "eyes"
|
||||
gender = PLURAL
|
||||
organ_tag = "eyes"
|
||||
parent_organ = "head"
|
||||
organ_tag = O_EYES
|
||||
parent_organ = BP_HEAD
|
||||
var/list/eye_colour = list(0,0,0)
|
||||
|
||||
/obj/item/organ/eyes/robotize()
|
||||
/obj/item/organ/internal/eyes/robotize()
|
||||
..()
|
||||
name = "optical sensor"
|
||||
icon = 'icons/obj/robot_component.dmi'
|
||||
icon_state = "camera"
|
||||
dead_icon = "camera_broken"
|
||||
|
||||
/obj/item/organ/eyes/proc/update_colour()
|
||||
/obj/item/organ/internal/eyes/robot
|
||||
name = "optical sensor"
|
||||
|
||||
/obj/item/organ/internal/eyes/robot/New()
|
||||
..()
|
||||
robotize()
|
||||
|
||||
/obj/item/organ/internal/eyes/replaced(var/mob/living/carbon/human/target)
|
||||
|
||||
// Apply our eye colour to the target.
|
||||
if(istype(target) && eye_colour)
|
||||
target.r_eyes = eye_colour[1]
|
||||
target.g_eyes = eye_colour[2]
|
||||
target.b_eyes = eye_colour[3]
|
||||
target.update_eyes()
|
||||
..()
|
||||
|
||||
/obj/item/organ/internal/eyes/proc/update_colour()
|
||||
if(!owner)
|
||||
return
|
||||
eye_colour = list(
|
||||
@@ -86,13 +131,13 @@
|
||||
owner.b_eyes ? owner.b_eyes : 0
|
||||
)
|
||||
|
||||
/obj/item/organ/eyes/take_damage(amount, var/silent=0)
|
||||
/obj/item/organ/internal/eyes/take_damage(amount, var/silent=0)
|
||||
var/oldbroken = is_broken()
|
||||
..()
|
||||
if(is_broken() && !oldbroken && owner && !owner.stat)
|
||||
owner << "<span class='danger'>You go blind!</span>"
|
||||
|
||||
/obj/item/organ/eyes/process() //Eye damage replaces the old eye_stat var.
|
||||
/obj/item/organ/internal/eyes/process() //Eye damage replaces the old eye_stat var.
|
||||
..()
|
||||
if(!owner)
|
||||
return
|
||||
@@ -101,13 +146,13 @@
|
||||
if(is_broken())
|
||||
owner.eye_blind = 20
|
||||
|
||||
/obj/item/organ/liver
|
||||
/obj/item/organ/internal/liver
|
||||
name = "liver"
|
||||
icon_state = "liver"
|
||||
organ_tag = "liver"
|
||||
parent_organ = "groin"
|
||||
parent_organ = BP_GROIN
|
||||
|
||||
/obj/item/organ/liver/process()
|
||||
/obj/item/organ/internal/liver/process()
|
||||
|
||||
..()
|
||||
|
||||
@@ -130,7 +175,7 @@
|
||||
src.damage += 0.2 * PROCESS_ACCURACY
|
||||
//Damaged one shares the fun
|
||||
else
|
||||
var/obj/item/organ/O = pick(owner.internal_organs)
|
||||
var/obj/item/organ/internal/O = pick(owner.internal_organs)
|
||||
if(O)
|
||||
O.damage += 0.2 * PROCESS_ACCURACY
|
||||
|
||||
@@ -155,13 +200,13 @@
|
||||
else
|
||||
take_damage(owner.chem_effects[CE_ALCOHOL_TOXIC] * 0.1 * PROCESS_ACCURACY, prob(1)) // Chance to warn them
|
||||
|
||||
/obj/item/organ/appendix
|
||||
/obj/item/organ/internal/appendix
|
||||
name = "appendix"
|
||||
icon_state = "appendix"
|
||||
parent_organ = "groin"
|
||||
parent_organ = BP_GROIN
|
||||
organ_tag = "appendix"
|
||||
|
||||
/obj/item/organ/appendix/removed()
|
||||
/obj/item/organ/internal/appendix/removed()
|
||||
if(owner)
|
||||
var/inflamed = 0
|
||||
for(var/datum/disease/appendicitis/appendicitis in owner.viruses)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
/obj/item/organ/external/stump/New(var/mob/living/carbon/holder, var/internal, var/obj/item/organ/external/limb)
|
||||
if(istype(limb))
|
||||
limb_name = limb.limb_name
|
||||
organ_tag = limb.organ_tag
|
||||
body_part = limb.body_part
|
||||
amputation_point = limb.amputation_point
|
||||
joint = limb.joint
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
var/global/list/all_robolimbs = list()
|
||||
var/global/list/chargen_robolimbs = list()
|
||||
var/global/datum/robolimb/basic_robolimb
|
||||
var/list/all_robolimbs = list()
|
||||
var/list/chargen_robolimbs = list()
|
||||
var/datum/robolimb/basic_robolimb
|
||||
|
||||
/proc/populate_robolimb_list()
|
||||
basic_robolimb = new()
|
||||
@@ -18,26 +18,26 @@ var/global/datum/robolimb/basic_robolimb
|
||||
var/list/species_cannot_use = list()
|
||||
|
||||
/datum/robolimb/bishop
|
||||
company = "Bishop Cybernetics"
|
||||
company = "Bishop"
|
||||
desc = "This limb has a white polymer casing with blue holo-displays."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/bishop.dmi'
|
||||
|
||||
/datum/robolimb/hesphaistos
|
||||
company = "Hesphiastos Industries"
|
||||
company = "Hesphiastos"
|
||||
desc = "This limb has a militaristic black and green casing with gold stripes."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/hesphaistos.dmi'
|
||||
|
||||
/datum/robolimb/zenghu
|
||||
company = "Zeng-Hu Pharmaceuticals"
|
||||
company = "Zeng-Hu"
|
||||
desc = "This limb has a rubbery fleshtone covering with visible seams."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/zenghu.dmi'
|
||||
|
||||
/datum/robolimb/xion
|
||||
company = "Xion Manufacturing Group"
|
||||
company = "Xion"
|
||||
desc = "This limb has a minimalist black and red casing."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/xion.dmi'
|
||||
|
||||
/datum/robolimb/ipc
|
||||
company = "Morpheus Cyberkinetics"
|
||||
company = "Morpheus"
|
||||
desc = "This limb is simple and functional; no effort has been made to make it look human."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/ipc.dmi'
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
/obj/item/organ/external/diona/chest
|
||||
name = "core trunk"
|
||||
limb_name = "chest"
|
||||
organ_tag = BP_TORSO
|
||||
icon_name = "torso"
|
||||
max_damage = 200
|
||||
min_broken_damage = 50
|
||||
@@ -35,56 +35,58 @@
|
||||
vital = 1
|
||||
cannot_amputate = 1
|
||||
parent_organ = null
|
||||
gendered_icon = 1
|
||||
|
||||
/obj/item/organ/external/diona/groin
|
||||
name = "fork"
|
||||
limb_name = "groin"
|
||||
organ_tag = BP_GROIN
|
||||
icon_name = "groin"
|
||||
max_damage = 100
|
||||
min_broken_damage = 50
|
||||
w_class = 4
|
||||
body_part = LOWER_TORSO
|
||||
parent_organ = "chest"
|
||||
parent_organ = BP_TORSO
|
||||
gendered_icon = 1
|
||||
|
||||
/obj/item/organ/external/diona/arm
|
||||
name = "left upper tendril"
|
||||
limb_name = "l_arm"
|
||||
organ_tag = "l_arm"
|
||||
icon_name = "l_arm"
|
||||
max_damage = 35
|
||||
min_broken_damage = 20
|
||||
w_class = 3
|
||||
body_part = ARM_LEFT
|
||||
parent_organ = "chest"
|
||||
parent_organ = BP_TORSO
|
||||
can_grasp = 1
|
||||
|
||||
/obj/item/organ/external/diona/arm/right
|
||||
name = "right upper tendril"
|
||||
limb_name = "r_arm"
|
||||
organ_tag = "r_arm"
|
||||
icon_name = "r_arm"
|
||||
body_part = ARM_RIGHT
|
||||
|
||||
/obj/item/organ/external/diona/leg
|
||||
name = "left lower tendril"
|
||||
limb_name = "l_leg"
|
||||
organ_tag = "l_leg"
|
||||
icon_name = "l_leg"
|
||||
max_damage = 35
|
||||
min_broken_damage = 20
|
||||
w_class = 3
|
||||
body_part = LEG_LEFT
|
||||
icon_position = LEFT
|
||||
parent_organ = "groin"
|
||||
parent_organ = BP_GROIN
|
||||
can_stand = 1
|
||||
|
||||
/obj/item/organ/external/diona/leg/right
|
||||
name = "right lower tendril"
|
||||
limb_name = "r_leg"
|
||||
organ_tag = "r_leg"
|
||||
icon_name = "r_leg"
|
||||
body_part = LEG_RIGHT
|
||||
icon_position = RIGHT
|
||||
|
||||
/obj/item/organ/external/diona/foot
|
||||
name = "left foot"
|
||||
limb_name = "l_foot"
|
||||
organ_tag = "l_foot"
|
||||
icon_name = "l_foot"
|
||||
max_damage = 20
|
||||
min_broken_damage = 10
|
||||
@@ -96,7 +98,7 @@
|
||||
|
||||
/obj/item/organ/external/diona/foot/right
|
||||
name = "right foot"
|
||||
limb_name = "r_foot"
|
||||
organ_tag = "r_foot"
|
||||
icon_name = "r_foot"
|
||||
body_part = FOOT_RIGHT
|
||||
icon_position = RIGHT
|
||||
@@ -106,7 +108,7 @@
|
||||
|
||||
/obj/item/organ/external/diona/hand
|
||||
name = "left grasper"
|
||||
limb_name = "l_hand"
|
||||
organ_tag = "l_hand"
|
||||
icon_name = "l_hand"
|
||||
max_damage = 30
|
||||
min_broken_damage = 15
|
||||
@@ -117,13 +119,15 @@
|
||||
|
||||
/obj/item/organ/external/diona/hand/right
|
||||
name = "right grasper"
|
||||
limb_name = "r_hand"
|
||||
organ_tag = "r_hand"
|
||||
icon_name = "r_hand"
|
||||
body_part = HAND_RIGHT
|
||||
parent_organ = "r_arm"
|
||||
|
||||
//DIONA ORGANS.
|
||||
/obj/item/organ/external/diona/removed()
|
||||
if(status & ORGAN_ROBOT)
|
||||
return ..()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
..()
|
||||
if(!istype(H) || !H.organs || !H.organs.len)
|
||||
@@ -131,63 +135,65 @@
|
||||
if(prob(50) && spawn_diona_nymph(get_turf(src)))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/diona/process()
|
||||
return
|
||||
|
||||
/obj/item/organ/diona/strata
|
||||
name = "neural strata"
|
||||
parent_organ = "chest"
|
||||
|
||||
/obj/item/organ/diona/bladder
|
||||
name = "gas bladder"
|
||||
parent_organ = "head"
|
||||
|
||||
/obj/item/organ/diona/polyp
|
||||
name = "polyp segment"
|
||||
parent_organ = "groin"
|
||||
|
||||
/obj/item/organ/diona/ligament
|
||||
name = "anchoring ligament"
|
||||
parent_organ = "groin"
|
||||
|
||||
/obj/item/organ/diona/node
|
||||
name = "receptor node"
|
||||
parent_organ = "head"
|
||||
|
||||
/obj/item/organ/diona/nutrients
|
||||
name = "nutrient vessel"
|
||||
parent_organ = "chest"
|
||||
|
||||
/obj/item/organ/diona
|
||||
/obj/item/organ/internal/diona
|
||||
name = "diona nymph"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "nymph"
|
||||
organ_tag = "special" // Turns into a nymph instantly, no transplanting possible.
|
||||
|
||||
/obj/item/organ/diona/removed(var/mob/living/user)
|
||||
/obj/item/organ/internal/diona/removed(var/mob/living/user, var/skip_nymph)
|
||||
if(status & ORGAN_ROBOT)
|
||||
return ..()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
..()
|
||||
if(!istype(H) || !H.organs || !H.organs.len)
|
||||
H.death()
|
||||
if(prob(50) && spawn_diona_nymph(get_turf(src)))
|
||||
if(prob(50) && !skip_nymph && spawn_diona_nymph(get_turf(src)))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/internal/diona/process()
|
||||
return
|
||||
|
||||
/obj/item/organ/internal/diona/strata
|
||||
name = "neural strata"
|
||||
parent_organ = BP_TORSO
|
||||
|
||||
/obj/item/organ/internal/diona/bladder
|
||||
name = "gas bladder"
|
||||
parent_organ = BP_HEAD
|
||||
|
||||
/obj/item/organ/internal/diona/polyp
|
||||
name = "polyp segment"
|
||||
parent_organ = BP_GROIN
|
||||
|
||||
/obj/item/organ/internal/diona/ligament
|
||||
name = "anchoring ligament"
|
||||
parent_organ = BP_GROIN
|
||||
|
||||
/obj/item/organ/internal/diona/node
|
||||
name = "receptor node"
|
||||
parent_organ = BP_HEAD
|
||||
|
||||
/obj/item/organ/internal/diona/nutrients
|
||||
name = O_NUTRIENT
|
||||
parent_organ = BP_TORSO
|
||||
|
||||
// These are different to the standard diona organs as they have a purpose in other
|
||||
// species (absorbing radiation and light respectively)
|
||||
/obj/item/organ/diona/nutrients
|
||||
name = "nutrient vessel"
|
||||
organ_tag = "nutrient vessel"
|
||||
/obj/item/organ/internal/diona/nutrients
|
||||
name = O_NUTRIENT
|
||||
organ_tag = O_NUTRIENT
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "claw"
|
||||
|
||||
/obj/item/organ/diona/nutrients/removed()
|
||||
return
|
||||
/obj/item/organ/internal/diona/nutrients/removed(var/mob/user)
|
||||
return ..(user, 1)
|
||||
|
||||
/obj/item/organ/diona/node
|
||||
/obj/item/organ/internal/diona/node
|
||||
name = "receptor node"
|
||||
organ_tag = "receptor node"
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "claw"
|
||||
|
||||
/obj/item/organ/diona/node/removed()
|
||||
/obj/item/organ/internal/diona/node/removed()
|
||||
return
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
/obj/item/organ/cell
|
||||
/obj/item/organ/internal/cell
|
||||
name = "microbattery"
|
||||
desc = "A small, powerful cell for use in fully prosthetic bodies."
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon_state = "scell"
|
||||
organ_tag = "cell"
|
||||
parent_organ = "chest"
|
||||
parent_organ = BP_TORSO
|
||||
vital = 1
|
||||
|
||||
/obj/item/organ/cell/New()
|
||||
/obj/item/organ/internal/cell/New()
|
||||
robotize()
|
||||
..()
|
||||
|
||||
/obj/item/organ/cell/replaced()
|
||||
/obj/item/organ/internal/cell/replaced()
|
||||
..()
|
||||
// This is very ghetto way of rebooting an IPC. TODO better way.
|
||||
if(owner && owner.stat == DEAD)
|
||||
@@ -19,59 +19,50 @@
|
||||
owner.visible_message("<span class='danger'>\The [owner] twitches visibly!</span>")
|
||||
|
||||
// Used for an MMI or posibrain being installed into a human.
|
||||
/obj/item/organ/mmi_holder
|
||||
name = "brain"
|
||||
/obj/item/organ/internal/mmi_holder
|
||||
name = "brain interface"
|
||||
organ_tag = "brain"
|
||||
parent_organ = "head"
|
||||
parent_organ = BP_HEAD
|
||||
vital = 1
|
||||
var/obj/item/device/mmi/stored_mmi
|
||||
|
||||
/obj/item/organ/mmi_holder/Destroy()
|
||||
/obj/item/organ/internal/mmi_holder/Destroy()
|
||||
stored_mmi = null
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/mmi_holder/New()
|
||||
..()
|
||||
/obj/item/organ/internal/mmi_holder/New(var/mob/living/carbon/human/new_owner, var/internal)
|
||||
..(new_owner, internal)
|
||||
if(!stored_mmi)
|
||||
stored_mmi = new(src)
|
||||
sleep(-1)
|
||||
update_from_mmi()
|
||||
|
||||
spawn(1)
|
||||
|
||||
if(!owner)
|
||||
if(stored_mmi)
|
||||
stored_mmi.loc = get_turf(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
update_from_mmi()
|
||||
if(stored_mmi.brainmob && owner && owner.stat == DEAD)
|
||||
owner.stat = 0
|
||||
owner.visible_message("<span class='danger'>\The [owner] twitches visibly!</span>")
|
||||
|
||||
/obj/item/organ/mmi_holder/proc/update_from_mmi()
|
||||
|
||||
if(!stored_mmi)
|
||||
return
|
||||
/obj/item/organ/internal/mmi_holder/proc/update_from_mmi()
|
||||
|
||||
if(!stored_mmi.brainmob)
|
||||
stored_mmi.brainmob = new(src)
|
||||
stored_mmi.brainmob = new(stored_mmi)
|
||||
stored_mmi.brainobj = new(stored_mmi)
|
||||
stored_mmi.brainmob.container = stored_mmi
|
||||
stored_mmi.brainmob.real_name = owner.real_name
|
||||
stored_mmi.brainmob.name = stored_mmi.brainmob.real_name
|
||||
stored_mmi.name = "[initial(stored_mmi.name)] ([owner.real_name])"
|
||||
|
||||
stored_mmi.brainmob.real_name = owner.name
|
||||
stored_mmi.brainmob.name = stored_mmi.brainmob.real_name
|
||||
|
||||
if(owner)
|
||||
stored_mmi.name = "[initial(stored_mmi.name)] ([owner.name])"
|
||||
if(!owner) return
|
||||
|
||||
name = stored_mmi.name
|
||||
desc = stored_mmi.desc
|
||||
icon = stored_mmi.icon
|
||||
|
||||
stored_mmi.icon_state = "mmi_full"
|
||||
icon_state = stored_mmi.icon_state
|
||||
|
||||
/obj/item/organ/mmi_holder/removed()
|
||||
update_from_mmi()
|
||||
return ..()
|
||||
if(owner && owner.stat == DEAD)
|
||||
owner.stat = 0
|
||||
dead_mob_list -= owner
|
||||
living_mob_list |= owner
|
||||
owner.visible_message("<span class='danger'>\The [owner] twitches visibly!</span>")
|
||||
|
||||
/obj/item/organ/mmi_holder/removed(var/mob/living/user)
|
||||
/obj/item/organ/internal/mmi_holder/removed(var/mob/living/user)
|
||||
|
||||
if(stored_mmi)
|
||||
stored_mmi.loc = get_turf(src)
|
||||
@@ -84,9 +75,14 @@
|
||||
holder_mob.drop_from_inventory(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/mmi_holder/posibrain
|
||||
name = "positronic brain"
|
||||
/obj/item/organ/internal/mmi_holder/posibrain
|
||||
name = "positronic brain interface"
|
||||
|
||||
/obj/item/organ/mmi_holder/posibrain/New()
|
||||
/obj/item/organ/internal/mmi_holder/posibrain/New()
|
||||
stored_mmi = new /obj/item/device/mmi/digital/posibrain(src)
|
||||
..()
|
||||
|
||||
/obj/item/organ/internal/mmi_holder/posibrain/update_from_mmi()
|
||||
..()
|
||||
stored_mmi.icon_state = "posibrain-occupied"
|
||||
icon_state = stored_mmi.icon_state
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
/obj/item/organ/external/chest
|
||||
name = "upper body"
|
||||
limb_name = "chest"
|
||||
organ_tag = BP_TORSO
|
||||
icon_name = "torso"
|
||||
max_damage = 100
|
||||
min_broken_damage = 35
|
||||
@@ -21,34 +21,34 @@
|
||||
|
||||
/obj/item/organ/external/groin
|
||||
name = "lower body"
|
||||
limb_name = "groin"
|
||||
organ_tag = BP_GROIN
|
||||
icon_name = "groin"
|
||||
max_damage = 100
|
||||
min_broken_damage = 35
|
||||
w_class = 4
|
||||
body_part = LOWER_TORSO
|
||||
vital = 1
|
||||
parent_organ = "chest"
|
||||
parent_organ = BP_TORSO
|
||||
amputation_point = "lumbar"
|
||||
joint = "hip"
|
||||
dislocated = -1
|
||||
gendered_icon = 1
|
||||
|
||||
/obj/item/organ/external/arm
|
||||
limb_name = "l_arm"
|
||||
organ_tag = "l_arm"
|
||||
name = "left arm"
|
||||
icon_name = "l_arm"
|
||||
max_damage = 50
|
||||
min_broken_damage = 30
|
||||
w_class = 3
|
||||
body_part = ARM_LEFT
|
||||
parent_organ = "chest"
|
||||
parent_organ = BP_TORSO
|
||||
joint = "left elbow"
|
||||
amputation_point = "left shoulder"
|
||||
can_grasp = 1
|
||||
|
||||
/obj/item/organ/external/arm/right
|
||||
limb_name = "r_arm"
|
||||
organ_tag = "r_arm"
|
||||
name = "right arm"
|
||||
icon_name = "r_arm"
|
||||
body_part = ARM_RIGHT
|
||||
@@ -56,7 +56,7 @@
|
||||
amputation_point = "right shoulder"
|
||||
|
||||
/obj/item/organ/external/leg
|
||||
limb_name = "l_leg"
|
||||
organ_tag = "l_leg"
|
||||
name = "left leg"
|
||||
icon_name = "l_leg"
|
||||
max_damage = 50
|
||||
@@ -64,13 +64,13 @@
|
||||
w_class = 3
|
||||
body_part = LEG_LEFT
|
||||
icon_position = LEFT
|
||||
parent_organ = "groin"
|
||||
parent_organ = BP_GROIN
|
||||
joint = "left knee"
|
||||
amputation_point = "left hip"
|
||||
can_stand = 1
|
||||
|
||||
/obj/item/organ/external/leg/right
|
||||
limb_name = "r_leg"
|
||||
organ_tag = "r_leg"
|
||||
name = "right leg"
|
||||
icon_name = "r_leg"
|
||||
body_part = LEG_RIGHT
|
||||
@@ -79,7 +79,7 @@
|
||||
amputation_point = "right hip"
|
||||
|
||||
/obj/item/organ/external/foot
|
||||
limb_name = "l_foot"
|
||||
organ_tag = "l_foot"
|
||||
name = "left foot"
|
||||
icon_name = "l_foot"
|
||||
max_damage = 30
|
||||
@@ -97,7 +97,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/foot/right
|
||||
limb_name = "r_foot"
|
||||
organ_tag = "r_foot"
|
||||
name = "right foot"
|
||||
icon_name = "r_foot"
|
||||
body_part = FOOT_RIGHT
|
||||
@@ -107,7 +107,7 @@
|
||||
amputation_point = "right ankle"
|
||||
|
||||
/obj/item/organ/external/hand
|
||||
limb_name = "l_hand"
|
||||
organ_tag = "l_hand"
|
||||
name = "left hand"
|
||||
icon_name = "l_hand"
|
||||
max_damage = 30
|
||||
@@ -124,7 +124,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/hand/right
|
||||
limb_name = "r_hand"
|
||||
organ_tag = "r_hand"
|
||||
name = "right hand"
|
||||
icon_name = "r_hand"
|
||||
body_part = HAND_RIGHT
|
||||
@@ -133,7 +133,7 @@
|
||||
amputation_point = "right wrist"
|
||||
|
||||
/obj/item/organ/external/head
|
||||
limb_name = "head"
|
||||
organ_tag = BP_HEAD
|
||||
icon_name = "head"
|
||||
name = "head"
|
||||
max_damage = 75
|
||||
@@ -141,7 +141,7 @@
|
||||
w_class = 3
|
||||
body_part = HEAD
|
||||
vital = 1
|
||||
parent_organ = "chest"
|
||||
parent_organ = BP_TORSO
|
||||
joint = "jaw"
|
||||
amputation_point = "neck"
|
||||
gendered_icon = 1
|
||||
|
||||
@@ -1,52 +1,52 @@
|
||||
//XENOMORPH ORGANS
|
||||
/obj/item/organ/xenos
|
||||
/obj/item/organ/internal/xenos
|
||||
name = "xeno organ"
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
desc = "It smells like an accident in a chemical factory."
|
||||
|
||||
/obj/item/organ/xenos/eggsac
|
||||
/obj/item/organ/internal/xenos/eggsac
|
||||
name = "egg sac"
|
||||
parent_organ = "groin"
|
||||
parent_organ = BP_GROIN
|
||||
icon_state = "xgibmid1"
|
||||
organ_tag = "egg sac"
|
||||
organ_tag = O_EGG
|
||||
|
||||
/obj/item/organ/xenos/plasmavessel
|
||||
/obj/item/organ/internal/xenos/plasmavessel
|
||||
name = "plasma vessel"
|
||||
parent_organ = "chest"
|
||||
parent_organ = BP_TORSO
|
||||
icon_state = "xgibdown1"
|
||||
organ_tag = "plasma vessel"
|
||||
organ_tag = O_PLASMA
|
||||
var/stored_plasma = 0
|
||||
var/max_plasma = 500
|
||||
|
||||
/obj/item/organ/xenos/plasmavessel/queen
|
||||
/obj/item/organ/internal/xenos/plasmavessel/queen
|
||||
name = "bloated plasma vessel"
|
||||
stored_plasma = 200
|
||||
max_plasma = 500
|
||||
|
||||
/obj/item/organ/xenos/plasmavessel/sentinel
|
||||
/obj/item/organ/internal/xenos/plasmavessel/sentinel
|
||||
stored_plasma = 100
|
||||
max_plasma = 250
|
||||
|
||||
/obj/item/organ/xenos/plasmavessel/hunter
|
||||
/obj/item/organ/internal/xenos/plasmavessel/hunter
|
||||
name = "tiny plasma vessel"
|
||||
stored_plasma = 100
|
||||
max_plasma = 150
|
||||
|
||||
/obj/item/organ/xenos/acidgland
|
||||
/obj/item/organ/internal/xenos/acidgland
|
||||
name = "acid gland"
|
||||
parent_organ = "head"
|
||||
parent_organ = BP_HEAD
|
||||
icon_state = "xgibtorso"
|
||||
organ_tag = "acid gland"
|
||||
organ_tag = O_ACID
|
||||
|
||||
/obj/item/organ/xenos/hivenode
|
||||
/obj/item/organ/internal/xenos/hivenode
|
||||
name = "hive node"
|
||||
parent_organ = "chest"
|
||||
parent_organ = BP_TORSO
|
||||
icon_state = "xgibmid2"
|
||||
organ_tag = "hive node"
|
||||
organ_tag = O_HIVE
|
||||
|
||||
/obj/item/organ/xenos/resinspinner
|
||||
/obj/item/organ/internal/xenos/resinspinner
|
||||
name = "resin spinner"
|
||||
parent_organ = "head"
|
||||
parent_organ = BP_HEAD
|
||||
icon_state = "xgibmid2"
|
||||
organ_tag = "resin spinner"
|
||||
organ_tag = O_RESIN
|
||||
|
||||
|
||||
Reference in New Issue
Block a user