diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 03278726cd1..f3415636d22 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -196,7 +196,7 @@
/obj/item/weapon/spacecash/c1000
icon_state = "spacecash1000"
access = access_crate_cash
- desc = "It's worth 1000 credits. El oh dee ess of ee em oh en ee! What's that spell? LOADSAMONEY, probly!"
+ desc = "It's worth 1000 credits."
/obj/item/device/mass_spectrometer
desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample."
diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm
index 2055c5562ea..689e1c14ff8 100644
--- a/code/game/atom_procs.dm
+++ b/code/game/atom_procs.dm
@@ -285,20 +285,34 @@
/atom/proc/clean_blood()
- if (!( src.flags ) & FPRINT)
- return
- if (blood_DNA)
+ if(istype(fingerprints, /list))
+ //Smudge up dem prints some
+ for(var/P in fingerprints)
+ var/test_print = stars(fingerprints[P], rand(10,20))
+ if(stringpercent(test_print) == 32) //She's full of stars! (No actual print left)
+ fingerprints.Remove(P)
+ else
+ fingerprints[P] = test_print
+ if(!fingerprints.len)
+ del(fingerprints)
+ if(istype(blood_DNA, /list))
//Cleaning blood off of mobs
- if (istype (src, /mob/living/carbon))
+ if(istype(src, /mob/living/carbon))
var/mob/living/carbon/M = src
del(M.blood_DNA)
- if(ishuman(src))
- var/mob/living/carbon/human/H = src
- H.bloody_hands = 0
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.gloves)
+ H.gloves.clean_blood()
+// H.update_inv_gloves(0) //Needs to be called even if we aren't wearing gloves.
+ else
+ H.bloody_hands = 0
+ H.update_inv_gloves(0) //because it handles bloody hands too
+ M.update_icons() //apply the now updated overlays to the mob
//Cleaning blood off of items
- else if (istype (src, /obj/item))
+ else if(istype(src, /obj/item))
var/obj/item/O = src
del(O.blood_DNA)
if(O.blood_overlay)
@@ -309,7 +323,7 @@
G.transfer_blood = 0
//Cleaning blood off of turfs
- else if (istype(src, /turf/simulated))
+ else if(istype(src, /turf/simulated))
var/turf/simulated/T = src
del(T.blood_DNA)
if(T.icon_old)
@@ -318,21 +332,8 @@
else
T.icon = initial(icon)
- if(blood_DNA && istype(blood_DNA, /list) && !blood_DNA.len)
- del(blood_DNA)
- if(fingerprints && fingerprints.len)
- //Smudge up dem prints some
- for(var/P in fingerprints)
- var/test_print = stars(fingerprints[P], rand(10,20))
- if(stringpercent(test_print) == 32) //She's full of stars! (No actual print left)
- fingerprints.Remove(P)
- else
- fingerprints[P] = test_print
- if(fingerprints && !fingerprints.len)
- del(fingerprints)
- if(istype(src, /mob/living/carbon/human))
- var/mob/living/carbon/human/M = src
- M.update_inv_gloves() //handles bloody hands too
+ else if(!blood_DNA.len)
+ del(blood_DNA)
return
/atom/MouseDrop(atom/over_object as mob|obj|turf|area)
diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm
index f0f1495e65d..f7ebaf1242f 100644
--- a/code/game/objects/items/weapons/RCD.dm
+++ b/code/game/objects/items/weapons/RCD.dm
@@ -39,12 +39,13 @@ RCD
..()
if(istype(W, /obj/item/weapon/rcd_ammo))
if((matter + 10) > 30)
- user << "The RCD cant hold any more matter."
+ user << "The RCD cant hold any more matter-units."
return
+ user.drop_item()
del(W)
matter += 10
playsound(src.loc, 'click.ogg', 50, 1)
- user << "The RCD now holds [matter]/30 matter-units."
+ user << "The RCD now holds [matter]/30 matter-units."
desc = "A RCD. It currently holds [matter]/30 matter-units."
return
@@ -52,21 +53,22 @@ RCD
attack_self(mob/user as mob)
//Change the mode
playsound(src.loc, 'pop.ogg', 50, 0)
- if(mode == 1)
- mode = 2
- user << "Changed mode to 'Airlock'"
- src.spark_system.start()
- return
- if(mode == 2)
- mode = 3
- user << "Changed mode to 'Deconstruct'"
- src.spark_system.start()
- return
- if(mode == 3)
- mode = 1
- user << "Changed mode to 'Floor & Walls'"
- src.spark_system.start()
- return
+ switch(mode)
+ if(1)
+ mode = 2
+ user << "Changed mode to 'Airlock'"
+ src.spark_system.start()
+ return
+ if(2)
+ mode = 3
+ user << "Changed mode to 'Deconstruct'"
+ src.spark_system.start()
+ return
+ if(3)
+ mode = 1
+ user << "Changed mode to 'Floor & Walls'"
+ src.spark_system.start()
+ return
afterattack(atom/A, mob/user as mob)
@@ -79,18 +81,15 @@ RCD
if(istype(A, /turf) && mode == 1)
if(istype(A, /turf/space) && matter >= 1)
- user << "Building Floor (1)..."
if(!disabled && matter >= 1)
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
spark_system.set_up(5, 0, src)
src.spark_system.start()
A:ReplaceWithPlating()
matter--
- user << "The RCD now holds [matter]/30 matter-units."
desc = "A RCD. It currently holds [matter]/30 matter-units."
return
if(istype(A, /turf/simulated/floor) && matter >= 3)
- user << "Building Wall (3)..."
playsound(src.loc, 'click.ogg', 50, 1)
if(do_after(user, 20))
if(!disabled && matter >= 3)
@@ -99,7 +98,6 @@ RCD
A:ReplaceWithWall()
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
matter -= 3
- user << "The RCD now holds [matter]/30 matter-units."
desc = "A RCD. It currently holds [matter]/30 matter-units."
return
else if(istype(A, /turf/simulated/floor) && mode == 2 && matter >= 10)
@@ -118,7 +116,6 @@ RCD
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
playsound(src.loc, 'sparks2.ogg', 50, 1)
matter -= 10
- user << "The RCD now holds [matter]/30 matter-units."
desc = "A RCD. It currently holds [matter]/30 matter-units."
return
else if(mode == 3 && (istype(A, /turf) || istype(A, /obj/machinery/door/airlock) ) )
@@ -132,7 +129,6 @@ RCD
A:ReplaceWithPlating()
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
matter -= 4
- user << "The RCD now holds [matter]/30 matter-units."
desc = "A RCD. It currently holds [matter]/30 matter-units."
return
if(istype(A, /turf/simulated/wall/r_wall))
@@ -147,7 +143,6 @@ RCD
A:ReplaceWithSpace()
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
matter -= 5
- user << "The RCD now holds [matter]/30 matter-units."
desc = "A RCD. It currently holds [matter]/30 matter-units."
return
if(istype(A, /obj/machinery/door/airlock) && matter >= 10)
@@ -160,6 +155,5 @@ RCD
del(A)
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
matter -= 10
- user << "The RCD now holds [matter]/30 matter-units."
desc = "A RCD. It currently holds [matter]/30 matter-units."
return
diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm
index 86e1cbd02f6..bfe02c9ced1 100644
--- a/code/game/objects/items/weapons/clown_items.dm
+++ b/code/game/objects/items/weapons/clown_items.dm
@@ -44,11 +44,15 @@ BIKE HORN
M.Weaken(2)
/obj/item/weapon/soap/afterattack(atom/target, mob/user as mob)
- if(istype(target,/obj/effect/decal/cleanable))
- user << "\blue You scrub \the [target.name] out."
+ //I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing.
+ //So this is a workaround. This also makes more sense from an IC standpoint. ~Carn
+ if(user.client && (target in user.client.screen))
+ user << "You need to take that [target.name] off before cleaning it."
+ else if(istype(target,/obj/effect/decal/cleanable))
+ user << "You scrub \the [target.name] out."
del(target)
else
- user << "\blue You clean \the [target.name]."
+ user << "You clean \the [target.name]."
target.clean_blood()
return
diff --git a/code/game/objects/items/weapons/mops_cleaners.dm b/code/game/objects/items/weapons/mops_cleaners.dm
index 8c298e36b5b..66336274002 100644
--- a/code/game/objects/items/weapons/mops_cleaners.dm
+++ b/code/game/objects/items/weapons/mops_cleaners.dm
@@ -361,12 +361,9 @@
obj/item/weapon/mop/proc/clean(turf/simulated/A as turf)
src.reagents.reaction(A,1,10)
A.clean_blood()
- for(var/obj/effect/rune/R in A)
- del(R)
- for(var/obj/effect/decal/cleanable/R in A)
- del(R)
- for(var/obj/effect/overlay/R in A)
- del(R)
+ for(var/obj/effect/O in A)
+ if( istype(O,/obj/effect/rune) || istype(O,/obj/effect/decal/cleanable) || istype(O,/obj/effect/overlay) )
+ del(O)
/obj/effect/attackby(obj/item/weapon/W as obj, mob/user as mob)
diff --git a/code/game/objects/watercloset.dm b/code/game/objects/watercloset.dm
index fa4e6c78edc..f17fa42db18 100644
--- a/code/game/objects/watercloset.dm
+++ b/code/game/objects/watercloset.dm
@@ -201,45 +201,38 @@
/obj/machinery/shower/proc/wash(atom/movable/O as obj|mob)
if(!on) return
- if(istype(O, /mob/living/carbon))
- var/mob/living/carbon/monkey = O //it's not necessarily a monkey, but >accurate varnames
- if(monkey.r_hand)
- monkey.r_hand.clean_blood()
- if(monkey.l_hand)
- monkey.l_hand.clean_blood()
- if(monkey.wear_mask)
- monkey.wear_mask.clean_blood()
- monkey.update_inv_wear_mask(0)
-
- if(istype(O, /mob/living/carbon/human))
- var/mob/living/carbon/human/washer = O
- if(washer.head)
- washer.head.clean_blood()
- washer.update_inv_head(0)
- if(washer.wear_suit)
- washer.wear_suit.clean_blood()
- washer.update_inv_wear_suit(0)
- else if(washer.w_uniform)
- washer.w_uniform.clean_blood()
- washer.update_inv_w_uniform(0)
- if(washer.shoes)
- washer.shoes.clean_blood()
- washer.update_inv_shoes(0)
- if(washer.gloves)
- washer.gloves.clean_blood()
-// washer.update_inv_gloves(0) //no need for this one since it's located in clean_blood too.
+ if(iscarbon(O))
+ var/mob/living/carbon/M = O
+ if(M.r_hand)
+ M.r_hand.clean_blood()
+ if(M.l_hand)
+ M.l_hand.clean_blood()
+ if(M.wear_mask)
+ M.wear_mask.clean_blood()
+ M.update_inv_wear_mask(0)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.head)
+ H.head.clean_blood()
+ H.update_inv_head(0)
+ if(H.wear_suit)
+ H.wear_suit.clean_blood()
+ H.update_inv_wear_suit(0)
+ else if(H.w_uniform)
+ H.w_uniform.clean_blood()
+ H.update_inv_w_uniform(0)
+ if(H.shoes)
+ H.shoes.clean_blood()
+ H.update_inv_shoes(0)
O.clean_blood()
- if(loc)
- var/turf/tile = get_turf(loc)
+ if(isturf(loc))
+ var/turf/tile = loc
loc.clean_blood()
- for(var/obj/effect/rune/R in tile)
- del(R)
- for(var/obj/effect/decal/cleanable/R in tile)
- del(R)
- for(var/obj/effect/overlay/R in tile)
- del(R)
+ for(var/obj/effect/E in tile)
+ if(istype(E,/obj/effect/rune) || istype(E,/obj/effect/decal/cleanable) || istype(E,/obj/effect/overlay))
+ del(E)
/obj/machinery/shower/process()
if(!on || !mobpresent) return
@@ -298,18 +291,7 @@
if(M.loc != location) return //Person has moved away from the sink
- if(istype(M, /mob/living/carbon))
- var/mob/living/carbon/C = M
- if(istype(M, /mob/living/carbon/human))
- var/mob/living/carbon/human/washer = C
- if(washer.gloves) //if they have gloves
- washer.gloves.clean_blood() //clean the gloves
- washer.update_inv_gloves() //update our overlays
- else //and if they don't,
- washer.clean_blood() //wash their hands (a mob being bloody means they are 'red handed')
- //overlays will be updated in clean_blood()
- else
- C.clean_blood() //other things that can't wear gloves should just wash the mob.
+ M.clean_blood()
for(var/mob/V in viewers(src, null))
V.show_message("\blue [M] washes their hands using \the [src].")
diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm
index 4195c00d6f1..7161c9f53d3 100644
--- a/code/modules/chemical/Chemistry-Reagents.dm
+++ b/code/modules/chemical/Chemistry-Reagents.dm
@@ -983,7 +983,7 @@ datum
if(istype(O,/obj/effect/decal/cleanable))
del(O)
else
- if (O)
+ if(O)
O.clean_blood()
reaction_turf(var/turf/T, var/volume)
T.overlays = null
@@ -994,8 +994,7 @@ datum
for(var/mob/living/carbon/metroid/M in T)
M.adjustToxLoss(rand(5,10))
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //TODO: CARN
- M.clean_blood()
+ reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
if(iscarbon(M))
var/mob/living/carbon/C = M
if(C.r_hand)
@@ -1004,19 +1003,22 @@ datum
C.l_hand.clean_blood()
if(C.wear_mask)
C.wear_mask.clean_blood()
+ C.update_inv_wear_mask(0)
if(ishuman(M))
var/mob/living/carbon/human/H = C
- if(H.w_uniform)
- H.w_uniform.clean_blood()
- if(H.wear_suit)
- H.wear_suit.clean_blood()
- if(H.shoes)
- H.shoes.clean_blood()
- if(H.gloves)
- H.gloves.clean_blood()
if(H.head)
H.head.clean_blood()
-
+ H.update_inv_head(0)
+ if(H.wear_suit)
+ H.wear_suit.clean_blood()
+ H.update_inv_wear_suit(0)
+ else if(H.w_uniform)
+ H.w_uniform.clean_blood()
+ H.update_inv_w_uniform(0)
+ if(H.shoes)
+ H.shoes.clean_blood()
+ H.update_inv_shoes(0)
+ M.clean_blood()
plantbgone
name = "Plant-B-Gone"
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index b668dd0c018..ee75f757982 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -648,6 +648,7 @@ Please contact me on #coderbus IRC. ~Carn x
#undef HAIR_LAYER
#undef HEAD_LAYER
#undef HANDCUFF_LAYER
+#undef LEGCUFF_LAYER
#undef L_HAND_LAYER
#undef R_HAND_LAYER
#undef TOTAL_LAYERS
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index eb71922238b..a3b9b68abec 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -944,22 +944,33 @@ Frequency:
if(module)
if(module.type == /obj/item/weapon/robot_module/janitor) //you'd think checking the module would work
- var/turf/tile = get_turf(loc)
-
- tile.clean_blood()
- for(var/obj/effect/R in tile)
- if(istype(R, /obj/effect/rune) || istype(R, /obj/effect/decal/cleanable) || istype(R, /obj/effect/overlay))
- del(R)
-
- for(var/obj/item/cleaned_item in tile)
- cleaned_item.clean_blood()
-
- for(var/mob/living/carbon/human/cleaned_human in tile) //HUE HUE I CLEAN U
- if(cleaned_human.lying)
- cleaned_human.clean_blood()
- cleaned_human << "\red [src] cleans your face!"
- for(var/obj/item/carried_item in cleaned_human.contents)
- carried_item.clean_blood()
+ var/turf/tile = loc
+ if(isturf(tile))
+ tile.clean_blood()
+ for(var/A in tile)
+ if(istype(A, /obj/effect))
+ if(istype(A, /obj/effect/rune) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay))
+ del(A)
+ else if(istype(A, /obj/item))
+ var/obj/item/cleaned_item = A
+ cleaned_item.clean_blood()
+ else if(istype(A, /mob/living/carbon/human))
+ var/mob/living/carbon/human/cleaned_human = A
+ if(cleaned_human.lying)
+ if(cleaned_human.head)
+ cleaned_human.head.clean_blood()
+ cleaned_human.update_inv_head(0)
+ if(cleaned_human.wear_suit)
+ cleaned_human.wear_suit.clean_blood()
+ cleaned_human.update_inv_wear_suit(0)
+ else if(cleaned_human.w_uniform)
+ cleaned_human.w_uniform.clean_blood()
+ cleaned_human.update_inv_w_uniform(0)
+ if(cleaned_human.shoes)
+ cleaned_human.shoes.clean_blood()
+ cleaned_human.update_inv_shoes(0)
+ cleaned_human.clean_blood()
+ cleaned_human << "\red [src] cleans your face!"
return
/mob/living/silicon/robot/proc/self_destruct()