diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm
index 3bb88046a2..26a4094ced 100644
--- a/code/game/objects/items/theft_tools.dm
+++ b/code/game/objects/items/theft_tools.dm
@@ -82,6 +82,7 @@
desc = "A screwdriver with an ultra thin tip."
icon = 'icons/obj/nuke_tools.dmi'
icon_state = "screwdriver_nuke"
+ item_state = "screwdriver_nuke"
toolspeed = 0.5
/obj/item/weapon/paper/nuke_instructions
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 06a090cc53..2c190d6191 100755
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -127,7 +127,8 @@
name = "screwdriver"
desc = "You can be totally screwy with this."
icon = 'icons/obj/tools.dmi'
- icon_state = null
+ icon_state = "screwdriver"
+ item_state = "screwdriver"
flags = CONDUCT
slot_flags = SLOT_BELT
force = 5
@@ -141,21 +142,44 @@
usesound = 'sound/items/screwdriver.ogg'
toolspeed = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30)
+ var/random_color = TRUE //if the screwdriver uses random coloring
+ var/static/list/screwdriver_colors = list(\
+ "blue" = rgb(24, 97, 213), \
+ "red" = rgb(149, 23, 16), \
+ "pink" = rgb(213, 24, 141), \
+ "brown" = rgb(160, 82, 18), \
+ "green" = rgb(14, 127, 27), \
+ "cyan" = rgb(24, 162, 213), \
+ "yellow" = rgb(213, 140, 24), \
+ )
/obj/item/weapon/screwdriver/suicide_act(mob/user)
user.visible_message("[user] is stabbing [src] into [user.p_their()] [pick("temple", "heart")]! It looks like [user.p_theyre()] trying to commit suicide!")
return(BRUTELOSS)
-/obj/item/weapon/screwdriver/New(loc, var/param_color = null)
- ..()
- if(!icon_state)
- if(!param_color)
- param_color = pick("red","blue","pink","brown","green","cyan","yellow")
- icon_state = "screwdriver_[param_color]"
+/obj/item/weapon/screwdriver/Initialize()
+ . = ..()
+ if(random_color) //random colors!
+ var/our_color = pick(screwdriver_colors)
+ add_atom_colour(screwdriver_colors[our_color], FIXED_COLOUR_PRIORITY)
+ update_icon()
+ if(prob(75))
+ pixel_y = rand(0, 16)
- if (prob(75))
- src.pixel_y = rand(0, 16)
- return
+/obj/item/weapon/screwdriver/update_icon()
+ if(!random_color) //icon override
+ return
+ cut_overlays()
+ var/mutable_appearance/base_overlay = mutable_appearance(icon, "screwdriver_screwybits")
+ base_overlay.appearance_flags = RESET_COLOR
+ add_overlay(base_overlay)
+
+/obj/item/weapon/screwdriver/worn_overlays(isinhands = FALSE, icon_file)
+ . = list()
+ if(isinhands && random_color)
+ var/mutable_appearance/M = mutable_appearance(icon_file, "screwdriver_head")
+ M.appearance_flags = RESET_COLOR
+ . += M
/obj/item/weapon/screwdriver/attack(mob/living/carbon/M, mob/living/carbon/user)
if(!istype(M))
@@ -171,15 +195,19 @@
desc = "A screwdriver made of brass. The handle feels freezing cold."
resistance_flags = FIRE_PROOF | ACID_PROOF
icon_state = "screwdriver_brass"
+ item_state = "screwdriver_brass"
toolspeed = 0.5
+ random_color = FALSE
/obj/item/weapon/screwdriver/abductor
name = "alien screwdriver"
desc = "An ultrasonic screwdriver."
icon = 'icons/obj/abductor.dmi'
icon_state = "screwdriver"
+ item_state = "screwdriver_nuke"
usesound = 'sound/items/pshoom.ogg'
toolspeed = 0.1
+ random_color = FALSE
/obj/item/weapon/screwdriver/power
name = "hand drill"
@@ -197,6 +225,7 @@
hitsound = 'sound/items/drill_hit.ogg'
usesound = 'sound/items/drill_use.ogg'
toolspeed = 0.25
+ random_color = FALSE
/obj/item/weapon/screwdriver/power/suicide_act(mob/user)
user.visible_message("[user] is putting [src] to [user.p_their()] temple. It looks like [user.p_theyre()] trying to commit suicide!")
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index f8e6270451..baea9a07a6 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -472,7 +472,7 @@ generate/load female uniform sprites matching all previously decided variables
//Get the overlays for this item when it's being worn
//eg: ammo counters, primed grenade flashes, etc.
- var/list/worn_overlays = worn_overlays(isinhands)
+ var/list/worn_overlays = worn_overlays(isinhands, file2use)
if(worn_overlays && worn_overlays.len)
standing.overlays.Add(worn_overlays)
diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm
index 762ebd56cc..46f9efad07 100644
--- a/code/modules/mob/living/carbon/update_icons.dm
+++ b/code/modules/mob/living/carbon/update_icons.dm
@@ -209,7 +209,8 @@
//Overlays for the worn overlay so you can overlay while you overlay
//eg: ammo counters, primed grenade flashing, etc.
-/obj/item/proc/worn_overlays(isinhands = FALSE)
+//"icon_file" is used automatically for inhands etc. to make sure it gets the right inhand file
+/obj/item/proc/worn_overlays(isinhands = FALSE, icon_file)
. = list()
diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi
index d2b49b0511..5feb604e3f 100644
Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ
diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi
index 9d8663cdd2..efd567f13a 100644
Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ
diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi
index 3ab2087cd9..18a80c1a89 100644
Binary files a/icons/obj/tools.dmi and b/icons/obj/tools.dmi differ