diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index cbf243ba3d3..37bef3a6025 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -211,20 +211,38 @@
/obj/item/clothing/glasses/sunglasses/noir
name = "noir sunglasses"
desc = "Somehow these seem even more out-of-date than normal sunglasses."
+ action_button_name = "Noir Mode"
+ var/noir_mode = 0
color_view = list(0.3, 0.3, 0.3, 0,\
0.3, 0.3, 0.3, 0,\
0.3, 0.3, 0.3, 0,\
0.0, 0.0, 0.0, 1,) //greyscale
-/obj/item/clothing/glasses/sunglasses/noir/equipped(mob/user, slot)
- if(color_view && user.client && !user.client.color)
- animate(user.client, color = color_view, time = 10)
+/obj/item/clothing/glasses/sunglasses/noir/attack_self()
+ if(is_equipped())
+ toggle_noir()
+/obj/item/clothing/glasses/sunglasses/noir/proc/toggle_noir()
+ if(!noir_mode)
+ if(color_view && usr.client && !usr.client.color)
+ animate(usr.client, color = color_view, time = 10)
+ noir_mode = 1
+ else
+ if(usr.client && usr.client.color)
+ animate(usr.client, color = null, time = 10)
+ noir_mode = 0
+
+/obj/item/clothing/glasses/sunglasses/noir/equipped(mob/user, slot)
+ if(slot == slot_glasses)
+ if(noir_mode)
+ if(color_view && user.client && !user.client.color)
+ animate(user.client, color = color_view, time = 10)
..(user, slot)
-/obj/item/clothing/glasses/sunglasses/noir/dropped(mob/user)
- if(user.client && user.client.color)
- animate(user.client, color = null, time = 10)
+/obj/item/clothing/glasses/sunglasses/noir/dropped(mob/living/carbon/human/user)
+ if(istype(user) && user.glasses == src)
+ if(user.client && user.client.color)
+ animate(user.client, color = null, time = 10)
..(user)
/obj/item/clothing/glasses/sunglasses/yeah
@@ -244,7 +262,7 @@
if(!punused)//one per round
punused = 1
playsound(src.loc, 'sound/misc/yeah.ogg', 100, 0)
- usr.visible_message("YEEEAAAAAHHHHHHHHHHHHH!!")
+ usr.visible_message("YEEEAAAAAHHHHHHHHHHHHH!!")
else
usr << "The moment is gone."