Merge remote-tracking branch 'refs/remotes/origin/master' into beepboop

This commit is contained in:
Poojawa
2018-03-20 23:00:12 -05:00
1355 changed files with 3112 additions and 2226 deletions
@@ -12,7 +12,7 @@
/datum/surgery_step/incise,
/datum/surgery_step/ground_nerves,
/datum/surgery_step/close)
possible_locs = list("chest")
possible_locs = list(BODY_ZONE_CHEST)
bioware_target = BIOWARE_NERVES
/datum/surgery_step/ground_nerves
@@ -12,7 +12,7 @@
/datum/surgery_step/incise,
/datum/surgery_step/splice_nerves,
/datum/surgery_step/close)
possible_locs = list("chest")
possible_locs = list(BODY_ZONE_CHEST)
bioware_target = BIOWARE_NERVES
/datum/surgery_step/splice_nerves
@@ -12,7 +12,7 @@
/datum/surgery_step/incise,
/datum/surgery_step/thread_veins,
/datum/surgery_step/close)
possible_locs = list("chest")
possible_locs = list(BODY_ZONE_CHEST)
bioware_target = BIOWARE_CIRCULATION
/datum/surgery_step/thread_veins
@@ -14,7 +14,7 @@
/datum/surgery_step/close)
species = list(/mob/living/carbon/human)
possible_locs = list("head")
possible_locs = list(BODY_ZONE_HEAD)
/datum/surgery/advanced/brainwashing/can_start(mob/user, mob/living/carbon/target)
if(!..())
+1 -1
View File
@@ -14,7 +14,7 @@
/datum/surgery_step/close)
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list("head")
possible_locs = list(BODY_ZONE_HEAD)
requires_bodypart_type = 0
/datum/surgery/advanced/lobotomy/can_start(mob/user, mob/living/carbon/target)
@@ -12,7 +12,7 @@
/datum/surgery_step/bionecrosis,
/datum/surgery_step/close)
possible_locs = list("head")
possible_locs = list(BODY_ZONE_HEAD)
/datum/surgery/advanced/necrotic_revival/can_start(mob/user, mob/living/carbon/target)
. = ..()
@@ -13,7 +13,7 @@
/datum/surgery_step/close)
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list("head")
possible_locs = list(BODY_ZONE_HEAD)
requires_bodypart_type = 0
/datum/surgery/advanced/pacify/can_start(mob/user, mob/living/carbon/target)
@@ -16,7 +16,7 @@
/datum/surgery_step/close)
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list("chest")
possible_locs = list(BODY_ZONE_CHEST)
requires_bodypart_type = 0
/datum/surgery_step/reconstruct
+1 -1
View File
@@ -14,7 +14,7 @@
/datum/surgery_step/close)
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list("head")
possible_locs = list(BODY_ZONE_HEAD)
requires_bodypart_type = 0
/datum/surgery/advanced/revival/can_start(mob/user, mob/living/carbon/target)
@@ -13,7 +13,7 @@
/datum/surgery_step/close)
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list("chest")
possible_locs = list(BODY_ZONE_CHEST)
/datum/surgery/advanced/viral_bonding/can_start(mob/user, mob/living/carbon/target)
if(!..())
+1 -1
View File
@@ -3,7 +3,7 @@
name = "amputation"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/sever_limb)
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list("r_arm", "l_arm", "l_leg", "r_leg", "head")
possible_locs = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_HEAD)
requires_bodypart_type = 0
+10 -10
View File
@@ -10,7 +10,7 @@
var/mob/living/carbon/owner = null
var/mob/living/carbon/original_owner = null
var/status = BODYPART_ORGANIC
var/body_zone //"chest", "l_arm", etc , used for def_zone
var/body_zone //BODY_ZONE_CHEST, BODY_ZONE_L_ARM, etc , used for def_zone
var/aux_zone // used for hands
var/aux_layer
var/body_part = null //bitflag used to check which clothes cover this bodypart
@@ -316,7 +316,7 @@
var/icon_gender = (body_gender == FEMALE) ? "f" : "m" //gender of the icon, if applicable
if((body_zone != "head" && body_zone != "chest"))
if((body_zone != BODY_ZONE_HEAD && body_zone != BODY_ZONE_CHEST))
should_draw_gender = FALSE
if(status == BODYPART_ORGANIC)
@@ -367,11 +367,11 @@
qdel(src)
/obj/item/bodypart/chest
name = "chest"
name = BODY_ZONE_CHEST
desc = "It's impolite to stare at a person's chest."
icon_state = "default_human_chest"
max_damage = 200
body_zone = "chest"
body_zone = BODY_ZONE_CHEST
body_part = CHEST
px_x = 0
px_y = 0
@@ -421,9 +421,9 @@
icon_state = "default_human_l_arm"
attack_verb = list("slapped", "punched")
max_damage = 50
body_zone ="l_arm"
body_zone =BODY_ZONE_L_ARM
body_part = ARM_LEFT
aux_zone = "l_hand"
aux_zone = BODY_ZONE_PRECISE_L_HAND
aux_layer = HANDS_PART_LAYER
held_index = 1
px_x = -6
@@ -457,9 +457,9 @@
icon_state = "default_human_r_arm"
attack_verb = list("slapped", "punched")
max_damage = 50
body_zone = "r_arm"
body_zone = BODY_ZONE_R_ARM
body_part = ARM_RIGHT
aux_zone = "r_hand"
aux_zone = BODY_ZONE_PRECISE_R_HAND
aux_layer = HANDS_PART_LAYER
held_index = 2
px_x = 6
@@ -493,7 +493,7 @@
icon_state = "default_human_l_leg"
attack_verb = list("kicked", "stomped")
max_damage = 50
body_zone = "l_leg"
body_zone = BODY_ZONE_L_LEG
body_part = LEG_LEFT
px_x = -2
px_y = 12
@@ -531,7 +531,7 @@
icon_state = "default_human_r_leg"
attack_verb = list("kicked", "stomped")
max_damage = 50
body_zone = "r_leg"
body_zone = BODY_ZONE_R_LEG
body_part = LEG_RIGHT
px_x = 2
px_y = 12
@@ -15,13 +15,11 @@
if(C.has_trait(TRAIT_NODISMEMBER))
return FALSE
var/obj/item/bodypart/affecting = C.get_bodypart("chest")
var/obj/item/bodypart/affecting = C.get_bodypart(BODY_ZONE_CHEST)
affecting.receive_damage(CLAMP(brute_dam/2, 15, 50), CLAMP(burn_dam/2, 0, 50)) //Damage the chest based on limb's existing damage
C.visible_message("<span class='danger'><B>[C]'s [src.name] has been violently dismembered!</B></span>")
C.emote("scream")
GET_COMPONENT_FROM(mood, /datum/component/mood, C)
if(mood)
mood.add_event("dismembered", /datum/mood_event/dismembered)
C.SendSignal(COMSIG_ADD_MOOD_EVENT, "dismembered", /datum/mood_event/dismembered)
drop_limb()
if(dam_type == BURN)
@@ -61,7 +59,7 @@
for(var/X in C.internal_organs)
var/obj/item/organ/O = X
var/org_zone = check_zone(O.zone)
if(org_zone != "chest")
if(org_zone != BODY_ZONE_CHEST)
continue
O.Remove(C)
O.forceMove(T)
@@ -104,9 +102,7 @@
I.forceMove(src)
if(!C.has_embedded_objects())
C.clear_alert("embeddedobject")
GET_COMPONENT_FROM(mood, /datum/component/mood, C)
if(mood)
mood.add_event("embedded")
C.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded")
if(!special)
if(C.dna)
@@ -347,7 +343,7 @@
return 0
/mob/living/carbon/regenerate_limbs(noheal, list/excluded_limbs)
var/list/limb_list = list("head", "chest", "r_arm", "l_arm", "r_leg", "l_leg")
var/list/limb_list = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)
if(excluded_limbs)
limb_list -= excluded_limbs
for(var/Z in limb_list)
+2 -2
View File
@@ -1,10 +1,10 @@
/obj/item/bodypart/head
name = "head"
name = BODY_ZONE_HEAD
desc = "Didn't make sense not to live for fun, your brain gets smart but your head gets dumb."
icon = 'icons/mob/human_parts.dmi'
icon_state = "default_human_head"
max_damage = 200
body_zone = "head"
body_zone = BODY_ZONE_HEAD
body_part = HEAD
w_class = WEIGHT_CLASS_BULKY //Quite a hefty load
slowdown = 1 //Balancing measure
+24 -26
View File
@@ -4,7 +4,7 @@
/mob/living/carbon/get_bodypart(zone)
if(!zone)
zone = "chest"
zone = BODY_ZONE_CHEST
for(var/X in bodyparts)
var/obj/item/bodypart/L = X
if(L.body_zone == zone)
@@ -97,14 +97,14 @@
return list()
/mob/living/carbon/get_missing_limbs()
var/list/full = list("head", "chest", "r_arm", "l_arm", "r_leg", "l_leg")
var/list/full = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)
for(var/zone in full)
if(get_bodypart(zone))
full -= zone
return full
/mob/living/carbon/alien/larva/get_missing_limbs()
var/list/full = list("head", "chest")
var/list/full = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST)
for(var/zone in full)
if(get_bodypart(zone))
full -= zone
@@ -121,9 +121,7 @@
I.forceMove(T)
clear_alert("embeddedobject")
GET_COMPONENT_FROM(mood, /datum/component/mood, src)
if(mood)
mood.clear_event("embedded")
SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded")
/mob/living/carbon/proc/has_embedded_objects()
. = 0
@@ -137,17 +135,17 @@
/mob/living/carbon/proc/newBodyPart(zone, robotic, fixed_icon)
var/obj/item/bodypart/L
switch(zone)
if("l_arm")
if(BODY_ZONE_L_ARM)
L = new /obj/item/bodypart/l_arm()
if("r_arm")
if(BODY_ZONE_R_ARM)
L = new /obj/item/bodypart/r_arm()
if("head")
if(BODY_ZONE_HEAD)
L = new /obj/item/bodypart/head()
if("l_leg")
if(BODY_ZONE_L_LEG)
L = new /obj/item/bodypart/l_leg()
if("r_leg")
if(BODY_ZONE_R_LEG)
L = new /obj/item/bodypart/r_leg()
if("chest")
if(BODY_ZONE_CHEST)
L = new /obj/item/bodypart/chest()
if(L)
L.update_limb(fixed_icon, src)
@@ -158,17 +156,17 @@
/mob/living/carbon/monkey/newBodyPart(zone, robotic, fixed_icon)
var/obj/item/bodypart/L
switch(zone)
if("l_arm")
if(BODY_ZONE_L_ARM)
L = new /obj/item/bodypart/l_arm/monkey()
if("r_arm")
if(BODY_ZONE_R_ARM)
L = new /obj/item/bodypart/r_arm/monkey()
if("head")
if(BODY_ZONE_HEAD)
L = new /obj/item/bodypart/head/monkey()
if("l_leg")
if(BODY_ZONE_L_LEG)
L = new /obj/item/bodypart/l_leg/monkey()
if("r_leg")
if(BODY_ZONE_R_LEG)
L = new /obj/item/bodypart/r_leg/monkey()
if("chest")
if(BODY_ZONE_CHEST)
L = new /obj/item/bodypart/chest/monkey()
if(L)
L.update_limb(fixed_icon, src)
@@ -179,9 +177,9 @@
/mob/living/carbon/alien/larva/newBodyPart(zone, robotic, fixed_icon)
var/obj/item/bodypart/L
switch(zone)
if("head")
if(BODY_ZONE_HEAD)
L = new /obj/item/bodypart/head/larva()
if("chest")
if(BODY_ZONE_CHEST)
L = new /obj/item/bodypart/chest/larva()
if(L)
L.update_limb(fixed_icon, src)
@@ -192,17 +190,17 @@
/mob/living/carbon/alien/humanoid/newBodyPart(zone, robotic, fixed_icon)
var/obj/item/bodypart/L
switch(zone)
if("l_arm")
if(BODY_ZONE_L_ARM)
L = new /obj/item/bodypart/l_arm/alien()
if("r_arm")
if(BODY_ZONE_R_ARM)
L = new /obj/item/bodypart/r_arm/alien()
if("head")
if(BODY_ZONE_HEAD)
L = new /obj/item/bodypart/head/alien()
if("l_leg")
if(BODY_ZONE_L_LEG)
L = new /obj/item/bodypart/l_leg/alien()
if("r_leg")
if(BODY_ZONE_R_LEG)
L = new /obj/item/bodypart/r_leg/alien()
if("chest")
if(BODY_ZONE_CHEST)
L = new /obj/item/bodypart/chest/alien()
if(L)
L.update_limb(fixed_icon, src)
+1 -1
View File
@@ -9,7 +9,7 @@
/datum/surgery_step/close)
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list("head")
possible_locs = list(BODY_ZONE_HEAD)
requires_bodypart_type = 0
/datum/surgery_step/fix_brain
+3 -3
View File
@@ -2,7 +2,7 @@
name = "cavity implant"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/incise, /datum/surgery_step/handle_cavity, /datum/surgery_step/close)
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list("chest")
possible_locs = list(BODY_ZONE_CHEST)
//handle cavity
@@ -14,7 +14,7 @@
var/obj/item/IC = null
/datum/surgery_step/handle_cavity/preop(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/bodypart/chest/CH = target.get_bodypart("chest")
var/obj/item/bodypart/chest/CH = target.get_bodypart(BODY_ZONE_CHEST)
IC = CH.cavity_item
if(tool)
if(istype(tool, /obj/item/surgical_drapes) || istype(tool, /obj/item/bedsheet))
@@ -27,7 +27,7 @@
user.visible_message("[user] checks for items in [target]'s [target_zone].", "<span class='notice'>You check for items in [target]'s [target_zone]...</span>")
/datum/surgery_step/handle_cavity/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/bodypart/chest/CH = target.get_bodypart("chest")
var/obj/item/bodypart/chest/CH = target.get_bodypart(BODY_ZONE_CHEST)
if(tool)
if(IC || tool.w_class > WEIGHT_CLASS_NORMAL || (tool.flags_1 & NODROP_1) || istype(tool, /obj/item/organ))
to_chat(user, "<span class='warning'>You can't seem to fit [tool] in [target]'s [target_zone]!</span>")
+35 -35
View File
@@ -1,36 +1,36 @@
/datum/surgery/core_removal
name = "core removal"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/extract_core)
species = list(/mob/living/simple_animal/slime)
possible_locs = list("r_arm","l_arm","r_leg","l_leg","chest","head")
/datum/surgery/core_removal/can_start(mob/user, mob/living/target)
if(target.stat == DEAD)
return 1
return 0
//extract brain
/datum/surgery_step/extract_core
name = "extract core"
implements = list(/obj/item/hemostat = 100, TOOL_CROWBAR = 100)
time = 16
/datum/surgery_step/extract_core/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] begins to extract a core from [target].", "<span class='notice'>You begin to extract a core from [target]...</span>")
/datum/surgery_step/extract_core/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/mob/living/simple_animal/slime/slime = target
if(slime.cores > 0)
slime.cores--
user.visible_message("[user] successfully extracts a core from [target]!", "<span class='notice'>You successfully extract a core from [target]. [slime.cores] core\s remaining.</span>")
new slime.coretype(slime.loc)
if(slime.cores <= 0)
slime.icon_state = "[slime.colour] baby slime dead-nocore"
return 1
else
return 0
else
/datum/surgery/core_removal
name = "core removal"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/extract_core)
species = list(/mob/living/simple_animal/slime)
possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD)
/datum/surgery/core_removal/can_start(mob/user, mob/living/target)
if(target.stat == DEAD)
return 1
return 0
//extract brain
/datum/surgery_step/extract_core
name = "extract core"
implements = list(/obj/item/hemostat = 100, TOOL_CROWBAR = 100)
time = 16
/datum/surgery_step/extract_core/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] begins to extract a core from [target].", "<span class='notice'>You begin to extract a core from [target]...</span>")
/datum/surgery_step/extract_core/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/mob/living/simple_animal/slime/slime = target
if(slime.cores > 0)
slime.cores--
user.visible_message("[user] successfully extracts a core from [target]!", "<span class='notice'>You successfully extract a core from [target]. [slime.cores] core\s remaining.</span>")
new slime.coretype(slime.loc)
if(slime.cores <= 0)
slime.icon_state = "[slime.colour] baby slime dead-nocore"
return 1
else
return 0
else
to_chat(user, "<span class='warning'>There aren't any cores left in [target]!</span>")
return 1
return 1
+1 -1
View File
@@ -1,7 +1,7 @@
/datum/surgery/dental_implant
name = "dental implant"
steps = list(/datum/surgery_step/drill, /datum/surgery_step/insert_pill)
possible_locs = list("mouth")
possible_locs = list(BODY_ZONE_PRECISE_MOUTH)
/datum/surgery_step/insert_pill
name = "insert pill"
+1 -1
View File
@@ -2,7 +2,7 @@
name = "eye surgery"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/fix_eyes, /datum/surgery_step/close)
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list("eyes")
possible_locs = list(BODY_ZONE_PRECISE_EYES)
requires_bodypart_type = 0
//fix eyes
+13 -13
View File
@@ -128,43 +128,43 @@
eyesmouth_covered |= I.flags_cover
switch(location)
if("head")
if(BODY_ZONE_HEAD)
if(covered_locations & HEAD)
return 0
if("eyes")
if(BODY_ZONE_PRECISE_EYES)
if(covered_locations & HEAD || face_covered & HIDEEYES || eyesmouth_covered & GLASSESCOVERSEYES)
return 0
if("mouth")
if(BODY_ZONE_PRECISE_MOUTH)
if(covered_locations & HEAD || face_covered & HIDEFACE || eyesmouth_covered & MASKCOVERSMOUTH || eyesmouth_covered & HEADCOVERSMOUTH)
return 0
if("chest")
if(BODY_ZONE_CHEST)
if(covered_locations & CHEST)
return 0
if("groin")
if(BODY_ZONE_PRECISE_GROIN)
if(covered_locations & GROIN)
return 0
if("l_arm")
if(BODY_ZONE_L_ARM)
if(covered_locations & ARM_LEFT)
return 0
if("r_arm")
if(BODY_ZONE_R_ARM)
if(covered_locations & ARM_RIGHT)
return 0
if("l_leg")
if(BODY_ZONE_L_LEG)
if(covered_locations & LEG_LEFT)
return 0
if("r_leg")
if(BODY_ZONE_R_LEG)
if(covered_locations & LEG_RIGHT)
return 0
if("l_hand")
if(BODY_ZONE_PRECISE_L_HAND)
if(covered_locations & HAND_LEFT)
return 0
if("r_hand")
if(BODY_ZONE_PRECISE_R_HAND)
if(covered_locations & HAND_RIGHT)
return 0
if("l_foot")
if(BODY_ZONE_PRECISE_L_FOOT)
if(covered_locations & FOOT_LEFT)
return 0
if("r_foot")
if(BODY_ZONE_PRECISE_R_FOOT)
if(covered_locations & FOOT_RIGHT)
return 0
+1 -1
View File
@@ -2,7 +2,7 @@
name = "implant removal"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/extract_implant, /datum/surgery_step/close)
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list("chest")
possible_locs = list(BODY_ZONE_CHEST)
//extract implant
+1 -1
View File
@@ -44,7 +44,7 @@
name = "augmentation"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/replace, /datum/surgery_step/saw, /datum/surgery_step/add_limb)
species = list(/mob/living/carbon/human)
possible_locs = list("r_arm","l_arm","r_leg","l_leg","chest","head")
possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD)
requires_real_bodypart = TRUE
//SURGERY STEP SUCCESSES
+1 -1
View File
@@ -1,7 +1,7 @@
/datum/surgery/lipoplasty
name = "lipoplasty"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/cut_fat, /datum/surgery_step/remove_fat, /datum/surgery_step/close)
possible_locs = list("chest")
possible_locs = list(BODY_ZONE_CHEST)
/datum/surgery/lipoplasty/can_start(mob/user, mob/living/carbon/target)
if(target.has_trait(TRAIT_FAT))
+5 -5
View File
@@ -1,7 +1,7 @@
/datum/surgery/organ_manipulation
name = "organ manipulation"
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list("chest", "head")
possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD)
requires_real_bodypart = 1
steps = list(
/datum/surgery_step/incise,
@@ -15,7 +15,7 @@
)
/datum/surgery/organ_manipulation/soft
possible_locs = list("groin", "eyes", "mouth", "l_arm", "r_arm")
possible_locs = list(BODY_ZONE_PRECISE_GROIN, BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)
steps = list(
/datum/surgery_step/incise,
/datum/surgery_step/retract_skin,
@@ -27,7 +27,7 @@
/datum/surgery/organ_manipulation/alien
name = "alien organ manipulation"
possible_locs = list("chest", "head", "groin", "eyes", "mouth", "l_arm", "r_arm")
possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_PRECISE_GROIN, BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)
species = list(/mob/living/carbon/alien/humanoid)
steps = list(
/datum/surgery_step/saw,
@@ -40,7 +40,7 @@
/datum/surgery/organ_manipulation/mechanic
name = "prosthesis organ manipulation"
possible_locs = list("chest", "head")
possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD)
requires_bodypart_type = BODYPART_ROBOTIC
steps = list(
/datum/surgery_step/mechanic_open,
@@ -53,7 +53,7 @@
)
/datum/surgery/organ_manipulation/mechanic/soft
possible_locs = list("groin", "eyes", "mouth", "l_arm", "r_arm")
possible_locs = list(BODY_ZONE_PRECISE_GROIN, BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/open_hatch,
+1 -1
View File
@@ -1,7 +1,7 @@
/obj/item/organ/appendix
name = "appendix"
icon_state = "appendix"
zone = "groin"
zone = BODY_ZONE_PRECISE_GROIN
slot = ORGAN_SLOT_APPENDIX
var/inflamed = 0
+19 -19
View File
@@ -1,7 +1,7 @@
/obj/item/organ/cyberimp/arm
name = "arm-mounted implant"
desc = "You shouldn't see this! Adminhelp and report this as an issue on github!"
zone = "r_arm"
zone = BODY_ZONE_R_ARM
icon_state = "implant-toolkit"
w_class = WEIGHT_CLASS_NORMAL
actions_types = list(/datum/action/item_action/organ_action/toggle)
@@ -24,31 +24,31 @@
/obj/item/organ/cyberimp/arm/proc/SetSlotFromZone()
switch(zone)
if("l_arm")
if(BODY_ZONE_L_ARM)
slot = ORGAN_SLOT_LEFT_ARM_AUG
if("r_arm")
if(BODY_ZONE_R_ARM)
slot = ORGAN_SLOT_RIGHT_ARM_AUG
else
CRASH("Invalid zone for [type]")
/obj/item/organ/cyberimp/arm/update_icon()
if(zone == "r_arm")
if(zone == BODY_ZONE_R_ARM)
transform = null
else // Mirroring the icon
transform = matrix(-1, 0, 0, 0, 1, 0)
/obj/item/organ/cyberimp/arm/examine(mob/user)
..()
to_chat(user, "<span class='info'>[src] is assembled in the [zone == "r_arm" ? "right" : "left"] arm configuration. You can use a screwdriver to reassemble it.</span>")
to_chat(user, "<span class='info'>[src] is assembled in the [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm configuration. You can use a screwdriver to reassemble it.</span>")
/obj/item/organ/cyberimp/arm/screwdriver_act(mob/living/user, obj/item/I)
I.play_tool_sound(src)
if(zone == "r_arm")
zone = "l_arm"
if(zone == BODY_ZONE_R_ARM)
zone = BODY_ZONE_L_ARM
else
zone = "r_arm"
zone = BODY_ZONE_R_ARM
SetSlotFromZone()
to_chat(user, "<span class='notice'>You modify [src] to be installed on the [zone == "r_arm" ? "right" : "left"] arm.</span>")
to_chat(user, "<span class='notice'>You modify [src] to be installed on the [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.</span>")
update_icon()
/obj/item/organ/cyberimp/arm/Remove(mob/living/carbon/M, special = 0)
@@ -66,8 +66,8 @@
if(!holder || (holder in src))
return
owner.visible_message("<span class='notice'>[owner] retracts [holder] back into [owner.p_their()] [zone == "r_arm" ? "right" : "left"] arm.</span>",
"<span class='notice'>[holder] snaps back into your [zone == "r_arm" ? "right" : "left"] arm.</span>",
owner.visible_message("<span class='notice'>[owner] retracts [holder] back into [owner.p_their()] [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.</span>",
"<span class='notice'>[holder] snaps back into your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.</span>",
"<span class='italics'>You hear a short mechanical noise.</span>")
if(istype(holder, /obj/item/device/assembly/flash/armimplant))
@@ -102,7 +102,7 @@
else
to_chat(owner, "<span class='notice'>You drop [arm_item] to activate [src]!</span>")
var/result = (zone == "r_arm" ? owner.put_in_r_hand(holder) : owner.put_in_l_hand(holder))
var/result = (zone == BODY_ZONE_R_ARM ? owner.put_in_r_hand(holder) : owner.put_in_l_hand(holder))
if(!result)
to_chat(owner, "<span class='warning'>Your [name] fails to activate!</span>")
return
@@ -110,8 +110,8 @@
// Activate the hand that now holds our item.
owner.swap_hand(result)//... or the 1st hand if the index gets lost somehow
owner.visible_message("<span class='notice'>[owner] extends [holder] from [owner.p_their()] [zone == "r_arm" ? "right" : "left"] arm.</span>",
"<span class='notice'>You extend [holder] from your [zone == "r_arm" ? "right" : "left"] arm.</span>",
owner.visible_message("<span class='notice'>[owner] extends [holder] from [owner.p_their()] [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.</span>",
"<span class='notice'>You extend [holder] from your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.</span>",
"<span class='italics'>You hear a short mechanical noise.</span>")
playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1)
@@ -136,9 +136,9 @@
/obj/item/organ/cyberimp/arm/gun/emp_act(severity)
if(prob(30/severity) && owner && !crit_fail)
Retract()
owner.visible_message("<span class='danger'>A loud bang comes from [owner]\'s [zone == "r_arm" ? "right" : "left"] arm!</span>")
owner.visible_message("<span class='danger'>A loud bang comes from [owner]\'s [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm!</span>")
playsound(get_turf(owner), 'sound/weapons/flashbang.ogg', 100, 1)
to_chat(owner, "<span class='userdanger'>You feel an explosion erupt inside your [zone == "r_arm" ? "right" : "left"] arm as your implant breaks!</span>")
to_chat(owner, "<span class='userdanger'>You feel an explosion erupt inside your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm as your implant breaks!</span>")
owner.adjust_fire_stacks(20)
owner.IgniteMob()
owner.adjustFireLoss(25)
@@ -154,7 +154,7 @@
contents = newlist(/obj/item/gun/energy/laser/mounted)
/obj/item/organ/cyberimp/arm/gun/laser/l
zone = "l_arm"
zone = BODY_ZONE_L_ARM
/obj/item/organ/cyberimp/arm/gun/taser
@@ -164,7 +164,7 @@
contents = newlist(/obj/item/gun/energy/e_gun/advtaser/mounted)
/obj/item/organ/cyberimp/arm/gun/taser/l
zone = "l_arm"
zone = BODY_ZONE_L_ARM
/obj/item/organ/cyberimp/arm/toolset
name = "integrated toolset implant"
@@ -173,7 +173,7 @@
/obj/item/crowbar/cyborg, /obj/item/wirecutters/cyborg, /obj/item/device/multitool/cyborg)
/obj/item/organ/cyberimp/arm/toolset/l
zone = "l_arm"
zone = BODY_ZONE_L_ARM
/obj/item/organ/cyberimp/arm/toolset/emag_act()
if(!(locate(/obj/item/kitchen/knife/combat/cyborg) in items_list))
@@ -3,7 +3,7 @@
desc = "Implants for the organs in your torso."
icon_state = "chest_implant"
implant_overlay = "chest_implant_overlay"
zone = "chest"
zone = BODY_ZONE_CHEST
/obj/item/organ/cyberimp/chest/nutriment
name = "Nutriment pump implant"
+1 -1
View File
@@ -4,7 +4,7 @@
icon_state = "eye_implant"
implant_overlay = "eye_implant_overlay"
slot = ORGAN_SLOT_EYES
zone = "eyes"
zone = BODY_ZONE_PRECISE_EYES
w_class = WEIGHT_CLASS_TINY
// HUD implants
@@ -26,7 +26,7 @@
desc = "Injectors of extra sub-routines for the brain."
icon_state = "brain_implant"
implant_overlay = "brain_implant_overlay"
zone = "head"
zone = BODY_ZONE_HEAD
w_class = WEIGHT_CLASS_TINY
/obj/item/organ/cyberimp/brain/emp_act(severity)
@@ -125,7 +125,7 @@
//[[[[MOUTH]]]]
/obj/item/organ/cyberimp/mouth
zone = "mouth"
zone = BODY_ZONE_PRECISE_MOUTH
/obj/item/organ/cyberimp/mouth/breathing_tube
name = "breathing tube implant"
+1 -1
View File
@@ -2,7 +2,7 @@
name = "ears"
icon_state = "ears"
desc = "There are three parts to the ear. Inner, middle and outer. Only one of these parts should be normally visible."
zone = "head"
zone = BODY_ZONE_HEAD
slot = ORGAN_SLOT_EARS
gender = PLURAL
+2 -2
View File
@@ -1,8 +1,8 @@
/obj/item/organ/eyes
name = "eyes"
name = BODY_ZONE_PRECISE_EYES
icon_state = "eyeballs"
desc = "I see you!"
zone = "eyes"
zone = BODY_ZONE_PRECISE_EYES
slot = ORGAN_SLOT_EYES
gender = PLURAL
+1 -1
View File
@@ -2,7 +2,7 @@
name = "heart"
desc = "I feel bad for the heartless bastard who lost this."
icon_state = "heart-on"
zone = "chest"
zone = BODY_ZONE_CHEST
slot = ORGAN_SLOT_HEART
// Heart attack code is in code/modules/mob/living/carbon/human/life.dm
var/beating = 1
+28 -28
View File
@@ -1,29 +1,29 @@
/mob/proc/getorgan(typepath)
return
/mob/proc/getorganszone(zone)
return
/mob/proc/getorganslot(slot)
return
/mob/living/carbon/getorgan(typepath)
return (locate(typepath) in internal_organs)
/mob/living/carbon/getorganszone(zone, subzones = 0)
var/list/returnorg = list()
if(subzones)
// Include subzones - groin for chest, eyes and mouth for head
if(zone == "head")
returnorg = getorganszone("eyes") + getorganszone("mouth")
if(zone == "chest")
returnorg = getorganszone("groin")
for(var/X in internal_organs)
var/obj/item/organ/O = X
if(zone == O.zone)
returnorg += O
return returnorg
/mob/living/carbon/getorganslot(slot)
/mob/proc/getorgan(typepath)
return
/mob/proc/getorganszone(zone)
return
/mob/proc/getorganslot(slot)
return
/mob/living/carbon/getorgan(typepath)
return (locate(typepath) in internal_organs)
/mob/living/carbon/getorganszone(zone, subzones = 0)
var/list/returnorg = list()
if(subzones)
// Include subzones - groin for chest, eyes and mouth for head
if(zone == BODY_ZONE_HEAD)
returnorg = getorganszone(BODY_ZONE_PRECISE_EYES) + getorganszone(BODY_ZONE_PRECISE_MOUTH)
if(zone == BODY_ZONE_CHEST)
returnorg = getorganszone(BODY_ZONE_PRECISE_GROIN)
for(var/X in internal_organs)
var/obj/item/organ/O = X
if(zone == O.zone)
returnorg += O
return returnorg
/mob/living/carbon/getorganslot(slot)
return internal_organs_slot[slot]
+1 -1
View File
@@ -6,7 +6,7 @@
name = "liver"
icon_state = "liver"
w_class = WEIGHT_CLASS_NORMAL
zone = "chest"
zone = BODY_ZONE_CHEST
slot = ORGAN_SLOT_LIVER
desc = "Pairing suggestion: chianti and fava beans."
var/damage = 0 //liver damage, 0 is no damage, damage=maxHealth causes liver failure
+1 -1
View File
@@ -11,7 +11,7 @@
/obj/item/organ/lungs
name = "lungs"
icon_state = "lungs"
zone = "chest"
zone = BODY_ZONE_CHEST
slot = ORGAN_SLOT_LUNGS
gender = PLURAL
w_class = WEIGHT_CLASS_NORMAL
@@ -5,7 +5,7 @@
var/status = ORGAN_ORGANIC
w_class = WEIGHT_CLASS_SMALL
throwforce = 0
var/zone = "chest"
var/zone = BODY_ZONE_CHEST
var/slot
// DO NOT add slots with matching names to different zones - it will break internal_organs_slot list!
var/vital = 0
+6 -14
View File
@@ -2,7 +2,7 @@
name = "stomach"
icon_state = "stomach"
w_class = WEIGHT_CLASS_NORMAL
zone = "chest"
zone = BODY_ZONE_CHEST
slot = ORGAN_SLOT_STOMACH
attack_verb = list("gored", "squished", "slapped", "digested")
desc = "Onaka ga suite imasu."
@@ -36,33 +36,25 @@
H.blur_eyes(3) //We need to add more shit down here
H.adjust_disgust(-0.5 * disgust_metabolism)
GET_COMPONENT_FROM(mood, /datum/component/mood, H)
switch(H.disgust)
if(0 to DISGUST_LEVEL_GROSS)
H.clear_alert("disgust")
if(mood)
mood.clear_event("disgust")
H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "disgust")
if(DISGUST_LEVEL_GROSS to DISGUST_LEVEL_VERYGROSS)
H.throw_alert("disgust", /obj/screen/alert/gross)
if(mood)
mood.add_event("disgust", /datum/mood_event/disgust/gross)
H.SendSignal(COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/gross)
if(DISGUST_LEVEL_VERYGROSS to DISGUST_LEVEL_DISGUSTED)
H.throw_alert("disgust", /obj/screen/alert/verygross)
if(mood)
mood.add_event("disgust", /datum/mood_event/disgust/verygross)
H.SendSignal(COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/verygross)
if(DISGUST_LEVEL_DISGUSTED to INFINITY)
H.throw_alert("disgust", /obj/screen/alert/disgusted)
if(mood)
mood.add_event("disgust", /datum/mood_event/disgust/disgusted)
H.SendSignal(COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/disgusted)
/obj/item/organ/stomach/Remove(mob/living/carbon/M, special = 0)
var/mob/living/carbon/human/H = owner
if(istype(H))
H.clear_alert("disgust")
GET_COMPONENT_FROM(mood, /datum/component/mood, H)
if(mood)
mood.clear_event("disgust")
H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "disgust")
..()
/obj/item/organ/stomach/fly
+1 -1
View File
@@ -4,7 +4,7 @@
name = "tail"
desc = "A severed tail. What did you cut this off of?"
icon_state = "severedtail"
zone = "groin"
zone = BODY_ZONE_PRECISE_GROIN
slot = ORGAN_SLOT_TAIL
var/tail_type = "None"
+1 -1
View File
@@ -2,7 +2,7 @@
name = "tongue"
desc = "A fleshy muscle mostly used for lying."
icon_state = "tonguenormal"
zone = "mouth"
zone = BODY_ZONE_PRECISE_MOUTH
slot = ORGAN_SLOT_TONGUE
attack_verb = list("licked", "slobbered", "slapped", "frenched", "tongued")
var/list/languages_possible
+3 -3
View File
@@ -6,7 +6,7 @@
/obj/item/organ/vocal_cords //organs that are activated through speech with the :x channel
name = "vocal cords"
icon_state = "appendix"
zone = "mouth"
zone = BODY_ZONE_PRECISE_MOUTH
slot = ORGAN_SLOT_VOICE
gender = PLURAL
var/list/spans = null
@@ -23,7 +23,7 @@
/obj/item/organ/adamantine_resonator
name = "adamantine resonator"
desc = "Fragments of adamantine exist in all golems, stemming from their origins as purely magical constructs. These are used to \"hear\" messages from their leaders."
zone = "head"
zone = BODY_ZONE_HEAD
slot = ORGAN_SLOT_ADAMANTINE_RESONATOR
icon_state = "adamantine_resonator"
@@ -312,7 +312,7 @@
cooldown = COOLDOWN_DAMAGE
for(var/V in listeners)
var/mob/living/L = V
L.apply_damage(15 * power_multiplier, def_zone = "chest")
L.apply_damage(15 * power_multiplier, def_zone = BODY_ZONE_CHEST)
//BLEED
else if((findtext(message, bleed_words)))
+1 -1
View File
@@ -1,7 +1,7 @@
/datum/surgery/plastic_surgery
name = "plastic surgery"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/reshape_face, /datum/surgery_step/close)
possible_locs = list("head")
possible_locs = list(BODY_ZONE_HEAD)
//reshape_face
/datum/surgery_step/reshape_face
@@ -2,7 +2,7 @@
name = "prosthetic replacement"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/add_prosthetic)
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list("r_arm", "l_arm", "l_leg", "r_leg", "head")
possible_locs = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_HEAD)
requires_bodypart = FALSE //need a missing limb
requires_bodypart_type = 0
@@ -52,7 +52,7 @@
else
to_chat(user, "<span class='warning'>[tool] isn't the right type for [parse_zone(target_zone)].</span>")
return -1
else if(target_zone == "l_arm" || target_zone == "r_arm")
else if(target_zone == BODY_ZONE_L_ARM || target_zone == BODY_ZONE_R_ARM)
user.visible_message("[user] begins to attach [tool] onto [target].", "<span class='notice'>You begin to attach [tool] onto [target]...</span>")
else
to_chat(user, "<span class='warning'>[tool] must be installed onto an arm.</span>")
@@ -79,10 +79,10 @@
qdel(tool)
if(istype(tool, /obj/item/twohanded/required/chainsaw))
var/obj/item/mounted_chainsaw/new_arm = new(target)
target_zone == "r_arm" ? target.put_in_r_hand(new_arm) : target.put_in_l_hand(new_arm)
target_zone == BODY_ZONE_R_ARM ? target.put_in_r_hand(new_arm) : target.put_in_l_hand(new_arm)
return 1
else if(istype(tool, /obj/item/melee/synthetic_arm_blade))
var/obj/item/melee/arm_blade/new_arm = new(target,TRUE,TRUE)
target_zone == "r_arm" ? target.put_in_r_hand(new_arm) : target.put_in_l_hand(new_arm)
target_zone == BODY_ZONE_R_ARM ? target.put_in_r_hand(new_arm) : target.put_in_l_hand(new_arm)
return 1
@@ -1,7 +1,7 @@
/datum/surgery/embedded_removal
name = "removal of embedded objects"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/remove_object)
possible_locs = list("r_arm","l_arm","r_leg","l_leg","chest","head")
possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD)
/datum/surgery_step/remove_object
@@ -30,9 +30,7 @@
L.embedded_objects -= I
if(!H.has_embedded_objects())
H.clear_alert("embeddedobject")
GET_COMPONENT_FROM(mood, /datum/component/mood, H)
if(mood)
mood.clear_event("embedded")
H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded")
if(objects > 0)
user.visible_message("[user] successfully removes [objects] objects from [H]'s [L]!", "<span class='notice'>You successfully remove [objects] objects from [H]'s [L.name].</span>")
+1 -1
View File
@@ -5,7 +5,7 @@
var/step_in_progress = 0 //Actively performing a Surgery
var/can_cancel = 1 //Can cancel this surgery after step 1 with cautery
var/list/species = list(/mob/living/carbon/human) //Acceptable Species
var/location = "chest" //Surgery location
var/location = BODY_ZONE_CHEST //Surgery location
var/requires_bodypart_type = BODYPART_ORGANIC //Prevents you from performing an operation on incorrect limbs. 0 for any limb type
var/list/possible_locs = list() //Multiple locations
var/ignore_clothes = 0 //This surgery ignores clothes