Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Hawk_v3
2019-08-22 21:32:01 +01:00
167 changed files with 7562 additions and 3456 deletions

View File

@@ -78,6 +78,7 @@ var/list/organ_cache = list()
if(E.internal_organs == null)
E.internal_organs = list()
E.internal_organs |= src
H.internal_organs_by_name[organ_tag] = src
if(dna)
if(!blood_DNA)
blood_DNA = list()

View File

@@ -13,3 +13,7 @@
min_broken_damage = o_min_broken_damage
else
return ..()
/obj/item/organ/external/proc/is_hidden_by_tail()
if(owner && owner.tail_style && owner.tail_style.hide_body_parts && (organ_tag in owner.tail_style.hide_body_parts))
return 1

View File

@@ -56,3 +56,89 @@
max_damage = 30
encased = 0
spread_dam = 1
/*
* Internal Slime organs.
*/
/obj/item/organ/internal/heart/grey/colormatch/slime
name = "pneumatic network"
desc = "A disgusting sac of goo."
icon_state = "sac_slime"
dead_icon = null
standard_pulse_level = PULSE_NONE
/obj/item/organ/internal/heart/grey/colormatch/slime/process()
..()
if(!(QDELETED(src)) && src.loc != owner)
visible_message("<span class='notice'>\The [src] splatters!</span>")
var/turf/T = get_turf(src)
var/obj/effect/decal/cleanable/blood/B = new (T)
B.basecolor = src.color
B.update_icon()
qdel(src)
/obj/item/organ/internal/regennetwork
name = "pneumoregenesis network"
parent_organ = BP_TORSO
organ_tag = O_REGBRUTE
icon_state = "sac_slime"
var/strain = 0 // The amount of stress this organ is under. Capped at min_broken_damage, usually half its max damage.
var/last_strain_increase = 0 // World time of the last increase in strain.
var/strain_regen_cooldown = 5 MINUTES
/obj/item/organ/internal/regennetwork/Initialize()
..()
var/mob/living/carbon/human/H = null
spawn(15)
if(ishuman(owner))
H = owner
color = H.species.get_blood_colour(H)
/obj/item/organ/internal/regennetwork/proc/get_strain_percent(var/cost)
adjust_strain(cost)
if((status & ORGAN_CUT_AWAY) || (status & ORGAN_BROKEN) || (status & ORGAN_DEAD))
return 1
return round((strain / min_broken_damage) * 10) / 10
/obj/item/organ/internal/regennetwork/proc/adjust_strain(var/amount)
if(amount < 0 && world.time < (last_strain_increase + strain_regen_cooldown))
return
else if(amount > 0)
last_strain_increase = world.time
strain = CLAMP(strain + amount, 0, min_broken_damage)
/obj/item/organ/internal/regennetwork/process()
..()
if(!(QDELETED(src)) && src.loc != owner)
visible_message("<span class='notice'>\The [src] splatters!</span>")
var/turf/T = get_turf(src)
var/obj/effect/decal/cleanable/blood/B = new (T)
B.basecolor = src.color
B.update_icon()
qdel(src)
if(src && !is_bruised())
adjust_strain(-0.25 * max(0, (min_broken_damage - damage) / min_broken_damage)) // Decrease the current strain with respect to the current strain level.
/obj/item/organ/internal/regennetwork/burn
name = "thermoregenesis network"
organ_tag = O_REGBURN
/obj/item/organ/internal/regennetwork/oxy
name = "respiroregenesis network"
organ_tag = O_REGOXY
/obj/item/organ/internal/regennetwork/tox
name = "toxoregenesis network"
organ_tag = O_REGTOX