diff --git a/code/__DEFINES/stat.dm b/code/__DEFINES/stat.dm
index 28255c629e7..f7e519336d0 100644
--- a/code/__DEFINES/stat.dm
+++ b/code/__DEFINES/stat.dm
@@ -13,10 +13,10 @@
#define MUTE 2
#define DEAF 4
#define NEARSIGHT 8
-#define VISIONBLOCK 16
#define FAT 32
#define HUSK 64
#define NOCLONE 128
+#define CLUMSY 256
// bitflags for machine stat variable
#define BROKEN 1
diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm
index c8611eaca17..4aae3b23a5f 100644
--- a/code/datums/mutations.dm
+++ b/code/datums/mutations.dm
@@ -238,6 +238,14 @@
name = "Clumsiness"
quality = MINOR_NEGATIVE
+/datum/mutation/human/clumsy/on_acquiring(mob/living/carbon/human/owner)
+ if(..()) return
+ owner.disabilities |= CLUMSY
+
+/datum/mutation/human/clumsy/on_losing(mob/living/carbon/human/owner)
+ if(..()) return
+ owner.disabilities &= ~CLUMSY
+
/datum/mutation/human/tourettes
name = "Tourettes Syndrome"
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index 0e702530e52..14cadcc0a74 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -16,7 +16,7 @@
/obj/item/device/flash/proc/clown_check(mob/living/carbon/human/user)
- if(istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
+ if(user.disabilities & CLUMSY && prob(50))
flash_carbon(user, user, 15, 0)
return 0
return 1
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 98988594c9b..1fa51989190 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -49,7 +49,7 @@
add_fingerprint(user)
if(on && user.zone_sel.selecting == "eyes")
- if(((istype(user) && user.dna.check_mutation("Clumsiness", user)) || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
+ if((user.disabilities & CLUMSY || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
return ..() //just hit them in the head
if(!user.IsAdvancedToolUser())
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 0a473316417..9762cf10c60 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -80,7 +80,7 @@ MASS SPECTROMETER
/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/carbon/human/user as mob)
// Clumsiness/brain damage check
- if ((istype(user) && user.dna.check_mutation("Clumsiness", user) || user.getBrainLoss() >= 60) && prob(50))
+ if ((user.disabilities & CLUMSY || user.getBrainLoss() >= 60) && prob(50))
user << "You stupidly try to analyze the floor's vitals!"
user.visible_message("[user] has analyzed the floor's vitals!")
user.show_message("Analyzing Results for The floor:\n\t Overall Status: Healthy", 1)
diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm
index be4a824bdc6..dcc30b68420 100644
--- a/code/game/objects/items/weapons/grenades/grenade.dm
+++ b/code/game/objects/items/weapons/grenades/grenade.dm
@@ -14,7 +14,7 @@
var/display_timer = 1
/obj/item/weapon/grenade/proc/clown_check(var/mob/living/carbon/human/user)
- if(istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
+ if(user.disabilities & CLUMSY && prob(50))
user << "Huh? How does this thing work?"
active = 1
icon_state = initial(icon_state) + "_active"
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index a49c35e914f..3020a6d1acc 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -19,7 +19,7 @@
var/trashtype = null //for disposable cuffs
/obj/item/weapon/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/carbon/human/user)
- if(istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
+ if(user.disabilities & CLUMSY && prob(50))
user << "Uh... how do those things work?!"
apply_cuffs(user,user)
diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm
index 6fc541cce87..f125a82f284 100644
--- a/code/game/objects/items/weapons/kitchen.dm
+++ b/code/game/objects/items/weapons/kitchen.dm
@@ -66,7 +66,7 @@
src.icon_state = "fork"
return
else
- if(ishuman(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
+ if(user.disabilities & CLUMSY && prob(50))
M = user
return eyestab(M,user)
@@ -87,7 +87,7 @@
return (BRUTELOSS)
/obj/item/weapon/kitchen/utensil/knife/attack(target as mob, mob/living/carbon/human/user)
- if (istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
+ if (user.disabilities & CLUMSY && prob(50))
user << " You accidentally cut yourself with the [src]."
user.take_organ_damage(20)
return
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index ce4b1a4c1b2..498c4b334f9 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -68,7 +68,7 @@
return 0
/obj/item/weapon/melee/energy/sword/attack_self(mob/living/carbon/human/user)
- if (istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
+ if (user.disabilities & CLUMSY && prob(50))
user << "You accidentally cut yourself with [src], like a doofus!"
user.take_organ_damage(5,5)
active = !active
diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm
index 1abc877974e..389db4ffa97 100644
--- a/code/game/objects/items/weapons/melee/misc.dm
+++ b/code/game/objects/items/weapons/melee/misc.dm
@@ -29,7 +29,7 @@
/obj/item/weapon/melee/classic_baton/attack(mob/M, mob/living/carbon/human/user)
add_fingerprint(user)
- if(istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
+ if(user.disabilities & CLUMSY && prob(50))
user << "You club yourself over the head!"
user.Weaken(3 * force)
if(ishuman(user))
@@ -103,7 +103,7 @@
/obj/item/weapon/melee/telebaton/attack(mob/target, mob/living/carbon/human/user)
if(on)
add_fingerprint(user)
- if(istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
+ if(user.disabilities & CLUMSY && prob(50))
user << "You club yourself over the head."
user.Weaken(3 * force)
if(ishuman(user))
diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm
index 370dabb90ab..75b11750c8f 100644
--- a/code/game/objects/items/weapons/shields.dm
+++ b/code/game/objects/items/weapons/shields.dm
@@ -57,7 +57,7 @@
return (active)
/obj/item/weapon/shield/energy/attack_self(mob/living/carbon/human/user)
- if(istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
+ if(user.disabilities & CLUMSY && prob(50))
user << "You beat yourself in the head with [src]."
user.take_organ_damage(5)
active = !active
diff --git a/code/game/objects/items/weapons/storage/book.dm b/code/game/objects/items/weapons/storage/book.dm
index 25fce9f4b68..f8bca96b67f 100644
--- a/code/game/objects/items/weapons/storage/book.dm
+++ b/code/game/objects/items/weapons/storage/book.dm
@@ -60,7 +60,7 @@
user.take_organ_damage(0,10)
return
- if (istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
+ if (user.disabilities & CLUMSY && prob(50))
user << "The [src] slips out of your hand and hits your head."
user.take_organ_damage(10)
user.Paralyse(20)
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index e6dd1c91ff3..c13cf8dac62 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -101,7 +101,7 @@
add_fingerprint(user)
/obj/item/weapon/melee/baton/attack(mob/M, mob/living/carbon/human/user)
- if(status && istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
+ if(status && user.disabilities & CLUMSY && prob(50))
user.visible_message("[user] accidentally hits themself with [src]!", \
"You accidentally hit yourself with [src]!")
user.Weaken(stunforce*3)
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 97b92f15666..b985c8928b0 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -86,7 +86,7 @@
if(!istype(M)) return ..()
if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != "head")
return ..()
- if(ishuman(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
+ if(user.disabilities & CLUMSY && prob(50))
M = user
return eyestab(M,user)
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index 43f04ea8cd8..53b6b72ad9d 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -214,7 +214,7 @@ obj/item/weapon/twohanded/
/obj/item/weapon/twohanded/dualsaber/attack(target as mob, mob/living/carbon/human/user as mob)
..()
- if(istype(user) && user.dna.check_mutation("Clumsiness", user) && (wielded) && prob(40))
+ if(user.disabilities & CLUMSY && (wielded) && prob(40))
impale(user)
return
if((wielded) && prob(50))
diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm
index acd005c4aec..c1dcfa30e92 100644
--- a/code/modules/assembly/mousetrap.dm
+++ b/code/modules/assembly/mousetrap.dm
@@ -18,7 +18,7 @@
if(!armed)
if(ishuman(usr))
var/mob/living/carbon/human/user = usr
- if((user.getBrainLoss() >= 60) || (ishuman(user) && user.dna.check_mutation("Clumsiness", user)) && prob(50))
+ if((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY && prob(50))
user << "Your hand slips, setting off the trigger."
pulse(0)
update_icon()
@@ -69,7 +69,7 @@
if(!armed)
user << "You arm [src]."
else
- if(((user.getBrainLoss() >= 60) || (istype(user) && user.dna.check_mutation("Clumsiness", user))) && prob(50))
+ if(((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
@@ -85,7 +85,7 @@
/obj/item/device/assembly/mousetrap/attack_hand(mob/living/carbon/human/user as mob)
if(armed)
- if(((user.getBrainLoss() >= 60) || (istype(user) && user.dna.check_mutation("Clumsiness", user))) && prob(50))
+ if(((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index ca0d4c866d3..df41e44c61f 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -72,7 +72,7 @@
if(!ishuman(usr))
return
var/mob/living/carbon/human/H = usr
- if(H.dna.check_mutation("Clumsiness", H) && prob(25))
+ if(H.disabilities & CLUMSY && prob(25))
H << "You cut yourself on the paper! Ahhhh! Ahhhhh!"
H.damageoverlaytemp = 9001
return
@@ -274,7 +274,7 @@
return
var/clown = 0
- if(istype(user) && user.dna.check_mutation("Clumsiness", user))
+ if(user.disabilities & CLUMSY)
clown = 1
if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon))
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index a87a40b233d..905768d542e 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -63,7 +63,7 @@
//Exclude lasertag guns from the CLUMSY check.
if(clumsy_check)
- if((istype(user) && user.dna.check_mutation("Clumsiness", user)) && prob(40))
+ if(user.disabilities & CLUMSY && prob(40))
user << "You shoot yourself in the foot with \the [src]!"
afterattack(user, user)
user.drop_item()