function isPaletteFile(path) { var ext = string_lower(filename_ext(path)); switch(ext) { case ".hex" : case ".gpl" : case ".pal" : case ".png" : return true; } return false; } function loadPalette(path) { if(!file_exists_empty(path)) return []; if(!isPaletteFile(path)) return []; var ext = string_lower(filename_ext(path)); if(ext == ".png") { var _spr = sprite_add(path, 1, 0, 0, 0, 0); var _sw = sprite_get_width(_spr); var _sh = sprite_get_height(_spr); var _s = surface_create(_sw, _sh); surface_set_target(_s); draw_clear_alpha(0, 0); BLEND_OVERRIDE draw_sprite(_spr, 0, 0, 0); BLEND_NORMAL surface_reset_target(); var pal = array_create(_sw * _sh); for( var i = 0; i < _sh; i++ ) for( var j = 0; j < _sw; j++ ) pal[i * _sh + j] = cola(surface_getpixel(_s, j, i)); surface_free(_s); return pal; } var pal = []; var _t = file_text_open_read(path); var _index = 0; while(!file_text_eof(_t)) { var _w = file_text_readln(_t); _w = string_trim(_w); _w = string_replace_all(_w, "\t", " "); if(_w == "") continue; switch(ext) { case ".hex" : var _r = string_hexadecimal(string_copy(_w, 1, 2)); var _g = string_hexadecimal(string_copy(_w, 3, 2)); var _b = string_hexadecimal(string_copy(_w, 5, 2)); var _a = string_length(_w) > 6? string_hexadecimal(string_copy(_w, 7, 2)) : 255; pal[_index++] = make_color_rgba(_r, _g, _b, _a); break; case ".gpl" : case ".pal" : if(string_char_at(_w, 1) == "#") break; var _c = string_splice(_w, " ", false); _c = array_filter(_c, function(s) { return s != ""; }); if(array_length(_c) == 3) pal[_index++] = make_color_rgba(toNumber(_c[0]), toNumber(_c[1]), toNumber(_c[2]), 255); else if(array_length(_c) >= 4) pal[_index++] = make_color_rgba(toNumber(_c[0]), toNumber(_c[1]), toNumber(_c[2]), toNumber(_c[3])); break; } } file_text_close(_t); return pal; } globalvar PALETTES, PALETTE_LOSPEC; PALETTES = []; PALETTE_LOSPEC = 0; function __initPalette() { PALETTES = []; var path = DIRECTORY + "Palettes/" var file = file_find_first(path + "*", 0); while(file != "") { if(isPaletteFile(file)) { array_push(PALETTES, { name: filename_name_only(file), path: path + file, palette: loadPalette(path + file) }); } file = file_find_next(); } file_find_close(); } function palette_string_hex(palette, alpha = true) { //palette generate var _str = ""; for (var i = 0, n = array_length(palette); i < n; i++) { var _c = palette[i]; _str += $"{color_get_hex(_c, alpha)}\n"; } return _str; }