Merge branch 'master' into name-muh-glands

This commit is contained in:
Jack Edge
2018-12-12 00:23:50 +00:00
183 changed files with 14382 additions and 2517 deletions
@@ -0,0 +1,41 @@
/datum/surgery/advanced/bioware/ligament_hook
name = "Ligament Hook"
desc = "A surgical procedure which reshapes the connections between torso and limbs, making it so limbs can be attached manually if severed. \
However this weakens the connection, making them easier to detach as well."
steps = list(/datum/surgery_step/incise,
/datum/surgery_step/retract_skin,
/datum/surgery_step/clamp_bleeders,
/datum/surgery_step/incise,
/datum/surgery_step/incise,
/datum/surgery_step/reshape_ligaments,
/datum/surgery_step/close)
possible_locs = list(BODY_ZONE_CHEST)
bioware_target = BIOWARE_LIGAMENTS
/datum/surgery_step/reshape_ligaments
name = "reshape ligaments"
accept_hand = TRUE
time = 125
/datum/surgery_step/reshape_ligaments/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] starts reshaping [target]'s ligaments into a hook-like shape.", "<span class='notice'>You start reshaping [target]'s ligaments into a hook-like shape.</span>")
/datum/surgery_step/reshape_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] reshapes [target]'s ligaments into a connective hook!", "<span class='notice'>You reshape [target]'s ligaments into a connective hook!</span>")
new /datum/bioware/hooked_ligaments(target)
return TRUE
/datum/bioware/hooked_ligaments
name = "Hooked Ligaments"
desc = "The ligaments and nerve endings that connect the torso to the limbs are formed into a hook-like shape, so limbs can be attached without requiring surgery, but are easier to sever."
mod_type = BIOWARE_LIGAMENTS
/datum/bioware/hooked_ligaments/on_gain()
..()
owner.add_trait(TRAIT_LIMBATTACHMENT, "ligament_hook")
owner.add_trait(TRAIT_EASYDISMEMBER, "ligament_hook")
/datum/bioware/hooked_ligaments/on_lose()
..()
owner.remove_trait(TRAIT_LIMBATTACHMENT, "ligament_hook")
owner.remove_trait(TRAIT_EASYDISMEMBER, "ligament_hook")
@@ -0,0 +1,41 @@
/datum/surgery/advanced/bioware/ligament_reinforcement
name = "Ligament Reinforcement"
desc = "A surgical procedure which adds a protective tissue and bone cage around the connections between the torso and limbs, preventing dismemberment. \
However, the nerve connections as a result are more easily interrupted, making it easier to disable limbs with damage."
steps = list(/datum/surgery_step/incise,
/datum/surgery_step/retract_skin,
/datum/surgery_step/clamp_bleeders,
/datum/surgery_step/incise,
/datum/surgery_step/incise,
/datum/surgery_step/reinforce_ligaments,
/datum/surgery_step/close)
possible_locs = list(BODY_ZONE_CHEST)
bioware_target = BIOWARE_LIGAMENTS
/datum/surgery_step/reinforce_ligaments
name = "reinforce ligaments"
accept_hand = TRUE
time = 125
/datum/surgery_step/reinforce_ligaments/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] starts reinforce [target]'s ligaments.", "<span class='notice'>You start reinforcing [target]'s ligaments.</span>")
/datum/surgery_step/reinforce_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] reinforces [target]'s ligaments!", "<span class='notice'>You reinforce [target]'s ligaments!</span>")
new /datum/bioware/reinforced_ligaments(target)
return TRUE
/datum/bioware/reinforced_ligaments
name = "Reinforced Ligaments"
desc = "The ligaments and nerve endings that connect the torso to the limbs are protected by a mix of bone and tissues, and are much harder to separate from the body, but are also easier to disable."
mod_type = BIOWARE_LIGAMENTS
/datum/bioware/reinforced_ligaments/on_gain()
..()
owner.add_trait(TRAIT_NODISMEMBER, "reinforced_ligaments")
owner.add_trait(TRAIT_EASYLIMBDISABLE, "reinforced_ligaments")
/datum/bioware/reinforced_ligaments/on_lose()
..()
owner.remove_trait(TRAIT_NODISMEMBER, "reinforced_ligaments")
owner.remove_trait(TRAIT_EASYLIMBDISABLE, "reinforced_ligaments")
+3 -3
View File
@@ -136,7 +136,7 @@
//Return TRUE to get whatever mob this is in to update health.
/obj/item/bodypart/proc/on_life()
if(stamina_dam > DAMAGE_PRECISION) //DO NOT update health here, it'll be done in the carbon's life.
if(heal_damage(brute = 0, burn = 0, stamina = stam_heal_tick, null, updating_health = FALSE))
if(heal_damage(0, 0, stam_heal_tick, null, FALSE))
. |= BODYPART_LIFE_UPDATE_HEALTH
//Applies brute and burn damage to the organ. Returns 1 if the damage-icon states changed at all.
@@ -222,9 +222,9 @@
/obj/item/bodypart/proc/is_disabled()
if(has_trait(TRAIT_PARALYSIS))
return BODYPART_DISABLED_PARALYSIS
if(can_dismember() && !owner.has_trait(TRAIT_NODISMEMBER))
if(can_dismember() && !owner.has_trait(TRAIT_NOLIMBDISABLE))
. = disabled //inertia, to avoid limbs healing 0.1 damage and being re-enabled
if((get_damage(TRUE) >= max_damage))
if((get_damage(TRUE) >= max_damage) || (owner.has_trait(TRAIT_EASYLIMBDISABLE) && (get_damage(TRUE) >= (max_damage * 0.6)))) //Easy limb disable disables the limb at 40% health instead of 0%
return BODYPART_DISABLED_DAMAGE
if(disabled && (get_damage(TRUE) <= (max_damage * 0.5)))
return BODYPART_NOT_DISABLED
@@ -110,7 +110,7 @@
for(var/X in C.dna.mutations) //some mutations require having specific limbs to be kept.
var/datum/mutation/human/MT = X
if(MT.limb_req && MT.limb_req == body_zone)
MT.force_lose(C)
C.dna.force_lose(MT)
for(var/X in C.internal_organs) //internal organs inside the dismembered limb are dropped.
var/obj/item/organ/O = X
+8 -5
View File
@@ -129,11 +129,14 @@
holder = null
if(contents.len == 1)
Extend(contents[1])
else // TODO: make it similar to borg's storage-like module selection
var/obj/item/choise = input("Activate which item?", "Arm Implant", null, null) as null|anything in items_list
if(owner && owner == usr && owner.stat != DEAD && (src in owner.internal_organs) && !holder && istype(choise) && (choise in contents))
// This monster sanity check is a nice example of how bad input() is.
Extend(choise)
else
var/list/choice_list = list()
for(var/obj/item/I in items_list)
choice_list[I] = getFlatIcon(I)
var/obj/item/choice = show_radial_menu(owner, owner, choice_list)
if(owner && owner == usr && owner.stat != DEAD && (src in owner.internal_organs) && !holder && (choice in contents))
// This monster sanity check is a nice example of how bad input is.
Extend(choice)
else
Retract()