mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-15 17:13:46 +01:00
Merge pull request #671 from ZomgPonies/limb
Much downgraded Limb Overhaul
This commit is contained in:
@@ -157,13 +157,27 @@
|
||||
src.update_damages()
|
||||
|
||||
//If limb took enough damage, try to cut or tear it off
|
||||
/*
|
||||
/*
|
||||
if(body_part != UPPER_TORSO && body_part != LOWER_TORSO) //as hilarious as it is, getting hit on the chest too much shouldn't effectively gib you.
|
||||
if(config.limbs_can_break && brute_dam >= max_damage * config.organ_health_multiplier)
|
||||
if( (edge && prob(5 * brute)) || (brute > 20 && prob(2 * brute)) )
|
||||
droplimb(1)
|
||||
return
|
||||
*/
|
||||
*/
|
||||
|
||||
//If limb took enough damage, try to cut or tear it off
|
||||
if(config.limbs_can_break && (brute_dam + burn_dam) >= (max_damage * config.organ_health_multiplier))
|
||||
if((sharp || edge) && prob(brute))
|
||||
droplimb(1)
|
||||
return
|
||||
if(brute >= 20 && prob(brute)) // Wooden baseball bat in both hands == 23
|
||||
droplimb(1,0,0,2)
|
||||
return
|
||||
if(burn >= 20) // Most laser rifle shots.
|
||||
if(body_part == HEAD) return //No ashing someone's head off since you don't get a brain back.
|
||||
droplimb(1,0,0,1)
|
||||
return
|
||||
|
||||
owner.updatehealth()
|
||||
|
||||
var/result = update_icon()
|
||||
@@ -290,12 +304,6 @@ This function completely restores a damaged organ to perfect condition.
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/organ/external/proc/dismember_limb()
|
||||
if(body_part != UPPER_TORSO && body_part != LOWER_TORSO) //as hilarious as it is, getting hit on the chest too much shouldn't effectively gib you.
|
||||
if(config.limbs_can_break)
|
||||
droplimb(1)
|
||||
return
|
||||
|
||||
/datum/organ/external/process()
|
||||
//Dismemberment
|
||||
if(status & ORGAN_DESTROYED)
|
||||
@@ -566,15 +574,13 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
O.setAmputatedTree()
|
||||
|
||||
//Handles dismemberment
|
||||
/datum/organ/external/proc/droplimb(var/override = 0,var/no_explode = 0,var/amputation=0, var/spawn_limb=0)
|
||||
/datum/organ/external/proc/droplimb(var/override = 0,var/no_explode = 0,var/amputation=0, var/disintegrate)
|
||||
if(destspawn) return
|
||||
if(override)
|
||||
status |= ORGAN_DESTROYED
|
||||
if(status & ORGAN_DESTROYED)
|
||||
if(body_part == UPPER_TORSO)
|
||||
return
|
||||
if(body_part == LOWER_TORSO)
|
||||
return
|
||||
src.status &= ~ORGAN_BROKEN
|
||||
src.status &= ~ORGAN_BLEEDING
|
||||
src.status &= ~ORGAN_SPLINTED
|
||||
@@ -604,22 +610,23 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
|
||||
switch(body_part)
|
||||
if(HEAD)
|
||||
if(owner.species.flags & IS_SYNTHETIC)
|
||||
if(owner.mind)
|
||||
organ= new /obj/item/weapon/organ/head/posi(owner.loc, owner)
|
||||
if(!disintegrate)
|
||||
if(owner.species.flags & IS_SYNTHETIC)
|
||||
if(owner.mind)
|
||||
organ= new /obj/item/weapon/organ/head/posi(owner.loc, owner)
|
||||
owner.death()
|
||||
else if(SKELETON in owner.mutations)
|
||||
organ= new /obj/item/weapon/skeleton/head(owner.loc)
|
||||
else
|
||||
organ= new /obj/item/weapon/organ/head(owner.loc, owner)
|
||||
owner.death()
|
||||
else if(SKELETON in owner.mutations)
|
||||
organ= new /obj/item/weapon/skeleton/head(owner.loc)
|
||||
else
|
||||
organ= new /obj/item/weapon/organ/head(owner.loc, owner)
|
||||
owner.death()
|
||||
owner.unEquip(owner.glasses)
|
||||
owner.unEquip(owner.head)
|
||||
owner.unEquip(owner.l_ear)
|
||||
owner.unEquip(owner.r_ear)
|
||||
owner.unEquip(owner.wear_mask)
|
||||
owner.unEquip(owner.glasses)
|
||||
owner.unEquip(owner.head)
|
||||
owner.unEquip(owner.l_ear)
|
||||
owner.unEquip(owner.r_ear)
|
||||
owner.unEquip(owner.wear_mask)
|
||||
if(ARM_RIGHT)
|
||||
if(!spawn_limb)
|
||||
if(!disintegrate)
|
||||
if(status & ORGAN_ROBOT)
|
||||
organ = new /obj/item/robot_parts/r_arm(owner.loc)
|
||||
else if(SKELETON in owner.mutations)
|
||||
@@ -627,7 +634,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
else
|
||||
organ= new /obj/item/weapon/organ/r_arm(owner.loc, owner)
|
||||
if(ARM_LEFT)
|
||||
if(!spawn_limb)
|
||||
if(!disintegrate)
|
||||
if(status & ORGAN_ROBOT)
|
||||
organ= new /obj/item/robot_parts/l_arm(owner.loc)
|
||||
else if(SKELETON in owner.mutations)
|
||||
@@ -635,7 +642,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
else
|
||||
organ= new /obj/item/weapon/organ/l_arm(owner.loc, owner)
|
||||
if(LEG_RIGHT)
|
||||
if(!spawn_limb)
|
||||
if(!disintegrate)
|
||||
if(status & ORGAN_ROBOT)
|
||||
organ = new /obj/item/robot_parts/r_leg(owner.loc)
|
||||
else if(SKELETON in owner.mutations)
|
||||
@@ -643,7 +650,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
else
|
||||
organ= new /obj/item/weapon/organ/r_leg(owner.loc, owner)
|
||||
if(LEG_LEFT)
|
||||
if(!spawn_limb)
|
||||
if(!disintegrate)
|
||||
if(status & ORGAN_ROBOT)
|
||||
organ = new /obj/item/robot_parts/l_leg(owner.loc)
|
||||
else if(SKELETON in owner.mutations)
|
||||
@@ -651,7 +658,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
else
|
||||
organ= new /obj/item/weapon/organ/l_leg(owner.loc, owner)
|
||||
if(HAND_RIGHT)
|
||||
if(!spawn_limb)
|
||||
if(!disintegrate)
|
||||
if(!(status & ORGAN_ROBOT))
|
||||
if(SKELETON in owner.mutations)
|
||||
organ = new /obj/item/weapon/skeleton/r_hand(owner.loc)
|
||||
@@ -659,7 +666,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
organ= new /obj/item/weapon/organ/r_hand(owner.loc, owner)
|
||||
owner.unEquip(owner.gloves)
|
||||
if(HAND_LEFT)
|
||||
if(!spawn_limb)
|
||||
if(!disintegrate)
|
||||
if(!(status & ORGAN_ROBOT))
|
||||
if(SKELETON in owner.mutations)
|
||||
organ = new /obj/item/weapon/skeleton/l_hand(owner.loc)
|
||||
@@ -667,7 +674,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
organ= new /obj/item/weapon/organ/l_hand(owner.loc, owner)
|
||||
owner.unEquip(owner.gloves)
|
||||
if(FOOT_RIGHT)
|
||||
if(!spawn_limb)
|
||||
if(!disintegrate)
|
||||
if(!(status & ORGAN_ROBOT))
|
||||
if(SKELETON in owner.mutations)
|
||||
organ = new /obj/item/weapon/skeleton/r_foot(owner.loc)
|
||||
@@ -675,7 +682,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
organ= new /obj/item/weapon/organ/r_foot/(owner.loc, owner)
|
||||
owner.unEquip(owner.shoes)
|
||||
if(FOOT_LEFT)
|
||||
if(!spawn_limb)
|
||||
if(!disintegrate)
|
||||
if(!(status & ORGAN_ROBOT))
|
||||
if(SKELETON in owner.mutations)
|
||||
organ = new /obj/item/weapon/skeleton/l_foot(owner.loc)
|
||||
@@ -697,20 +704,58 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
spawn(10)
|
||||
del(spark_system)
|
||||
|
||||
if(organ)
|
||||
owner.visible_message("\red [owner.name]'s [display_name] flies off in an arc.",\
|
||||
"<span class='moderate'><b>Your [display_name] goes flying off!</b></span>",\
|
||||
"You hear a terrible sound of ripping tendons and flesh.")
|
||||
switch(disintegrate)
|
||||
if(1)
|
||||
owner.visible_message(
|
||||
"<span class='danger'>\The [owner]'s [display_name] flashes away into ashes!</span>",\
|
||||
"<span class='moderate'><b>Your [display_name] flashes away into ashes!</b></span>",\
|
||||
"<span class='danger'>You hear the crackling sound of burning flesh.</span>")
|
||||
new /obj/effect/decal/cleanable/ash(get_turf(owner))
|
||||
if(2)
|
||||
owner.visible_message(
|
||||
"<span class='danger'>\The [owner]'s [display_name] explodes in a shower of gore!</span>",\
|
||||
"<span class='moderate'><b>Your [display_name] explodes in a shower of gore!</b></span>",\
|
||||
"<span class='danger'>You hear the sickening splatter of gore.</span>")
|
||||
var/obj/effect/decal/cleanable/blood/gibs/gore = new(get_turf(owner))
|
||||
if(owner.species.flesh_color)
|
||||
gore.fleshcolor = owner.species.flesh_color
|
||||
if(owner.species.blood_color)
|
||||
gore.basecolor = owner.species.blood_color
|
||||
gore.update_icon()
|
||||
gore.throw_at(get_edge_target_turf(owner,pick(alldirs)),rand(1,3),30)
|
||||
|
||||
if(body_part == HEAD && owner.brain_op_stage != 4.0)
|
||||
var/mob/living/simple_animal/borer/borer = owner.has_brain_worms()
|
||||
if(borer)
|
||||
borer.detatch() //Should remove borer if the brain is removed - RR
|
||||
if(owner.species && owner.species.flags & IS_SYNTHETIC)
|
||||
var/obj/item/device/mmi/posibrain/P = new(owner.loc)
|
||||
P.transfer_identity(owner)
|
||||
if(istype(P.loc,/turf))
|
||||
P.throw_at(get_edge_target_turf(owner,pick(alldirs)),rand(1,3),30)
|
||||
else
|
||||
var/obj/item/brain/B = new(owner.loc)
|
||||
B.transfer_identity(owner)
|
||||
if(istype(B.loc,/turf))
|
||||
B.throw_at(get_edge_target_turf(owner,pick(alldirs)),rand(1,3),30)
|
||||
|
||||
|
||||
|
||||
if(organ)
|
||||
if(!amputation)
|
||||
owner.visible_message(
|
||||
"<span class='danger'>\The [owner]'s [display_name] flies off in an arc!</span>",\
|
||||
"<span class='moderate'><b>Your [display_name] goes flying off!</b></span>",\
|
||||
"<span class='danger'>You hear a terrible sound of ripping tendons and flesh.</span>")
|
||||
//Throw organs around
|
||||
var/lol = pick(cardinal)
|
||||
step(organ,lol)
|
||||
// OK so maybe your limb just flew off, but if it was attached to a pair of cuffs then hooray! Freedom!
|
||||
release_restraints()
|
||||
owner.regenerate_icons()
|
||||
|
||||
if(vital)
|
||||
owner.death()
|
||||
if(vital)
|
||||
owner.death()
|
||||
owner.regenerate_icons()
|
||||
return organ
|
||||
|
||||
/****************************************************
|
||||
@@ -875,7 +920,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
icon_name = "torso"
|
||||
display_name = "chest"
|
||||
max_damage = 75
|
||||
min_broken_damage = 40
|
||||
min_broken_damage = 50
|
||||
body_part = UPPER_TORSO
|
||||
vital = 1
|
||||
|
||||
@@ -884,16 +929,15 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
icon_name = "groin"
|
||||
display_name = "groin"
|
||||
max_damage = 50
|
||||
min_broken_damage = 30
|
||||
min_broken_damage = 60
|
||||
body_part = LOWER_TORSO
|
||||
vital = 1
|
||||
|
||||
/datum/organ/external/l_arm
|
||||
name = "l_arm"
|
||||
display_name = "left arm"
|
||||
icon_name = "l_arm"
|
||||
max_damage = 50
|
||||
min_broken_damage = 20
|
||||
min_broken_damage = 25
|
||||
body_part = ARM_LEFT
|
||||
|
||||
process()
|
||||
@@ -905,7 +949,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
display_name = "left leg"
|
||||
icon_name = "l_leg"
|
||||
max_damage = 50
|
||||
min_broken_damage = 20
|
||||
min_broken_damage = 25
|
||||
body_part = LEG_LEFT
|
||||
icon_position = LEFT
|
||||
|
||||
@@ -914,7 +958,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
display_name = "right arm"
|
||||
icon_name = "r_arm"
|
||||
max_damage = 50
|
||||
min_broken_damage = 20
|
||||
min_broken_damage = 25
|
||||
body_part = ARM_RIGHT
|
||||
|
||||
process()
|
||||
@@ -926,7 +970,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
display_name = "right leg"
|
||||
icon_name = "r_leg"
|
||||
max_damage = 50
|
||||
min_broken_damage = 20
|
||||
min_broken_damage = 25
|
||||
body_part = LEG_RIGHT
|
||||
icon_position = RIGHT
|
||||
|
||||
@@ -977,7 +1021,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
icon_name = "head"
|
||||
display_name = "head"
|
||||
max_damage = 75
|
||||
min_broken_damage = 40
|
||||
min_broken_damage = 50
|
||||
body_part = HEAD
|
||||
var/disfigured = 0
|
||||
var/brained = 0
|
||||
|
||||
@@ -98,8 +98,9 @@ mob/living/carbon/human/proc/handle_pain()
|
||||
if(dam > maxdam && (maxdam == 0 || prob(70)) )
|
||||
damaged_organ = E
|
||||
maxdam = dam
|
||||
if(damaged_organ)
|
||||
pain(damaged_organ.display_name, maxdam, 0)
|
||||
if(damaged_organ)
|
||||
pain(damaged_organ.display_name, maxdam, 0)
|
||||
|
||||
|
||||
// Damage to internal organs hurts a lot.
|
||||
for(var/n in internal_organs_by_name)
|
||||
|
||||
Reference in New Issue
Block a user