This commit is contained in:
Fermi
2019-06-01 16:52:58 +01:00
parent 6e6a1f4615
commit 44d13818f0
6 changed files with 194 additions and 38 deletions
+5
View File
@@ -895,6 +895,11 @@
var/obj/item/organ/I = X
I.Insert(src)
/mob/living/carbon/proc/update_disabled_bodyparts()
for(var/B in bodyparts)
var/obj/item/bodypart/BP = B
BP.update_disabled()
/mob/living/carbon/vv_get_dropdown()
. = ..()
. += "---"
+93 -31
View File
@@ -21,7 +21,7 @@
var/held_index = 0 //are we a hand? if so, which one!
var/is_pseudopart = FALSE //For limbs that don't really exist, eg chainsaws
var/disabled = FALSE //If TRUE, limb is as good as missing
var/disabled = BODYPART_NOT_DISABLED //If disabled, limb is as good as missing
var/body_damage_coeff = 1 //Multiplier of the limb's damage that gets applied to the mob
var/stam_damage_coeff = 0.5
var/brutestate = 0
@@ -189,7 +189,7 @@
if(stamina > DAMAGE_PRECISION)
owner.update_stamina()
consider_processing()
check_disabled()
update_disabled()
return update_bodypart_damage_state()
//Heals brute and burn damage for the organ. Returns 1 if the damage-icon states changed at all.
@@ -209,7 +209,7 @@
if(owner && updating_health)
owner.updatehealth()
consider_processing()
check_disabled()
update_disabled()
return update_bodypart_damage_state()
//Returns total damage.
@@ -220,15 +220,23 @@
return total
//Checks disabled status thresholds
/obj/item/bodypart/proc/check_disabled()
if(!can_dismember() || owner.has_trait(TRAIT_NODISMEMBER))
return
if(!disabled && (get_damage(TRUE) >= max_damage))
set_disabled(TRUE)
else if(disabled && (get_damage(TRUE) <= (max_damage * 0.5)))
set_disabled(FALSE)
//Checks disabled status thresholds
/obj/item/bodypart/proc/update_disabled()
set_disabled(is_disabled())
/obj/item/bodypart/proc/set_disabled(new_disabled = TRUE)
/obj/item/bodypart/proc/is_disabled()
if(has_trait(TRAIT_PARALYSIS))
return BODYPART_DISABLED_PARALYSIS
if(can_dismember() && !owner.has_trait(TRAIT_NODISMEMBER))
. = disabled //inertia, to avoid limbs healing 0.1 damage and being re-enabled
if((get_damage(TRUE) >= max_damage))
return BODYPART_DISABLED_DAMAGE
if(disabled && (get_damage(TRUE) <= (max_damage * 0.5)))
return BODYPART_NOT_DISABLED
else
return BODYPART_NOT_DISABLED
/obj/item/bodypart/proc/set_disabled(new_disabled)
if(disabled == new_disabled)
return
disabled = new_disabled
@@ -598,13 +606,27 @@
px_y = 0
stam_heal_tick = 2
/obj/item/bodypart/l_arm/set_disabled(new_disabled = TRUE)
..()
if(disabled)
to_chat(owner, "<span class='userdanger'>Your [name] is too damaged to function!</span>")
owner.emote("scream")
/obj/item/bodypart/l_arm/is_disabled()
if(owner.has_trait(TRAIT_PARALYSIS_L_ARM))
return BODYPART_DISABLED_PARALYSIS
return ..()
/obj/item/bodypart/l_arm/set_disabled(new_disabled)
. = ..()
if(disabled == new_disabled)
return
if(disabled == BODYPART_DISABLED_DAMAGE)
if(owner.stat > UNCONSCIOUS)
owner.emote("scream")
if(. && (owner.stat > DEAD))
to_chat(owner, "<span class='userdanger'>Your [name] is too damaged to function!</span>")
if(held_index)
owner.dropItemToGround(owner.get_item_for_held_index(held_index))
else if(disabled == BODYPART_DISABLED_PARALYSIS)
if(. && (owner.stat > DEAD))
to_chat(owner, "<span class='userdanger'>You can't feel your [name]!</span>")
if(held_index)
owner.dropItemToGround(owner.get_item_for_held_index(held_index))
if(owner.hud_used)
var/obj/screen/inventory/hand/L = owner.hud_used.hand_slots["[held_index]"]
if(L)
@@ -649,18 +671,33 @@
stam_heal_tick = 2
max_stamina_damage = 50
/obj/item/bodypart/r_arm/set_disabled(new_disabled = TRUE)
..()
if(disabled)
to_chat(owner, "<span class='userdanger'>Your [name] is too damaged to function!</span>")
owner.emote("scream")
/obj/item/bodypart/r_arm/is_disabled()
if(owner.has_trait(TRAIT_PARALYSIS_R_ARM))
return BODYPART_DISABLED_PARALYSIS
return ..()
/obj/item/bodypart/r_arm/set_disabled(new_disabled)
. = ..()
if(disabled == new_disabled)
return
if(disabled == BODYPART_DISABLED_DAMAGE)
if(owner.stat > UNCONSCIOUS)
owner.emote("scream")
if(. && (owner.stat > DEAD))
to_chat(owner, "<span class='userdanger'>Your [name] is too damaged to function!</span>")
if(held_index)
owner.dropItemToGround(owner.get_item_for_held_index(held_index))
else if(disabled == BODYPART_DISABLED_PARALYSIS)
if(. && (owner.stat > DEAD))
to_chat(owner, "<span class='userdanger'>You can't feel your [name]!</span>")
if(held_index)
owner.dropItemToGround(owner.get_item_for_held_index(held_index))
if(owner.hud_used)
var/obj/screen/inventory/hand/R = owner.hud_used.hand_slots["[held_index]"]
if(R)
R.update_icon()
/obj/item/bodypart/r_arm/monkey
icon = 'icons/mob/animal_parts.dmi'
icon_state = "default_monkey_r_arm"
@@ -697,11 +734,24 @@
stam_heal_tick = 2
max_stamina_damage = 50
/obj/item/bodypart/l_leg/set_disabled(new_disabled = TRUE)
..()
if(disabled)
to_chat(owner, "<span class='userdanger'>Your [name] is too damaged to function!</span>")
owner.emote("scream")
/obj/item/bodypart/l_leg/is_disabled()
if(owner.has_trait(TRAIT_PARALYSIS_L_LEG))
return BODYPART_DISABLED_PARALYSIS
return ..()
/obj/item/bodypart/l_leg/set_disabled(new_disabled)
. = ..()
if(disabled == new_disabled)
return
if(disabled == BODYPART_DISABLED_DAMAGE)
if(owner.stat > UNCONSCIOUS)
owner.emote("scream")
if(. && (owner.stat > DEAD))
to_chat(owner, "<span class='userdanger'>Your [name] is too damaged to function!</span>")
else if(disabled == BODYPART_DISABLED_PARALYSIS)
if(. && (owner.stat > DEAD))
to_chat(owner, "<span class='userdanger'>You can't feel your [name]!</span>")
/obj/item/bodypart/l_leg/digitigrade
name = "left digitigrade leg"
@@ -744,11 +794,23 @@
max_stamina_damage = 50
stam_heal_tick = 2
/obj/item/bodypart/r_leg/set_disabled(new_disabled = TRUE)
..()
if(disabled)
to_chat(owner, "<span class='userdanger'>Your [name] is too damaged to function!</span>")
owner.emote("scream")
/obj/item/bodypart/r_leg/is_disabled()
if(owner.has_trait(TRAIT_PARALYSIS_R_LEG))
return BODYPART_DISABLED_PARALYSIS
return ..()
/obj/item/bodypart/r_leg/set_disabled(new_disabled)
. = ..()
if(disabled == new_disabled)
return
if(disabled == BODYPART_DISABLED_DAMAGE)
if(owner.stat > UNCONSCIOUS)
owner.emote("scream")
if(. && (owner.stat > DEAD))
to_chat(owner, "<span class='userdanger'>Your [name] is too damaged to function!</span>")
else if(disabled == BODYPART_DISABLED_PARALYSIS)
if(. && (owner.stat > DEAD))
to_chat(owner, "<span class='userdanger'>You can't feel your [name]!</span>")
/obj/item/bodypart/r_leg/digitigrade
name = "right digitigrade leg"