diff --git a/code/datums/colormate.dm b/code/datums/colormate.dm
index 2149191543..06460069a0 100644
--- a/code/datums/colormate.dm
+++ b/code/datums/colormate.dm
@@ -108,6 +108,16 @@
if("set_matrix_color")
color_matrix_last[params["color"]] = params["value"]
return TRUE
+ if("set_matrix_string")
+ if(params["value"])
+ var/list/colours = splittext(params["value"], ",")
+ if(colours.len > 12)
+ colours.Cut(13)
+ for(var/i = 1, i <= colours.len, i++)
+ var/number = text2num(colours[i])
+ if(isnum(number))
+ color_matrix_last[i] = clamp(number, -10, 10)
+ return TRUE
if("set_hue")
build_hue = clamp(text2num(params["buildhue"]), 0, 360)
return TRUE
diff --git a/code/game/machinery/painter_vr.dm b/code/game/machinery/painter_vr.dm
index 53614b2f90..c34eeb8f97 100644
--- a/code/game/machinery/painter_vr.dm
+++ b/code/game/machinery/painter_vr.dm
@@ -189,6 +189,16 @@
if("set_matrix_color")
color_matrix_last[params["color"]] = params["value"]
return TRUE
+ if("set_matrix_string")
+ if(params["value"])
+ var/list/colours = splittext(params["value"], ",")
+ if(colours.len > 12)
+ colours.Cut(13)
+ for(var/i = 1, i <= colours.len, i++)
+ var/number = text2num(colours[i])
+ if(isnum(number))
+ color_matrix_last[i] = clamp(number, -10, 10)
+ return TRUE
if("set_hue")
build_hue = clamp(text2num(params["buildhue"]), 0, 360)
return TRUE
diff --git a/tgui/packages/tgui/interfaces/ColorMate/ColorMateMatrix.tsx b/tgui/packages/tgui/interfaces/ColorMate/ColorMateMatrix.tsx
index dc6be8c92a..903d4c4a02 100644
--- a/tgui/packages/tgui/interfaces/ColorMate/ColorMateMatrix.tsx
+++ b/tgui/packages/tgui/interfaces/ColorMate/ColorMateMatrix.tsx
@@ -1,7 +1,14 @@
import { toFixed } from 'common/math';
import { useBackend } from '../../backend';
-import { Icon, NumberInput, Table } from '../../components';
+import {
+ Box,
+ Icon,
+ Input,
+ LabeledList,
+ NumberInput,
+ Table,
+} from '../../components';
import { Data } from './types';
export const ColorMateMatrix = (props) => {
@@ -10,226 +17,241 @@ export const ColorMateMatrix = (props) => {
const { matrixcolors } = data;
return (
-
-
-
- RR:
- toFixed(value, 2)}
- onChange={(value: number) =>
- act('set_matrix_color', {
- color: 1,
- value,
- })
- }
- />
-
-
- GR:
- toFixed(value, 2)}
- onChange={(value: number) =>
- act('set_matrix_color', {
- color: 4,
- value,
- })
- }
- />
-
-
- BR:
- toFixed(value, 2)}
- onChange={(value: number) =>
- act('set_matrix_color', {
- color: 7,
- value,
- })
- }
- />
-
-
-
-
- RG:
- toFixed(value, 2)}
- onChange={(value: number) =>
- act('set_matrix_color', {
- color: 2,
- value,
- })
- }
- />
-
-
- GG:
- toFixed(value, 2)}
- onChange={(value: number) =>
- act('set_matrix_color', {
- color: 5,
- value,
- })
- }
- />
-
-
- BG:
- toFixed(value, 2)}
- onChange={(value: number) =>
- act('set_matrix_color', {
- color: 8,
- value,
- })
- }
- />
-
-
-
-
- RB:
- toFixed(value, 2)}
- onChange={(value: number) =>
- act('set_matrix_color', {
- color: 3,
- value,
- })
- }
- />
-
-
- GB:
- toFixed(value, 2)}
- onChange={(value: number) =>
- act('set_matrix_color', {
- color: 6,
- value,
- })
- }
- />
-
-
- BB:
- toFixed(value, 2)}
- onChange={(value: number) =>
- act('set_matrix_color', {
- color: 9,
- value,
- })
- }
- />
-
-
-
-
- CR:
- toFixed(value, 2)}
- onChange={(value: number) =>
- act('set_matrix_color', {
- color: 10,
- value,
- })
- }
- />
-
-
- CG:
- toFixed(value, 2)}
- onChange={(value: number) =>
- act('set_matrix_color', {
- color: 11,
- value,
- })
- }
- />
-
-
- CB:
- toFixed(value, 2)}
- onChange={(value: number) =>
- act('set_matrix_color', {
- color: 12,
- value,
- })
- }
- />
-
-
-
- RG means red will become
- this much green.
-
- CR means this much red will
- be added.
-
-
+ <>
+
+
+
+ RR:
+ toFixed(value, 2)}
+ onChange={(value: number) =>
+ act('set_matrix_color', {
+ color: 1,
+ value,
+ })
+ }
+ />
+
+
+ GR:
+ toFixed(value, 2)}
+ onChange={(value: number) =>
+ act('set_matrix_color', {
+ color: 4,
+ value,
+ })
+ }
+ />
+
+
+ BR:
+ toFixed(value, 2)}
+ onChange={(value: number) =>
+ act('set_matrix_color', {
+ color: 7,
+ value,
+ })
+ }
+ />
+
+
+
+
+ RG:
+ toFixed(value, 2)}
+ onChange={(value: number) =>
+ act('set_matrix_color', {
+ color: 2,
+ value,
+ })
+ }
+ />
+
+
+ GG:
+ toFixed(value, 2)}
+ onChange={(value: number) =>
+ act('set_matrix_color', {
+ color: 5,
+ value,
+ })
+ }
+ />
+
+
+ BG:
+ toFixed(value, 2)}
+ onChange={(value: number) =>
+ act('set_matrix_color', {
+ color: 8,
+ value,
+ })
+ }
+ />
+
+
+
+
+ RB:
+ toFixed(value, 2)}
+ onChange={(value: number) =>
+ act('set_matrix_color', {
+ color: 3,
+ value,
+ })
+ }
+ />
+
+
+ GB:
+ toFixed(value, 2)}
+ onChange={(value: number) =>
+ act('set_matrix_color', {
+ color: 6,
+ value,
+ })
+ }
+ />
+
+
+ BB:
+ toFixed(value, 2)}
+ onChange={(value: number) =>
+ act('set_matrix_color', {
+ color: 9,
+ value,
+ })
+ }
+ />
+
+
+
+
+ CR:
+ toFixed(value, 2)}
+ onChange={(value: number) =>
+ act('set_matrix_color', {
+ color: 10,
+ value,
+ })
+ }
+ />
+
+
+ CG:
+ toFixed(value, 2)}
+ onChange={(value: number) =>
+ act('set_matrix_color', {
+ color: 11,
+ value,
+ })
+ }
+ />
+
+
+ CB:
+ toFixed(value, 2)}
+ onChange={(value: number) =>
+ act('set_matrix_color', {
+ color: 12,
+ value,
+ })
+ }
+ />
+
+
+
+ RG means red will become
+ this much green.
+
+ CR means this much red
+ will be added.
+
+
+
+
+
+
+ act('set_matrix_string', { value })
+ }
+ />
+
+
+
+ >
);
};