diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm
index 621cf1e248e..3111a81c8d4 100644
--- a/code/datums/mutations.dm
+++ b/code/datums/mutations.dm
@@ -19,7 +19,7 @@
var/layer_used = MUTATIONS_LAYER //which mutation layer to use
var/list/species_allowed = list() //to restrict mutation to only certain species
var/health_req //minimum health required to acquire the mutation
- var/limb_req //required limbs to qcquire this mutation
+ var/limb_req //required limbs to acquire this mutation
var/time_coeff = 1 //coefficient for timed mutations
/datum/mutation/human/proc/force_give(mob/living/carbon/human/owner)
diff --git a/code/game/gamemodes/changeling/powers/fleshmend.dm b/code/game/gamemodes/changeling/powers/fleshmend.dm
index 1bbfa7bbc78..99ec015d119 100644
--- a/code/game/gamemodes/changeling/powers/fleshmend.dm
+++ b/code/game/gamemodes/changeling/powers/fleshmend.dm
@@ -31,7 +31,7 @@
H.restore_blood()
H.remove_all_embedded_objects()
if(H.get_missing_limbs())
- playsound(get_turf(H), 'sound/effects/blobattack.ogg', 30, 1)
+ playsound(user, 'sound/magic/Demon_consume.ogg', 50, 1)
H.visible_message("[user]'s missing limbs reform, making a loud, grotesque sound!", "Your limbs regrow, making a loud, crunchy sound and giving you great pain!", "You hear organic matter ripping and tearing!")
H.emote("scream")
H.regenerate_limbs(1)
diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm
index 64a424e5c7d..5fcc08389e2 100644
--- a/code/game/gamemodes/changeling/powers/mutations.dm
+++ b/code/game/gamemodes/changeling/powers/mutations.dm
@@ -48,7 +48,7 @@
else
limb_regen = user.regenerate_limb("r_arm", 1)
if(limb_regen)
- user.visible_message("[user]'s missing arm reform, making a loud, grotesque sound!", "Your arm regrow, making a loud, crunchy sound and giving you great pain!", "You hear organic matter ripping and tearing!")
+ user.visible_message("[user]'s missing arm reforms, making a loud, grotesque sound!", "Your arm regrow, making a loud, crunchy sound and giving you great pain!", "You hear organic matter ripping and tearing!")
user.emote("scream")
var/obj/item/W = new weapon_type(user)
user.put_in_hands(W)
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index c5c6efd0c25..eb1a1d7abd0 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -34,7 +34,7 @@
var/mob/living/carbon/human/H = M
affecting = H.get_bodypart(check_zone(user.zone_selected))
if(!affecting) //Missing limb?
- user << "[H] doesn't have [parse_zone(user.zone_selected)]!"
+ user << "[H] doesn't have \a [parse_zone(user.zone_selected)]!"
return
if(stop_bleeding)
if(H.bleedsuppress)
@@ -79,7 +79,7 @@
var/mob/living/carbon/human/H = M
affecting = H.get_bodypart(check_zone(user.zone_selected))
if(!affecting) //Missing limb?
- user << "[H] doesn't have [parse_zone(user.zone_selected)]!"
+ user << "[H] doesn't have \a [parse_zone(user.zone_selected)]!"
return
if(stop_bleeding)
if(!H.bleedsuppress) //so you can't stack bleed suppression
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index e79d4640be4..e65dab41781 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -362,7 +362,7 @@ var/list/TYPES_SHORTCUTS = list(
/obj/machinery/portable_atmospherics = "PORT_ATMOS",
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack = "MECHA_MISSILE_RACK",
/obj/item/mecha_parts/mecha_equipment = "MECHA_EQUIP",
- /obj/item/organ = "ORGAN_INT",
+ /obj/item/organ = "ORGAN",
)
var/global/list/g_fancy_list_of_types = null
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index ca085a93ec6..dbde6715131 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -148,7 +148,8 @@
take_overall_damage(b_loss,f_loss)
//attempt to dismember bodyparts
- for(var/obj/item/bodypart/BP in bodyparts)
+ for(var/X in bodyparts)
+ var/obj/item/bodypart/BP = X
if(prob(50/severity) && BP.body_zone != "head" && BP.body_zone != "chest")
BP.dismember()
..()
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 686952c434c..565ad522831 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -193,7 +193,7 @@
H.remove_overlay(HAIR_LAYER)
var/obj/item/bodypart/head/HD = H.get_bodypart("head")
- if(!HD || HD.status == ORGAN_ROBOTIC) //Decapitated or robotic head
+ if(!HD) //Decapitated
return
if(H.disabilities & HUSK)
@@ -488,8 +488,8 @@
if(!(type in I.species_exception))
return 0
- var/R = H.has_right_hand(1)
- var/L = H.has_left_hand(1)
+ var/R = H.has_right_hand()
+ var/L = H.has_left_hand()
var/num_arms = H.get_num_arms()
var/num_legs = H.get_num_legs()
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 283e083e79b..fb1553ba799 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -28,21 +28,28 @@
return zone
-/proc/ran_zone(zone, probability = 80, list/exceptions)
+/proc/ran_zone(zone, probability = 80)
+
zone = check_zone(zone)
- if(!islist(exceptions))
- exceptions = list()
-
- if(prob(probability) && !locate(zone) in exceptions)
+ if(prob(probability))
return zone
- var/list/choices = list("head", "chest", "l_arm", "r_arm", "l_leg", "r_leg")
- choices = difflist(choices, exceptions) //Strip away zones to ignore
- if(!choices.len)
- return 0
+ var/t = rand(1, 18) // randomly pick a different zone, or maybe the same one
+ switch(t)
+ if(1)
+ return "head"
+ if(2)
+ return "chest"
+ if(3 to 6)
+ return "l_arm"
+ if(7 to 10)
+ return "r_arm"
+ if(11 to 14)
+ return "l_leg"
+ if(15 to 18)
+ return "r_leg"
- zone = pick(choices) //Pick a random zone
return zone
/proc/above_neck(zone)
diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm
index e7836affac5..8399f552973 100644
--- a/code/modules/surgery/bodyparts/bodyparts.dm
+++ b/code/modules/surgery/bodyparts/bodyparts.dm
@@ -1,6 +1,7 @@
/obj/item/bodypart
name = "limb"
+ desc = "why is it detached..."
var/mob/living/carbon/human/owner = null
var/status = ORGAN_ORGANIC
var/body_zone //"chest", "l_arm", etc , used for def_zone
@@ -264,7 +265,7 @@
/obj/item/bodypart/chest
name = "chest"
- desc = "why is it detached..."
+ desc = "It's impolite to stare at a person's chest."
icon_state = "chest"
max_damage = 200
body_zone = "chest"
@@ -280,7 +281,6 @@
/obj/item/bodypart/l_arm
name = "left arm"
- desc = "why is it detached..."
icon_state = "l_arm"
max_damage = 75
body_zone ="l_arm"
@@ -290,7 +290,6 @@
/obj/item/bodypart/r_arm
name = "right arm"
- desc = "why is it detached..."
icon_state = "r_arm"
max_damage = 75
body_zone = "r_arm"
@@ -300,7 +299,6 @@
/obj/item/bodypart/l_leg
name = "left leg"
- desc = "why is it detached..."
icon_state = "l_leg"
max_damage = 75
body_zone = "l_leg"
@@ -310,7 +308,6 @@
/obj/item/bodypart/r_leg
name = "right leg"
- desc = "why is it detached..."
icon_state = "r_leg"
max_damage = 75
body_zone = "r_leg"
diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm
index 983ee9766ad..3da3e9c214f 100644
--- a/code/modules/surgery/bodyparts/dismemberment.dm
+++ b/code/modules/surgery/bodyparts/dismemberment.dm
@@ -15,7 +15,7 @@
var/direction = pick(cardinal)
var/t_range = rand(2,max(throw_range/2, 2))
var/turf/target_turf = get_turf(src)
- for(var/i = 1; i < t_range; i++)
+ for(var/i in 1 to t_range-1)
var/turf/new_turf = get_step(target_turf, direction)
target_turf = new_turf
if(new_turf.density)
@@ -26,11 +26,12 @@
/obj/item/bodypart/chest/dismember()
var/mob/living/carbon/human/H = owner
- if(!istype(H) || !H.dna.species:has_dismemberment) //human's species don't allow dismemberment
+ if(!istype(H) || !H.dna.species.has_dismemberment) //human's species don't allow dismemberment
return 0
var/organ_spilled = 0
var/turf/T = get_turf(H)
+ T.add_blood(H)
playsound(get_turf(owner), 'sound/misc/splort.ogg', 80, 1)
for(var/X in owner.internal_organs)
var/obj/item/organ/O = X
@@ -289,12 +290,12 @@
//Regenerates all limbs. Returns amount of limbs regenerated
/mob/living/proc/regenerate_limbs(noheal)
- return
+ return 0
/mob/living/carbon/human/regenerate_limbs(noheal)
var/list/limb_list = list("head", "chest", "r_arm", "l_arm", "r_leg", "l_leg")
for(var/Z in limb_list)
- regenerate_limb(Z, noheal)
+ . += regenerate_limb(Z, noheal)
/mob/living/proc/regenerate_limb(limb_zone, noheal)
return
@@ -302,7 +303,7 @@
/mob/living/carbon/human/regenerate_limb(limb_zone, noheal)
var/obj/item/bodypart/L
if(get_bodypart(limb_zone))
- return
+ return 0
L = newBodyPart(limb_zone, 0, 0, src)
if(L)
if(!noheal)
diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm
index 08bcdeb7712..1feb60587e4 100644
--- a/code/modules/surgery/bodyparts/head.dm
+++ b/code/modules/surgery/bodyparts/head.dm
@@ -2,7 +2,7 @@
/obj/item/bodypart/head
name = "head"
- desc = "what a way to get a head in life..."
+ desc = "Didn't make sense not to live for fun, your brain gets smart but your head gets dumb."
icon_state = "head"
max_damage = 200
body_zone = "head"
diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm
index 2d5b0bf1b31..59259bda02f 100644
--- a/code/modules/surgery/helpers.dm
+++ b/code/modules/surgery/helpers.dm
@@ -23,11 +23,11 @@
if(!S.possible_locs.Find(selected_zone))
continue
if(affecting)
- if(S.requires_missing_bodypart)
+ if(!S.requires_bodypart)
continue
if(S.requires_organic_bodypart && affecting.status == ORGAN_ROBOTIC)
continue
- else if(H && !S.requires_missing_bodypart) //human with no limb in surgery zone when we need a limb
+ else if(H && S.requires_bodypart) //human with no limb in surgery zone when we need a limb
continue
if(!S.can_start(user, M))
continue
@@ -52,11 +52,11 @@
if(H)
affecting = H.get_bodypart(check_zone(selected_zone))
if(affecting)
- if(procedure.requires_missing_bodypart)
+ if(!procedure.requires_bodypart)
return
if(procedure.requires_organic_bodypart && affecting.status == ORGAN_ROBOTIC)
return
- else if(H && !procedure.requires_missing_bodypart)
+ else if(H && procedure.requires_bodypart)
return
if(!procedure.can_start(user, M))
return
diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm
index 051e1037c45..147b17293dd 100644
--- a/code/modules/surgery/prosthetic_replacement.dm
+++ b/code/modules/surgery/prosthetic_replacement.dm
@@ -3,7 +3,7 @@
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)
possible_locs = list("r_arm", "l_arm", "l_leg", "r_leg", "head")
- requires_missing_bodypart = 1
+ requires_bodypart = FALSE //need a missing limb
/datum/surgery/prosthetic_replacement/can_start(mob/user, mob/living/carbon/target)
if(!ishuman(target))
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index 408702a5451..8bb3cf641a5 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -10,7 +10,7 @@
var/list/possible_locs = list() //Multiple locations -- c0
var/ignore_clothes = 0 //This surgery ignores clothes
var/obj/item/organ/organ //Operable body part
- var/requires_missing_bodypart = 0 //Surgery available only when a bodypart is present, or only when it is missing.
+ var/requires_bodypart = TRUE //Surgery available only when a bodypart is present, or only when it is missing.
/datum/surgery/proc/can_start(mob/user, mob/living/carbon/target)
// if 0 surgery wont show up in list