diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm
index f204a971feb..98e5c172c33 100644
--- a/code/game/objects/items/weapons/policetape.dm
+++ b/code/game/objects/items/weapons/policetape.dm
@@ -22,6 +22,19 @@ var/list/tape_roll_applications = list()
var/tape_dir = 0
var/icon_base = "tape"
+/obj/item/tape/update_icon()
+ //Possible directional bitflags: 0 (AIRLOCK), 1 (NORTH), 2 (SOUTH), 4 (EAST), 8 (WEST), 3 (VERTICAL), 12 (HORIZONTAL)
+ switch (tape_dir)
+ if(0) // AIRLOCK
+ icon_state = "[icon_base]_door_[crumpled]"
+ if(3) // VERTICAL
+ icon_state = "[icon_base]_v_[crumpled]"
+ if(12) // HORIZONTAL
+ icon_state = "[icon_base]_h_[crumpled]"
+ else // END POINT (1|2|4|8)
+ icon_state = "[icon_base]_dir_[crumpled]"
+ dir = tape_dir
+
/obj/item/tape/New()
..()
if(!hazard_overlays)
@@ -93,19 +106,26 @@ var/list/tape_roll_applications = list()
/obj/item/taperoll/update_icon()
overlays.Cut()
+ var/image/overlay = image(icon = src.icon)
+ overlay.appearance_flags = RESET_COLOR
if(ismob(loc))
if(!start)
- overlays += "start"
+ overlay.icon_state = "start"
else
- overlays += "stop"
+ overlay.icon_state = "stop"
+ overlays += overlay
/obj/item/taperoll/dropped(mob/user)
- ..()
update_icon()
+ return ..()
/obj/item/taperoll/pickup(mob/user)
- ..()
update_icon()
+ return ..()
+
+/obj/item/taperoll/attack_hand()
+ update_icon()
+ return ..()
/obj/item/taperoll/attack_self(mob/user as mob)
if(!start)
@@ -142,13 +162,13 @@ var/list/tape_roll_applications = list()
for(var/dir in list(NORTH, SOUTH))
if (possible_dirs & dir)
TP.tape_dir += dir
- TP.icon_state = "[TP.icon_base]_[TP.tape_dir]"
+ TP.update_icon()
if(possible_dirs & (EAST|WEST))
var/obj/item/tape/TP = new tape_type(start)
for(var/dir in list(EAST, WEST))
if (possible_dirs & dir)
TP.tape_dir += dir
- TP.icon_state = "[TP.icon_base]_[TP.tape_dir]"
+ TP.update_icon()
start = null
update_icon()
usr << "You finish placing \the [src]."
@@ -207,8 +227,8 @@ var/list/tape_roll_applications = list()
break
if(!tapetest)
var/obj/item/tape/T = new tape_type(cur)
- T.icon_state = "[T.icon_base]_[tape_dir]"
T.tape_dir = tape_dir
+ T.update_icon()
if(tape_dir & SOUTH)
T.layer += 0.1 // Must always show above other tapes
if(cur == end)
@@ -227,7 +247,7 @@ var/list/tape_roll_applications = list()
var/turf/T = get_turf(A)
var/obj/item/tape/P = new tape_type(T.x,T.y,T.z)
P.loc = locate(T.x,T.y,T.z)
- P.icon_state = "[src.icon_base]_door"
+ P.update_icon()
P.layer = 3.2
user << "You finish placing \the [src]."
@@ -251,7 +271,7 @@ var/list/tape_roll_applications = list()
/obj/item/tape/proc/crumple()
if(!crumpled)
crumpled = 1
- icon_state = "[icon_state]_c"
+ update_icon()
name = "crumpled [name]"
/obj/item/tape/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
diff --git a/icons/policetape.dmi b/icons/policetape.dmi
index 0422ecb22f3..42095beef70 100644
Binary files a/icons/policetape.dmi and b/icons/policetape.dmi differ