Get ORGANized (#4211)

This commit is contained in:
Zandario
2022-06-20 17:56:08 -05:00
committed by GitHub
parent ef707bf7b1
commit d43eee4558
36 changed files with 707 additions and 731 deletions

View File

@@ -3201,18 +3201,28 @@
#include "code\modules\nifsoft\software\13_soulcatcher.dm"
#include "code\modules\nifsoft\software\14_commlink.dm"
#include "code\modules\nifsoft\software\15_misc.dm"
#include "code\modules\organs\adherent_external.dm"
#include "code\modules\organs\_organ_defines.dm"
#include "code\modules\organs\blood.dm"
#include "code\modules\organs\external_defines.dm"
#include "code\modules\organs\internal_defines.dm"
#include "code\modules\organs\misc.dm"
#include "code\modules\organs\organ.dm"
#include "code\modules\organs\organ_external.dm"
#include "code\modules\organs\organ_external_vr.dm"
#include "code\modules\organs\organ_icon.dm"
#include "code\modules\organs\organ_stump.dm"
#include "code\modules\organs\external\_external.dm"
#include "code\modules\organs\external\_external_icons.dm"
#include "code\modules\organs\external\standard.dm"
#include "code\modules\organs\external\standard_vr.dm"
#include "code\modules\organs\external\stump.dm"
#include "code\modules\organs\external\species\adherent.dm"
#include "code\modules\organs\external\species\alraune.dm"
#include "code\modules\organs\external\species\diona.dm"
#include "code\modules\organs\external\species\shadekin.dm"
#include "code\modules\organs\external\species\slime.dm"
#include "code\modules\organs\external\species\teshari.dm"
#include "code\modules\organs\external\species\unathi.dm"
#include "code\modules\organs\external\species\xenos.dm"
#include "code\modules\organs\external\wounds\wound.dm"
#include "code\modules\organs\pain.dm"
#include "code\modules\organs\robolimbs.dm"
#include "code\modules\organs\wound.dm"
#include "code\modules\organs\internal\adherent.dm"
#include "code\modules\organs\internal\_internal.dm"
#include "code\modules\organs\internal\appendix.dm"
#include "code\modules\organs\internal\augment.dm"
#include "code\modules\organs\internal\brain.dm"
@@ -3222,7 +3232,6 @@
#include "code\modules\organs\internal\kidneys.dm"
#include "code\modules\organs\internal\liver.dm"
#include "code\modules\organs\internal\lungs.dm"
#include "code\modules\organs\internal\organ_internal.dm"
#include "code\modules\organs\internal\spleen.dm"
#include "code\modules\organs\internal\stomach.dm"
#include "code\modules\organs\internal\voicebox.dm"
@@ -3231,26 +3240,23 @@
#include "code\modules\organs\internal\robotic\_robotic.dm"
#include "code\modules\organs\internal\robotic\diagnostic.dm"
#include "code\modules\organs\internal\robotic\heatsink.dm"
#include "code\modules\organs\subtypes\alraune.dm"
#include "code\modules\organs\subtypes\diona.dm"
#include "code\modules\organs\internal\species\adherent.dm"
#include "code\modules\organs\internal\species\diona.dm"
#include "code\modules\organs\internal\species\replicant.dm"
#include "code\modules\organs\internal\species\shadekin.dm"
#include "code\modules\organs\internal\species\slime.dm"
#include "code\modules\organs\internal\species\subspecies_graver.dm"
#include "code\modules\organs\internal\species\vox.dm"
#include "code\modules\organs\internal\species\subspecies_spacer.dm"
#include "code\modules\organs\internal\species\xenochimera.dm"
#include "code\modules\organs\internal\species\unathi.dm"
#include "code\modules\organs\internal\species\xenos.dm"
#include "code\modules\organs\robolimbs.dm"
#include "code\modules\organs\subtypes\indestructible.dm"
#include "code\modules\organs\subtypes\machine.dm"
#include "code\modules\organs\subtypes\nano.dm"
#include "code\modules\organs\subtypes\replicant.dm"
#include "code\modules\organs\subtypes\shadekin.dm"
#include "code\modules\organs\subtypes\slime.dm"
#include "code\modules\organs\subtypes\standard.dm"
#include "code\modules\organs\subtypes\standard_vr.dm"
#include "code\modules\organs\subtypes\subspecies_graver.dm"
#include "code\modules\organs\subtypes\subspecies_spacer.dm"
#include "code\modules\organs\subtypes\teshari.dm"
#include "code\modules\organs\subtypes\unathi.dm"
#include "code\modules\organs\subtypes\unbreakable.dm"
#include "code\modules\organs\subtypes\unseverable.dm"
#include "code\modules\organs\subtypes\vox.dm"
#include "code\modules\organs\subtypes\vox_vr.dm"
#include "code\modules\organs\subtypes\xenochimera.dm"
#include "code\modules\organs\subtypes\xenos.dm"
#include "code\modules\overmap\abductor_vr.dm"
#include "code\modules\overmap\bluespace_rift.dm"
#include "code\modules\overmap\champagne.dm"

View File

@@ -1,5 +1,11 @@
//! *ALL DEFINES RELATED TO ORGANS GO HERE* !//
//These control the damage thresholds for the various ways of removing limbs
#define DROPLIMB_THRESHOLD_EDGE 5
#define DROPLIMB_THRESHOLD_TEAROFF 2
#define DROPLIMB_THRESHOLD_DESTROY 1
/// Global list of organs for future use.
#define O_ALL (O_ALL_STANDARD + O_ALL_NONSTANDARD)
/// Global list of all standard body parts.

View File

@@ -0,0 +1,80 @@
var/list/organ_cache = list()
/obj/item/organ
name = "organ"
icon = 'icons/obj/surgery.dmi'
germ_level = 0
drop_sound = 'sound/items/drop/flesh.ogg'
pickup_sound = 'sound/items/pickup/flesh.ogg'
//! ## STRINGS VARS
/// Unique identifier.
var/organ_tag = "organ"
/// The organ holding this object.
var/parent_organ = BP_TORSO
//! STATUS VARS
/// Various status flags
var/status = 0
/// Lose a vital limb, die immediately.
var/vital
/// Current damage to the organ
var/damage = 0
/// Flag for what kind of robotic organ, if valid.
var/robotic = 0
/// If true, this organ can't feel pain.
var/stapled_nerves = FALSE
//! ##REFERENCE VARS
/// Current mob owning the organ.
var/mob/living/carbon/human/owner
/// Transplant match data.
var/list/transplant_data
/// Trauma data for forensics.
var/list/autopsy_data = list()
/// Traces of chemicals in the organ.
var/list/trace_chemicals = list()
/// Original DNA.
var/datum/dna/dna
/// Original species.
var/datum/species/species
var/s_base
//! ## DAMAGE VARS
/// Damage before considered bruised
var/min_bruised_damage = 10
/// Damage before becoming broken
var/min_broken_damage = 30
/// Damage cap
var/max_damage
/// Can this organ reject?
var/can_reject = TRUE
/// Is this organ already being rejected?
var/rejecting
/// Can this organ decay at all?
var/decays = TRUE
/// If true, prevent organ decay.
var/preserved = FALSE
//! ## LANGUAGE VARS - For organs that assist with certain languages.
var/list/will_assist_languages = list()
var/list/datum/language/assists_languages = list()
//! ## VERB VARS
/// Verbs added by the organ when present in the body.
var/list/organ_verbs
/// Is the parent supposed to be organic, robotic, assisted?
var/list/target_parent_classes = list()
/// Will the organ give its verbs when it isn't a perfect match? I.E., assisted in organic, synthetic in organic.
var/forgiving_class = TRUE
/// Can we butcher this organ.
var/butcherable = TRUE
/// What does butchering, if possible, make?
var/meat_type

View File

@@ -1,114 +0,0 @@
/obj/item/organ/external/chest/crystal
name = "tendril junction"
amputation_point = "axis"
joint = "central axis"
model = "NULL DATA."
w_class = ITEMSIZE_LARGE
gendered_icon = 0
dislocated = -1
max_damage = 50
min_broken_damage = 25
// arterial_bleed_severity = 0
encased = "ceramic hull"
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_BREAK | ORGAN_FLAG_HEALS_OVERKILL
/obj/item/organ/external/groin/crystal
name = "trailing tendrils"
joint = "base"
// arterial_bleed_severity = 0
dislocated = -1
max_damage = 50
min_broken_damage = 25
gendered_icon = 0
encased = "ceramic hull"
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/head/crystal
name = "chassis core"
amputation_point = "connector socket"
joint = "connector socket"
gendered_icon = 0
// arterial_bleed_severity = 0
dislocated = -1
max_damage = 50
min_broken_damage = 25
encased = "ceramic hull"
eye_icon_location = 'icons/mob/human_races/adherent/eyes.dmi'
eye_icon = "eyes"
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_HEALS_OVERKILL | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/arm/crystal
name = "left grasping tendril"
amputation_point = "midpoint"
joint = "base"
gendered_icon = 0
// arterial_bleed_severity = 0
dislocated = -1
max_damage = 20
min_broken_damage = 10
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/arm/right/crystal
name = "right grasping tendril"
amputation_point = "midpoint"
joint = "base"
gendered_icon = 0
// arterial_bleed_severity = 0
dislocated = -1
max_damage = 20
min_broken_damage = 10
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/hand/crystal
name = "left maniple tendril"
amputation_point = "midpoint"
joint = "base"
gendered_icon = 0
// arterial_bleed_severity = 0
dislocated = -1
max_damage = 20
min_broken_damage = 10
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/hand/right/crystal
name = "right maniple tendril"
amputation_point = "midpoint"
joint = "base"
gendered_icon = 0
// arterial_bleed_severity = 0
dislocated = -1
max_damage = 20
min_broken_damage = 10
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/leg/tendril
name = "first tendril"
amputation_point = "midpoint"
joint = "base"
gendered_icon = 0
organ_tag = BP_L_LEG
parent_organ = BP_TORSO
// arterial_bleed_severity = 0
dislocated = -1
max_damage = 20
min_broken_damage = 10
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/leg/right/tendril
name = "second tendril"
robotic = ORGAN_CRYSTAL
/obj/item/organ/external/foot/tendril
name = "third tendril"
robotic = ORGAN_CRYSTAL
/obj/item/organ/external/foot/right/tendril
name = "fourth tendril"
robotic = ORGAN_CRYSTAL

View File

@@ -2,136 +2,6 @@
EXTERNAL ORGANS
****************************************************/
//These control the damage thresholds for the various ways of removing limbs
#define DROPLIMB_THRESHOLD_EDGE 5
#define DROPLIMB_THRESHOLD_TEAROFF 2
#define DROPLIMB_THRESHOLD_DESTROY 1
/obj/item/organ/external
name = "external"
min_broken_damage = 30
max_damage = 0
dir = SOUTH
organ_tag = "limb"
//* Strings *//
/// Fracture description if any.
var/broken_description
/// Modifier used for generating the on-mob damage overlay for this limb.
var/damage_state = "00"
//* Damage vars. *//
/// Multiplier for incoming brute damage.
var/brute_mod = 1
/// As above for burn.
var/burn_mod = 1
/// Actual current brute damage.
var/brute_dam = 0
/// Actual current burn damage.
var/burn_dam = 0
/// used in healing/processing calculations.
var/last_dam = -1
var/spread_dam = 0
/// If a needle has a chance to fail to penetrate.
var/thick_skin = 0
/// EMP damage multiplier
var/emp_mod = 1
//* Appearance vars. *//
/// Snowflake warning, reee. Used for slime limbs.
var/nonsolid
/// Also for slimes. Used for transparent limbs.
var/transparent = 0
/// Icon state base.
var/icon_name = null
/// Part flag
var/body_part = null
/// Used in mob overlay layering calculations.
var/icon_position = 0
/// Used when caching robolimb icons.
var/model
/// Used to force override of species-specific limb icons (for prosthetics). Also used for any limbs chopped from a simple mob, and then attached to humans.
var/force_icon
/// Used to force the override of the icon-key generated using the species. Must be used in tandem with the above.
var/force_icon_key
/// Cached icon for use in mob overlays.
var/icon/mob_icon
/// Whether or not the icon state appends a gender.
var/gendered_icon = 0
/// Skin tone.
var/s_tone
/// Skin colour
var/list/s_col
/// How the skin colour is applied.
var/s_col_blend = ICON_ADD
/// Hair colour
var/list/h_col
/// Icon blend for body hair if any.
var/body_hair
var/mob/living/applied_pressure
/// Markings (body_markings) to apply to the icon
var/list/markings = list()
//* Wound and structural data. *//
/// How often wounds should be updated, a higher number means less often
var/wound_update_accuracy = 1
/// Wound datum list.
var/list/wounds = list()
/// Number of wounds, which is NOT wounds.len!
var/number_wounds = 0
/// Master-limb.
var/obj/item/organ/external/parent
/// Sub-limbs.
var/list/children = list()
/// Internal organs of this body part
var/list/internal_organs = list()
/// If a prosthetic limb is emagged, it will detonate when it fails.
var/sabotaged = 0
/// Currently implanted objects.
var/list/implants = list()
/// Relative size of the organ.
var/organ_rel_size = 25
/// Chance of missing.
var/base_miss_chance = 20
var/atom/movable/splinted
//* Joint/state stuff. *//
/// It would be more appropriate if these two were named "affects_grasp" and "affects_stand" at this point
var/can_grasp
/// Modifies stance tally/ability to stand.
var/can_stand
/// Scarred/burned beyond recognition.
var/disfigured = 0
/// Impossible to amputate.
var/cannot_amputate
/// Impossible to fracture.
var/cannot_break
/// Impossible to gib, distinct from amputation.
var/cannot_gib
/// Descriptive string used in dislocation.
var/joint = "joint"
/// Descriptive string used in amputation.
var/amputation_point
/// If you target a joint, you can dislocate the limb, impairing it's usefulness and causing pain.
var/dislocated = 0
/// Needs to be opened with a saw to access the organs.
var/encased
//* Surgery vars. *//
var/open = 0
var/stage = 0
var/cavity = 0
/// Surgical repair stage for burn.
var/burn_stage = 0
/// Surgical repair stage for brute.
var/brute_stage = 0
/// HUD element variable, see organ_icon.dm get_damage_hud_image()
var/image/hud_damage_image
/// makes this dumb as fuck mechanic slightly less awful - records queued syringe infections instead of a spawn()
var/syringe_infection_queued
/obj/item/organ/external/Destroy()
if(parent && parent.children)
@@ -1204,6 +1074,23 @@ Note that amputating the affected organ does in fact remove the infection from t
owner.refresh_modular_limb_verbs()
return 1
//! ## VIRGO HOOK, TODO: Integrate this.
//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 ..()
/obj/item/organ/external/proc/mutate()
if(src.robotic >= ORGAN_ROBOT)
return

View File

@@ -0,0 +1,116 @@
/obj/item/organ/external/chest/crystal
name = "tendril junction"
amputation_point = "axis"
joint = "central axis"
model = "NULL DATA."
w_class = ITEMSIZE_LARGE
gendered_icon = 0
dislocated = -1
max_damage = 50
min_broken_damage = 25
// arterial_bleed_severity = 0
encased = "ceramic hull"
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_BREAK | ORGAN_FLAG_HEALS_OVERKILL
/obj/item/organ/external/groin/crystal
name = "trailing tendrils"
joint = "base"
// arterial_bleed_severity = 0
dislocated = -1
max_damage = 50
min_broken_damage = 25
gendered_icon = 0
encased = "ceramic hull"
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/head/crystal
name = "chassis core"
amputation_point = "connector socket"
joint = "connector socket"
gendered_icon = 0
// arterial_bleed_severity = 0
dislocated = -1
max_damage = 50
min_broken_damage = 25
encased = "ceramic hull"
eye_icon_location = 'icons/mob/human_races/adherent/eyes.dmi'
eye_icon = "eyes"
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_HEALS_OVERKILL | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/arm/crystal
name = "left grasping tendril"
amputation_point = "midpoint"
joint = "base"
gendered_icon = 0
// arterial_bleed_severity = 0
dislocated = -1
max_damage = 20
min_broken_damage = 10
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/arm/right/crystal
name = "right grasping tendril"
amputation_point = "midpoint"
joint = "base"
gendered_icon = 0
// arterial_bleed_severity = 0
dislocated = -1
max_damage = 20
min_broken_damage = 10
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/hand/crystal
name = "left maniple tendril"
amputation_point = "midpoint"
joint = "base"
gendered_icon = 0
// arterial_bleed_severity = 0
dislocated = -1
max_damage = 20
min_broken_damage = 10
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/hand/right/crystal
name = "right maniple tendril"
amputation_point = "midpoint"
joint = "base"
gendered_icon = 0
// arterial_bleed_severity = 0
dislocated = -1
max_damage = 20
min_broken_damage = 10
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/leg/tendril
name = "first tendril"
amputation_point = "midpoint"
joint = "base"
gendered_icon = 0
organ_tag = BP_L_LEG
parent_organ = BP_TORSO
// arterial_bleed_severity = 0
dislocated = -1
max_damage = 20
min_broken_damage = 10
robotic = ORGAN_CRYSTAL
// limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_GRASP | ORGAN_FLAG_CAN_STAND | ORGAN_FLAG_CAN_BREAK
/obj/item/organ/external/leg/right/tendril
name = "second tendril"
robotic = ORGAN_CRYSTAL
/obj/item/organ/external/foot/tendril
name = "third tendril"
robotic = ORGAN_CRYSTAL
/obj/item/organ/external/foot/right/tendril
name = "fourth tendril"
robotic = ORGAN_CRYSTAL

View File

@@ -1,34 +1,34 @@
/obj/item/organ/external/chest/unbreakable/plant
spread_dam = 1
spread_dam = TRUE
/obj/item/organ/external/groin/unbreakable/plant
spread_dam = 1
spread_dam = TRUE
/obj/item/organ/external/arm/unbreakable/plant
spread_dam = 1
spread_dam = TRUE
/obj/item/organ/external/arm/right/unbreakable/plant
spread_dam = 1
spread_dam = TRUE
/obj/item/organ/external/leg/unbreakable/plant
spread_dam = 1
spread_dam = TRUE
/obj/item/organ/external/leg/right/unbreakable/plant
spread_dam = 1
spread_dam = TRUE
/obj/item/organ/external/foot/unbreakable/plant
spread_dam = 1
spread_dam = TRUE
/obj/item/organ/external/foot/right/unbreakable/plant
spread_dam = 1
spread_dam = TRUE
/obj/item/organ/external/hand/unbreakable/plant
spread_dam = 1
spread_dam = TRUE
/obj/item/organ/external/hand/right/unbreakable/plant
spread_dam = 1
spread_dam = TRUE
/obj/item/organ/external/head/unbreakable/plant //They don't need this anymore.
cannot_gib = 0
vital = 0
spread_dam = 1
spread_dam = TRUE
cannot_gib = FALSE
vital = FALSE

View File

@@ -1,11 +1,11 @@
/proc/spawn_diona_nymph(var/turf/target)
/proc/spawn_diona_nymph(turf/target)
if(!istype(target))
return 0
return FALSE
//This is a terrible hack and I should be ashamed.
var/datum/seed/diona = SSplants.seeds["diona"]
if(!diona)
return 0
return FALSE
. = TRUE
@@ -17,9 +17,10 @@
if(D)
if(!D.ckey || !D.client)
D.death()
/obj/item/organ/external/diona
name = "tendril"
cannot_break = 1
cannot_break = TRUE
amputation_point = "branch"
joint = "structural ligament"
dislocated = -1
@@ -32,10 +33,10 @@
min_broken_damage = 50
w_class = ITEMSIZE_HUGE
body_part = UPPER_TORSO
vital = 1
cannot_amputate = 1
vital = TRUE
cannot_amputate = TRUE
parent_organ = null
gendered_icon = 1
gendered_icon = TRUE
/obj/item/organ/external/diona/groin
name = "fork"
@@ -46,7 +47,7 @@
w_class = ITEMSIZE_LARGE
body_part = LOWER_TORSO
parent_organ = BP_TORSO
gendered_icon = 1
gendered_icon = TRUE
/obj/item/organ/external/diona/arm
name = "left upper tendril"
@@ -57,7 +58,7 @@
w_class = ITEMSIZE_NORMAL
body_part = ARM_LEFT
parent_organ = BP_TORSO
can_grasp = 1
can_grasp = TRUE
/obj/item/organ/external/diona/arm/right
name = "right upper tendril"
@@ -75,7 +76,7 @@
body_part = LEG_LEFT
icon_position = LEFT
parent_organ = BP_GROIN
can_stand = 1
can_stand = TRUE
/obj/item/organ/external/diona/leg/right
name = "right lower tendril"
@@ -94,7 +95,7 @@
body_part = FOOT_LEFT
icon_position = LEFT
parent_organ = BP_R_LEG
can_stand = 1
can_stand = TRUE
/obj/item/organ/external/diona/foot/right
name = "right foot"
@@ -115,7 +116,7 @@
w_class = ITEMSIZE_SMALL
body_part = HAND_LEFT
parent_organ = BP_L_ARM
can_grasp = 1
can_grasp = TRUE
/obj/item/organ/external/diona/hand/right
name = "right grasper"
@@ -135,113 +136,12 @@
if(prob(50) && spawn_diona_nymph(get_turf(src)))
qdel(src)
/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/internal/diona/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/internal/diona/process(delta_time)
return
/obj/item/organ/internal/diona/strata
name = "neural strata"
parent_organ = BP_TORSO
organ_tag = O_STRATA
/obj/item/organ/internal/diona/bladder
name = "gas bladder"
parent_organ = BP_HEAD
organ_tag = O_GBLADDER
/obj/item/organ/internal/diona/polyp
name = "polyp segment"
parent_organ = BP_GROIN
organ_tag = O_POLYP
/obj/item/organ/internal/diona/ligament
name = "anchoring ligament"
parent_organ = BP_GROIN
organ_tag = O_ANCHOR
/obj/item/organ/internal/diona/node
name = "receptor node"
parent_organ = BP_HEAD
organ_tag = O_RESPONSE
/obj/item/organ/internal/diona/nutrients
name = O_NUTRIENT
parent_organ = BP_TORSO
organ_tag = O_NUTRIENT
// These are different to the standard diona organs as they have a purpose in other
// species (absorbing radiation and light respectively)
/obj/item/organ/internal/diona/nutrients
name = O_NUTRIENT
organ_tag = O_NUTRIENT
icon = 'icons/mob/alien.dmi'
icon_state = "claw"
/obj/item/organ/internal/diona/nutrients/removed(var/mob/user)
return ..(user, 1)
/obj/item/organ/internal/diona/node
name = "response node"
parent_organ = BP_HEAD
organ_tag = O_RESPONSE
icon = 'icons/mob/alien.dmi'
icon_state = "claw"
/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(mapload)
. = ..()
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
cannot_break = 1
cannot_break = TRUE
amputation_point = "branch"
joint = "structural ligament"
dislocated = -1
vital = 0
vital = FALSE
slot_flags = SLOT_BELT

View File

@@ -1,11 +1,3 @@
/obj/item/organ/internal/brain/shadekin
can_assist = FALSE
var/dark_energy = 100
var/max_dark_energy = 100
var/dark_energy_infinite = FALSE
//! Blackeyed limbs.
/obj/item/organ/external/chest/crewkin

View File

@@ -0,0 +1,69 @@
/obj/item/organ/external/chest/unbreakable/slime
nonsolid = 1
max_damage = 50
encased = 0
spread_dam = 1
transparent = 1
/obj/item/organ/external/groin/unbreakable/slime
nonsolid = 1
max_damage = 30
spread_dam = 1
transparent = 1
/obj/item/organ/external/arm/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/arm/right/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/leg/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/leg/right/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/foot/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/foot/right/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/hand/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/hand/right/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/head/unbreakable/slime //They don't need this anymore.
nonsolid = 1
cannot_gib = 0
vital = 0
max_damage = 30
encased = 0
spread_dam = 1
transparent = 1

View File

@@ -0,0 +1,16 @@
/obj/item/organ/external/chest/unathi
max_damage = 100
min_broken_damage = 40
encased = "upper ribplates"
/obj/item/organ/external/groin/unathi
max_damage = 100
min_broken_damage = 40
encased = "lower ribplates"
/obj/item/organ/external/head/unathi
max_damage = 75
min_broken_damage = 35
eye_icon = "eyes_s"
force = 5
throwforce = 10

View File

@@ -0,0 +1,74 @@
// XENOMORPH EXTERNAL ORGANS
/obj/item/organ/external/chest/unseverable/xeno
cannot_gib = TRUE
cannot_amputate = TRUE
thick_skin = TRUE
/obj/item/organ/external/groin/unseverable/xeno
cannot_gib = TRUE
cannot_amputate = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/arm/unseverable/xeno
cannot_gib = TRUE
cannot_amputate = TRUE
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/arm/right/unseverable/xeno
cannot_gib = TRUE
cannot_amputate = TRUE
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/leg/unseverable/xeno
cannot_gib = TRUE
cannot_amputate = TRUE
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/leg/right/unseverable/xeno
cannot_gib = TRUE
cannot_amputate = TRUE
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/foot/unseverable/xeno
cannot_gib = TRUE
cannot_amputate = TRUE
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/foot/right/unseverable/xeno
cannot_gib = TRUE
cannot_amputate = TRUE
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/hand/unseverable/xeno
cannot_gib = TRUE
cannot_amputate = TRUE
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/hand/right/unseverable/xeno
cannot_gib = TRUE
cannot_amputate = TRUE
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/head/unseverable/xeno
cannot_gib = TRUE
cannot_amputate = TRUE
thick_skin = TRUE
eye_icon = "blank_eyes"

View File

@@ -12,12 +12,12 @@
min_broken_damage = 35
w_class = ITEMSIZE_HUGE
body_part = UPPER_TORSO
vital = 1
vital = TRUE
amputation_point = "spine"
joint = "neck"
dislocated = -1
gendered_icon = 1
cannot_amputate = 1
gendered_icon = TRUE
cannot_amputate = TRUE
parent_organ = null
encased = "ribcage"
organ_rel_size = 70
@@ -54,13 +54,13 @@
min_broken_damage = 35
w_class = ITEMSIZE_LARGE
body_part = LOWER_TORSO
vital = 1
vital = TRUE
parent_organ = BP_TORSO
amputation_point = "lumbar"
joint = "hip"
dislocated = -1
gendered_icon = 1
cannot_amputate = 1
gendered_icon = TRUE
cannot_amputate = TRUE
organ_rel_size = 30
/obj/item/organ/external/groin/handle_germ_effects()
@@ -87,7 +87,7 @@
parent_organ = BP_TORSO
joint = "left elbow"
amputation_point = "left shoulder"
can_grasp = 1
can_grasp = TRUE
force = 7
throwforce = 10
@@ -128,7 +128,7 @@
parent_organ = BP_GROIN
joint = "left knee"
amputation_point = "left hip"
can_stand = 1
can_stand = TRUE
force = 10
throwforce = 12
@@ -167,7 +167,7 @@
parent_organ = BP_L_LEG
joint = "left ankle"
amputation_point = "left ankle"
can_stand = 1
can_stand = TRUE
force = 3
throwforce = 6
@@ -211,7 +211,7 @@
parent_organ = BP_L_ARM
joint = "left wrist"
amputation_point = "left wrist"
can_grasp = 1
can_grasp = TRUE
organ_rel_size = 10
base_miss_chance = 50
force = 3
@@ -257,20 +257,20 @@
min_broken_damage = 35
w_class = ITEMSIZE_NORMAL
body_part = HEAD
vital = 1
vital = TRUE
parent_organ = BP_TORSO
joint = "jaw"
amputation_point = "neck"
gendered_icon = 1
gendered_icon = TRUE
cannot_gib = TRUE
encased = "skull"
base_miss_chance = 40
var/can_intake_reagents = 1
var/eye_icon = "eyes_s"
force = 3
throwforce = 7
var/eyes_over_markings = FALSE
var/can_intake_reagents = TRUE
var/eyes_over_markings = FALSE
var/eye_icon = "eyes_s"
var/eye_icon_location = 'icons/mob/human_face.dmi'
/obj/item/organ/external/head/Initialize(mapload)
@@ -278,7 +278,7 @@
cannot_gib = FALSE
return ..()
/obj/item/organ/external/head/robotize(var/company, var/skip_prosthetics, var/keep_organs)
/obj/item/organ/external/head/robotize(company, skip_prosthetics, keep_organs)
return ..(company, skip_prosthetics, 1)
/obj/item/organ/external/head/removed()

View File

@@ -1,7 +1,7 @@
//For custom heads with custom parts since the base code is restricted to a single icon file.
//! ## Leave everything here as it is for now since this is using unique behavior.
/// For custom heads with custom parts since the base code is restricted to a single icon file.
/obj/item/organ/external/head/vr/get_icon()
..()
overlays.Cut()
if(!owner || !owner.species)

View File

@@ -0,0 +1,137 @@
/obj/item/organ/external
name = "external"
max_damage = 0
min_broken_damage = 30
dir = SOUTH
organ_tag = "limb"
//! ## STRINGS
/// Fracture description if any.
var/broken_description
/// Modifier used for generating the on-mob damage overlay for this limb.
var/damage_state = "00"
//! ## DAMAGE VARS
/// Multiplier for incoming brute damage.
var/brute_mod = 1
/// As above for burn.
var/burn_mod = 1
/// EMP damage multiplier
var/emp_mod = 1
/// Actual current brute damage.
var/brute_dam = 0
/// Actual current burn damage.
var/burn_dam = 0
/// Used in healing/processing calculations.
var/last_dam = -1
/// If damage done to this organ spreads to connected organs.
var/spread_dam = FALSE
/// If a needle has a chance to fail to penetrate.
var/thick_skin = FALSE
/// If a prosthetic limb is emagged, it will detonate when it fails.
var/sabotaged = FALSE
/// Chance of missing.
var/base_miss_chance = 20
//! ## APPEARANCE VARS
/// Snowflake warning, reee. Used for slime limbs.
var/nonsolid
/// Also for slimes. Used for transparent limbs.
var/transparent = 0
/// Icon state base.
var/icon_name = null
/// Part flag
var/body_part = null
/// Used in mob overlay layering calculations.
var/icon_position = 0
/// Used when caching robolimb icons.
var/model
/// Used to force override of species-specific limb icons (for prosthetics). Also used for any limbs chopped from a simple mob, and then attached to humans.
var/force_icon
/// Used to force the override of the icon-key generated using the species. Must be used in tandem with the above.
var/force_icon_key
/// Cached icon for use in mob overlays.
var/icon/mob_icon
/// Whether or not the icon state appends a gender.
var/gendered_icon = 0
/// Skin tone.
var/s_tone
/// Skin colour
var/list/s_col
/// How the skin colour is applied.
var/s_col_blend = ICON_ADD
/// Hair colour
var/list/h_col
/// Icon blend for body hair if any.
var/body_hair
var/mob/living/applied_pressure
/// Markings (body_markings) to apply to the icon
var/list/markings = list()
//! ## STRUCTURAL VARS
/// Master-limb.
var/obj/item/organ/external/parent
/// Sub-limbs.
var/list/children = list()
/// Internal organs of this body part
var/list/internal_organs = list()
/// Currently implanted objects.
var/list/implants = list()
/// Relative size of the organ.
var/organ_rel_size = 25
var/atom/movable/splinted
//! ## WOUND VARS
/// How often wounds should be updated, a higher number means less often
var/wound_update_accuracy = 1
/// Wound datum list.
var/list/wounds = list()
/// Number of wounds, which is NOT wounds.len!
var/number_wounds = 0
//! ## JOINT/STATE VARS
/// It would be more appropriate if these two were named "affects_grasp" and "affects_stand" at this point
var/can_grasp
/// Modifies stance tally/ability to stand.
var/can_stand
/// Scarred/burned beyond recognition.
var/disfigured = FALSE
/// Impossible to amputate.
var/cannot_amputate
/// Impossible to fracture.
var/cannot_break
/// Impossible to gib, distinct from amputation.
var/cannot_gib
/// Descriptive string used in dislocation.
var/joint = "joint"
/// Descriptive string used in amputation.
var/amputation_point
/// If you target a joint, you can dislocate the limb, impairing it's usefulness and causing pain.
var/dislocated = FALSE
/// Needs to be opened with a saw to access the organs.
var/encased
//! ## SURGERY VARS
var/open = FALSE
var/stage = FALSE
var/cavity = FALSE
/// Surgical repair stage for burn.
var/burn_stage = 0
/// Surgical repair stage for brute.
var/brute_stage = 0
/// HUD element variable, see organ_icon.dm get_damage_hud_image()
var/image/hud_damage_image
/// makes this dumb as fuck mechanic slightly less awful - records queued syringe infections instead of a spawn()
var/syringe_infection_queued

View File

@@ -1,10 +1,3 @@
/****************************************************
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)
@@ -60,4 +53,3 @@
if(. >= 3 && antibiotics < ANTIBIO_OD) //INFECTION_LEVEL_THREE
if (prob(50))
take_damage(1,silent=prob(15))

View File

@@ -1,8 +1,4 @@
///Don't ask why it's here, I just know it won't work without it. This is my personnal coconut.jpg - Papalus
//GLOBAL_LIST_INIT(full_alphabet, list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"))
//#define PROTOCOL_ARTICLE "Protocol article [rand(100,999)]-[uppertext(pick(GLOB.full_alphabet))] subsection #[rand(10,99)]"
/obj/item/organ/internal/brain/adherent
name = "mentality matrix"
desc = "The self-contained, self-supporting internal 'brain' of an Adherent unit."

View File

@@ -0,0 +1,101 @@
/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/internal/diona/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/internal/diona/process(delta_time)
return
/obj/item/organ/internal/diona/strata
name = "neural strata"
parent_organ = BP_TORSO
organ_tag = O_STRATA
/obj/item/organ/internal/diona/bladder
name = "gas bladder"
parent_organ = BP_HEAD
organ_tag = O_GBLADDER
/obj/item/organ/internal/diona/polyp
name = "polyp segment"
parent_organ = BP_GROIN
organ_tag = O_POLYP
/obj/item/organ/internal/diona/ligament
name = "anchoring ligament"
parent_organ = BP_GROIN
organ_tag = O_ANCHOR
/obj/item/organ/internal/diona/node
name = "receptor node"
parent_organ = BP_HEAD
organ_tag = O_RESPONSE
/obj/item/organ/internal/diona/nutrients
name = O_NUTRIENT
parent_organ = BP_TORSO
organ_tag = O_NUTRIENT
// These are different to the standard diona organs as they have a purpose in other
// species (absorbing radiation and light respectively)
/obj/item/organ/internal/diona/nutrients
name = O_NUTRIENT
organ_tag = O_NUTRIENT
icon = 'icons/mob/alien.dmi'
icon_state = "claw"
/obj/item/organ/internal/diona/nutrients/removed(mob/user)
return ..(user, 1)
/obj/item/organ/internal/diona/node
name = "response node"
parent_organ = BP_HEAD
organ_tag = O_RESPONSE
icon = 'icons/mob/alien.dmi'
icon_state = "claw"
/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(mapload)
. = ..()
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)

View File

@@ -0,0 +1,6 @@
/obj/item/organ/internal/brain/shadekin
can_assist = FALSE
var/dark_energy = 100
var/max_dark_energy = 100
var/dark_energy_infinite = FALSE

View File

@@ -1,73 +1,3 @@
/obj/item/organ/external/chest/unbreakable/slime
nonsolid = 1
max_damage = 50
encased = 0
spread_dam = 1
transparent = 1
/obj/item/organ/external/groin/unbreakable/slime
nonsolid = 1
max_damage = 30
spread_dam = 1
transparent = 1
/obj/item/organ/external/arm/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/arm/right/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/leg/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/leg/right/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/foot/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/foot/right/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/hand/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/hand/right/unbreakable/slime
nonsolid = 1
max_damage = 20
spread_dam = 1
transparent = 1
/obj/item/organ/external/head/unbreakable/slime //They don't need this anymore.
nonsolid = 1
cannot_gib = 0
vital = 0
max_damage = 30
encased = 0
spread_dam = 1
transparent = 1
/*
* Internal Slime organs.
*/

View File

@@ -1,21 +1,3 @@
/obj/item/organ/external/chest/unathi
max_damage = 100
min_broken_damage = 40
encased = "upper ribplates"
/obj/item/organ/external/groin/unathi
max_damage = 100
min_broken_damage = 40
encased = "lower ribplates"
/obj/item/organ/external/head/unathi
max_damage = 75
min_broken_damage = 35
eye_icon = "eyes_s"
force = 5
throwforce = 10
/obj/item/organ/internal/heart/unathi
icon_state = "unathi_heart-on"
dead_icon = "unath_heart-off"

View File

@@ -1,5 +1,5 @@
/obj/item/organ/external/head/vox
eye_icon = "vox_eyes_s"
eye_icon = "vox_eyes_s_old"
//vox got different organs within. This will also help with regular surgeons knowing the organs within an alien as alien as vox.
/obj/item/organ/internal/brain/vox

View File

@@ -148,78 +148,3 @@
var/mob/living/carbon/human/H = owner
if(H.species.blood_color)
add_atom_colour(H.species.blood_color, FIXED_COLOUR_PRIORITY)
// XENOMORPH EXTERNAL ORGANS
/obj/item/organ/external/chest/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
thick_skin = TRUE
/obj/item/organ/external/groin/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/arm/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/arm/right/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/leg/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/leg/right/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/foot/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/foot/right/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/hand/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/hand/right/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
stapled_nerves = TRUE
encased = TRUE
thick_skin = TRUE
/obj/item/organ/external/head/unseverable/xeno
cannot_gib = 1
cannot_amputate = 1
thick_skin = TRUE
eye_icon = "blank_eyes"

View File

@@ -0,0 +1,8 @@
/****************************************************
INTERNAL ORGANS DEFINES
****************************************************/
/obj/item/organ/internal
/// Icon to use when the organ has died.
var/dead_icon
// Yep... That's it. - @Zandario

View File

@@ -1,78 +1,3 @@
var/list/organ_cache = list()
/obj/item/organ
name = "organ"
icon = 'icons/obj/surgery.dmi'
germ_level = 0
drop_sound = 'sound/items/drop/flesh.ogg'
pickup_sound = 'sound/items/pickup/flesh.ogg'
//* Strings. *//
/// Unique identifier.
var/organ_tag = "organ"
/// The organ holding this object.
var/parent_organ = BP_TORSO
//* Status tracking. *//
/// Various status flags
var/status = 0
/// Lose a vital limb, die immediately.
var/vital
/// Current damage to the organ
var/damage = 0
/// Flag for what kind of robotic organ, if valid.
var/robotic = 0
/// If true, this organ can't feel pain.
var/stapled_nerves = FALSE
//* Reference data. *//
/// Current mob owning the organ.
var/mob/living/carbon/human/owner
/// Transplant match data.
var/list/transplant_data
/// Trauma data for forensics.
var/list/autopsy_data = list()
/// Traces of chemicals in the organ.
var/list/trace_chemicals = list()
/// Original DNA.
var/datum/dna/dna
/// Original species.
var/datum/species/species
var/s_base
//* Damage vars. *//
/// Damage before considered bruised
var/min_bruised_damage = 10
/// Damage before becoming broken
var/min_broken_damage = 30
/// Damage cap
var/max_damage
/// Can this organ reject?
var/can_reject = TRUE
/// Is this organ already being rejected?
var/rejecting
/// Can this organ decay at all?
var/decays = TRUE
/// If true, prevent organ decay.
var/preserved = FALSE
//* Language vars. Putting them here in case we decide to do something crazy with sign-or-other-nonverbal languages.
var/list/will_assist_languages = list()
var/list/datum/language/assists_languages = list()
//* Organ verb vars.
/// Verbs added by the organ when present in the body.
var/list/organ_verbs
/// Is the parent supposed to be organic, robotic, assisted?
var/list/target_parent_classes = list()
/// Will the organ give its verbs when it isn't a perfect match? I.E., assisted in organic, synthetic in organic.
var/forgiving_class = TRUE
/// Can we butcher this organ.
var/butcherable = TRUE
/// What does butchering, if possible, make?
var/meat_type
/obj/item/organ/Initialize(mapload, internal)
. = ..()
var/mob/living/holder = loc

View File

@@ -1,15 +0,0 @@
//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 ..()

View File

@@ -1,41 +0,0 @@
/****************************************************
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.
// Heart is defined in heart.dm
// Lungs are defined in lungs.dm
// Kidneys is defined in kidneys.dm
// Eyes are defined in eyes.dm
// Liver is defined in liver.dm. The process here was different than the process in liver.dm, so I just kept the one in liver.dm
// Appendix is defined in appendix.dm

View File

@@ -1,2 +0,0 @@
/obj/item/organ/external/head/vox //Enables old vox eyes.
eye_icon = "vox_eyes_s_old"