diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index 919a67ec37..fb3874b2de 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -63,15 +63,23 @@
#define LIFE_HUD 10 // STATUS_HUD that only reports dead or alive
//some colors
-#define COLOR_RED "#FF0000"
-#define COLOR_GREEN "#00FF00"
-#define COLOR_BLUE "#0000FF"
-#define COLOR_CYAN "#00FFFF"
-#define COLOR_PINK "#FF00FF"
-#define COLOR_YELLOW "#FFFF00"
-#define COLOR_ORANGE "#FF9900"
#define COLOR_WHITE "#FFFFFF"
+#define COLOR_SILVER "#C0C0C0"
+#define COLOR_GRAY "#808080"
#define COLOR_BLACK "#000000"
+#define COLOR_RED "#FF0000"
+#define COLOR_MAROON "#800000"
+#define COLOR_YELLOW "#FFFF00"
+#define COLOR_OLIVE "#808000"
+#define COLOR_LIME "#00FF00"
+#define COLOR_GREEN "#008000"
+#define COLOR_CYAN "#00FFFF"
+#define COLOR_TEAL "#008080"
+#define COLOR_BLUE "#0000FF"
+#define COLOR_NAVY "#000080"
+#define COLOR_PINK "#FF00FF"
+#define COLOR_PURPLE "#800080"
+#define COLOR_ORANGE "#FF9900"
// Shuttles.
diff --git a/code/game/objects/items/devices/floor_painter.dm b/code/game/objects/items/devices/floor_painter.dm
index c3161a58e5..71a278d2ff 100644
--- a/code/game/objects/items/devices/floor_painter.dm
+++ b/code/game/objects/items/devices/floor_painter.dm
@@ -1,47 +1,36 @@
+#define CELLS 4
+#define CELLSIZE (32/CELLS)
+
/obj/item/device/floor_painter
name = "floor painter"
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "labeler1"
item_state = "flight"
- var/list/decals = list(
- "white square" = /obj/effect/floor_decal/corner,
- "blue square" = /obj/effect/floor_decal/corner/blue,
- "pale blue square" = /obj/effect/floor_decal/corner/paleblue,
- "green square" = /obj/effect/floor_decal/corner/green,
- "lime square" = /obj/effect/floor_decal/corner/lime,
- "yellow square" = /obj/effect/floor_decal/corner/yellow,
- "beige square" = /obj/effect/floor_decal/corner/beige,
- "red square" = /obj/effect/floor_decal/corner/red,
- "pink square" = /obj/effect/floor_decal/corner/pink,
- "purple square" = /obj/effect/floor_decal/corner/purple,
- "mauve square" = /obj/effect/floor_decal/corner/mauve,
- "orange square" = /obj/effect/floor_decal/corner/orange,
- "brown square" = /obj/effect/floor_decal/corner/brown,
- "grey square" = /obj/effect/floor_decal/corner/grey,
- "hazard stripes" = /obj/effect/floor_decal/industrial/warning,
- "corner, hazard" = /obj/effect/floor_decal/industrial/warning/corner,
- "hatched marking" = /obj/effect/floor_decal/industrial/hatch,
- "white outline" = /obj/effect/floor_decal/industrial/outline,
- "blue outline" = /obj/effect/floor_decal/industrial/outline/blue,
- "yellow outline" = /obj/effect/floor_decal/industrial/outline/yellow,
- "grey outline" = /obj/effect/floor_decal/industrial/outline/grey,
- "loading sign" = /obj/effect/floor_decal/industrial/loading,
- "1" = /obj/effect/floor_decal/sign,
- "2" = /obj/effect/floor_decal/sign/two,
- "A" = /obj/effect/floor_decal/sign/a,
- "B" = /obj/effect/floor_decal/sign/b,
- "C" = /obj/effect/floor_decal/sign/c,
- "D" = /obj/effect/floor_decal/sign/d,
- "Ex" = /obj/effect/floor_decal/sign/ex,
- "M" = /obj/effect/floor_decal/sign/m,
- "CMO" = /obj/effect/floor_decal/sign/cmo,
- "V" = /obj/effect/floor_decal/sign/v,
- "Psy" = /obj/effect/floor_decal/sign/p,
- "remove all decals" = /obj/effect/floor_decal/reset
- )
- var/decal = "remove all decals"
+ var/decal = "remove all decals"
+ var/paint_dir = "precise"
+ var/paint_colour = "white"
+ var/list/decals = list(
+ "quarter-turf" = list("path" = /obj/effect/floor_decal/corner, "precise" = 1, "coloured" = 1),
+ "hazard stripes" = list("path" = /obj/effect/floor_decal/industrial/warning),
+ "corner, hazard" = list("path" = /obj/effect/floor_decal/industrial/warning/corner),
+ "hatched marking" = list("path" = /obj/effect/floor_decal/industrial/hatch),
+ "dotted outline" = list("path" = /obj/effect/floor_decal/industrial/outline, "coloured" = 1),
+ "loading sign" = list("path" = /obj/effect/floor_decal/industrial/loading),
+ "1" = list("path" = /obj/effect/floor_decal/sign),
+ "2" = list("path" = /obj/effect/floor_decal/sign/two),
+ "A" = list("path" = /obj/effect/floor_decal/sign/a),
+ "B" = list("path" = /obj/effect/floor_decal/sign/b),
+ "C" = list("path" = /obj/effect/floor_decal/sign/c),
+ "D" = list("path" = /obj/effect/floor_decal/sign/d),
+ "Ex" = list("path" = /obj/effect/floor_decal/sign/ex),
+ "M" = list("path" = /obj/effect/floor_decal/sign/m),
+ "CMO" = list("path" = /obj/effect/floor_decal/sign/cmo),
+ "V" = list("path" = /obj/effect/floor_decal/sign/v),
+ "Psy" = list("path" = /obj/effect/floor_decal/sign/p),
+ "remove all decals" = list("path" = /obj/effect/floor_decal/reset)
+ )
var/list/paint_dirs = list(
"north" = NORTH,
"northwest" = NORTHWEST,
@@ -51,11 +40,41 @@
"southeast" = SOUTHEAST,
"east" = EAST,
"northeast" = NORTHEAST,
- "user-facing" = 0
+ "precise" = 0
+ )
+ var/list/paint_colours = list(
+ "white" = COLOR_WHITE,
+ "light gray" = COLOR_SILVER,
+ "dark gray" = COLOR_GRAY,
+ "blue-grey" = "#6A97B0",
+ "pale blue-grey" = "#8BBBD5",
+ "green-grey" = "#8DAF6A",
+ "pale green-gray" = "#AED18B",
+ "red-gray" = "#AA5F61",
+ "pale red-gray" = "#CC9090",
+ "purple-gray" = "#A2819E",
+ "pale purple-gray" = "#BDA2BA",
+ "black" = COLOR_BLACK,
+ "red" = COLOR_RED,
+ "dark red" = COLOR_MAROON,
+ "yellow" = COLOR_YELLOW,
+ "dark yellow" = COLOR_OLIVE,
+ "green" = COLOR_LIME,
+ "dark green" = COLOR_GREEN,
+ "cyan" = COLOR_CYAN,
+ "teal" = COLOR_TEAL,
+ "blue" = COLOR_BLUE,
+ "dark blue" = COLOR_NAVY,
+ "magenta" = COLOR_PINK,
+ "purple" = COLOR_PURPLE,
+ "orange" = COLOR_ORANGE,
+ "dark orange" = "#B95A00",
+ "dark brown" = "#917448",
+ "brown" = "#B19664",
+ "pale brown" = "#CEB689"
)
- var/paint_dir = "user-facing"
-/obj/item/device/floor_painter/afterattack(var/atom/A, var/mob/user, proximity)
+/obj/item/device/floor_painter/afterattack(var/atom/A, var/mob/user, proximity, params)
if(!proximity)
return
@@ -68,25 +87,58 @@
user << "\The [src] cannot paint broken or missing tiles."
return
- if(F.decals && F.decals.len > 5)
- user << "\The [F] has been painted too much; you need to clear it off."
- return
+ var/list/decal_data = decals[decal]
+ var/config_error
+ if(!islist(decal_data))
+ config_error = 1
+ var/painting_decal
+ if(!config_error)
+ painting_decal = decal_data["path"]
+ if(!ispath(painting_decal))
+ config_error = 1
- var/painting_decal = decals[decal]
- if(!ispath(painting_decal))
+ if(config_error)
user << "\The [src] flashes an error light. You might need to reconfigure it."
return
+ if(F.decals && F.decals.len > 5 && painting_decal != /obj/effect/floor_decal/reset)
+ user << "\The [F] has been painted too much; you need to clear it off."
+ return
+
var/painting_dir = 0
- if(paint_dir == "user-facing")
- painting_dir = user.dir
+ if(paint_dir == "precise")
+ if(!decal_data["precise"])
+ painting_dir = user.dir
+ else
+ var/list/mouse_control = params2list(params)
+ var/mouse_x = text2num(mouse_control["icon-x"])
+ var/mouse_y = text2num(mouse_control["icon-y"])
+ if(isnum(mouse_x) && isnum(mouse_y))
+ if(mouse_x <= 16)
+ if(mouse_y <= 16)
+ painting_dir = WEST
+ else
+ painting_dir = NORTH
+ else
+ if(mouse_y <= 16)
+ painting_dir = SOUTH
+ else
+ painting_dir = EAST
+ else
+ painting_dir = user.dir
else if(paint_dirs[paint_dir])
painting_dir = paint_dirs[paint_dir]
- new painting_decal(F, painting_dir)
+
+ var/painting_colour
+ if(paint_colour && !isnull(paint_colours[paint_colour]) && decal_data["coloured"])
+ painting_colour = paint_colours[paint_colour]
+
+ new painting_decal(F, painting_dir, painting_colour)
/obj/item/device/floor_painter/attack_self(mob/user as mob)
- var/choice = input("Do you wish to change the decal type or the paint direction?") as null|anything in list("Decal","Direction")
+ var/choice = input("Do you wish to change the decal type, paint direction, or paint colour?") as null|anything in list("Decal","Direction", "Colour")
+
if(choice == "Decal")
var/new_decal = input("Select a decal.") as null|anything in decals
if(new_decal && !isnull(decals[new_decal]))
@@ -97,7 +149,54 @@
if(new_dir && !isnull(paint_dirs[new_dir]))
paint_dir = new_dir
user << "You set \the [src] direction to '[paint_dir]'."
+ else if(choice == "Colour")
+ var/new_colour = input("Select a colour.") as null|anything in paint_colours
+ if(new_colour && !isnull(paint_colours[new_colour]))
+ paint_colour = new_colour
+ user << "You set \the [src] colour to '[paint_colour]'."
/obj/item/device/floor_painter/examine(mob/user)
..(user)
- user << "It is configured to paint the '[decal]' decal with a direction of '[paint_dir]'."
+ user << "It is configured to produce the '[decal]' decal with a direction of '[paint_dir]' using [paint_colour] paint."
+
+/obj/item/device/floor_painter/verb/choose_colour(new_colour in paint_colours)
+ set name = "Choose Colour"
+ set desc = "Choose a floor painter colour."
+ set category = "Object"
+ set src in usr
+
+ if(usr.incapacitated())
+ return
+
+ if(new_colour && !isnull(paint_colours[new_colour]))
+ paint_colour = new_colour
+ usr << "You set \the [src] colour to '[paint_colour]'."
+
+/obj/item/device/floor_painter/verb/choose_decal(new_decal in decals)
+ set name = "Choose Decal"
+ set desc = "Choose a floor painter decal."
+ set category = "Object"
+ set src in usr
+
+ if(usr.incapacitated())
+ return
+
+ if(new_decal && !isnull(decals[new_decal]))
+ decal = new_decal
+ usr << "You set \the [src] decal to '[decal]'."
+
+/obj/item/device/floor_painter/verb/choose_direction(new_dir in paint_dirs)
+ set name = "Choose Direction"
+ set desc = "Choose a floor painter direction."
+ set category = "Object"
+ set src in usr
+
+ if(usr.incapacitated())
+ return
+
+ if(new_dir && !isnull(paint_dirs[new_dir]))
+ paint_dir = new_dir
+ usr << "You set \the [src] direction to '[paint_dir]'."
+
+#undef CELLS
+#undef CELLSIZE
diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm
index e596b04dcf..4ff4153324 100644
--- a/code/game/turfs/flooring/flooring_decals.dm
+++ b/code/game/turfs/flooring/flooring_decals.dm
@@ -9,8 +9,9 @@ var/list/floor_decals = list()
layer = TURF_LAYER + 0.01
var/supplied_dir
-/obj/effect/floor_decal/New(var/newloc, var/newdir)
+/obj/effect/floor_decal/New(var/newloc, var/newdir, var/newcolour)
supplied_dir = newdir
+ if(newcolour) color = newcolour
..(newloc)
/obj/effect/floor_decal/initialize()
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index 1441a9169f..7d612158b1 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -157,7 +157,7 @@
if("Yellow")
colour = COLOR_YELLOW
if("Green")
- colour = COLOR_GREEN
+ colour = COLOR_LIME
if("Pink")
colour = COLOR_PINK
if("Blue")
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 9fcfd2e8d2..7e35d2a9cf 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -50,7 +50,7 @@ By design, d1 is the smallest direction and d2 is the highest
color = COLOR_YELLOW
/obj/structure/cable/green
- color = COLOR_GREEN
+ color = COLOR_LIME
/obj/structure/cable/blue
color = COLOR_BLUE
@@ -538,7 +538,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
/obj/item/stack/cable_coil/update_icon()
if (!color)
- color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_ORANGE, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN)
+ color = pick(COLOR_RED, COLOR_BLUE, COLOR_LIME, COLOR_ORANGE, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN)
if(amount == 1)
icon_state = "coil1"
name = "cable piece"
@@ -597,7 +597,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
if("Yellow")
color = COLOR_YELLOW
if("Green")
- color = COLOR_GREEN
+ color = COLOR_LIME
if("Pink")
color = COLOR_PINK
if("Blue")
@@ -878,7 +878,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
color = COLOR_BLUE
/obj/item/stack/cable_coil/green
- color = COLOR_GREEN
+ color = COLOR_LIME
/obj/item/stack/cable_coil/pink
color = COLOR_PINK
@@ -893,5 +893,5 @@ obj/structure/cable/proc/cableColor(var/colorC)
color = COLOR_WHITE
/obj/item/stack/cable_coil/random/New()
- color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN)
+ color = pick(COLOR_RED, COLOR_BLUE, COLOR_LIME, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN)
..()