Colour Code from JSON/INI

K

KH-SOS

Guest
GM Version: 1.4.1757
Target Platform: ALL
Download: N/A
Links: N/A

Summary:
Getting a colour code from a single stored value

Tutorial:
So here's a perfectly painful solution to the perfectly normal desire to get a colour code from saved text like a JSON file. Unfortunately GM:S doesn't let you just drop in a hexcode for colour (#000000 for black, #FF00FF for hot pink, etc) like everybody else in the world uses.

The make_colour_rgb or make_colour_hsv functions require you to give separate variables for each value. If you want to save a single string for your colour code and you're using standard digits each code can be 1-255, unfortunately different string lengths to parse out and re-enter for the three values. I haven't had much luck getting hex numbers to work in GMS, and eventually I got tired of padding my numbers to be three digits ("1" as "001").

So until GM:S supports just dropping in hexcodes for colours like everybody else in the world, here's a crazy overcomplicated solution for saving colour codes as a single string and dynamically handling the character length of the digits: I'll be happy if it saves anyone the hassle of figuring out such a basic desire:

Code:
var mapbgcode= ds_map_find_value(yourdatamap, "mapbgcolour");
//1-3 digit rgb
var firstbreak=string_pos(",",mapbgcode);
var stillremaining=string_copy(mapbgcode,firstbreak+1,string_length(mapbgcode));
var secondbreak=string_pos(",",stillremaining);
var mapred=(string_copy(mapbgcode,1,firstbreak-1));
var mapgreen=(string_copy(mapbgcode,firstbreak+1,secondbreak-1));
var convoluted=string_length(mapred)+1+string_length(mapgreen)+1+1;
var mapblue=(string_copy(mapbgcode,convoluted,string_length(mapbgcode)-convoluted));
mapbgcolour=make_colour_rgb(real(mapred),real(mapgreen),real(mapblue));
where:
"yourdatamap" is your decoded json,
"mapbgcolour" is the key for the saved colour value (a string of a #,#,# - where each number can be 0 to 255)
and the name of the variable with the final colour code.
Good grief.
 

chance

predictably random
Forum Staff
Moderator
So until GM:S supports just dropping in hexcodes for colours like everybody else in the world
Not sure what you mean. GML accepts hex colors with the "$" prefix. But the order is blue-green-red. Maybe that's what you mean by not accepting conventional hexcodes.

Either way, your script to parse comma-separated triplets could be useful for someone. It's simple, but it seems to work correctly (as long as the input format is correct).
 
K

KH-SOS

Guest
So you enter the rgb code by giving blue then green then red?!?!?

make_colour_rgb=$FF8000 (to get orange) really should be a thing. Who on earth figures an RGB number should be blue value first???
 

Mercerenies

Member
make_colour_rgb=$FF8000 (to get orange) really should be a thing. Who on earth figures an RGB number should be blue value first???
Microsoft. GM conforms to Microsoft's way of doing things because it used to be a Windows-only export software. Yes, it's absurd, but it's not actually YYG's fault.

Also, if you're storing color codes in JSON, you should be using lists, so you can just list the RGB values out in a JSON list. That argument doesn't apply for INI, which is where your script would be most useful.
 
Top