//background to use as palette
var _background_palette = argument0;
//background to convert
var _background_to_convert = argument1;
//the row (palette) you used to draw your image
//first row is zero, last row is 255.
var _palette_row = argument2;
//load palette colors for this row
///////////////////////////////////////////////////////////////
var _w = background_get_width(_background_palette);
var _h = background_get_height(_background_palette);
var _surf = surface_create(_w,_h);
surface_set_target(_surf);
draw_background(_background_palette,0,0);
surface_reset_target();
var _buff = buffer_create(4 * _w * _h, buffer_fast, 1);
buffer_get_surface(_buff,_surf,0,0,0);
var _palette_map = ds_map_create();
buffer_seek(_buff,buffer_seek_start,4 * _w * _palette_row);
var _b, _g, _r, _a;
for (var i = 0; i < _w; i++)
{
_b = buffer_read(_buff,buffer_u8);
_g = buffer_read(_buff,buffer_u8);
_r = buffer_read(_buff,buffer_u8);
ds_map_add(_palette_map, (_b << 16) + (_g << 8) + _r, i);
buffer_read(_buff,buffer_u8);
}
surface_free(_surf);
buffer_delete(_buff);
///////////////////////////////////////////////////////////////
//convert background
///////////////////////////////////////////////////////////////
var _w = background_get_width(_background_to_convert);
var _h = background_get_height(_background_to_convert);
var _surf = surface_create(_w,_h);
surface_set_target(_surf);
draw_background(_background_to_convert,0,0);
surface_reset_target();
var _buff_size = _w * _h;
var _buff = buffer_create(4 * _buff_size, buffer_fixed, 1);
var _buff2 = buffer_create(4 * _buff_size, buffer_fixed, 1);
buffer_get_surface(_buff,_surf,0,0,0);
buffer_seek(_buff,buffer_seek_start,0);
buffer_seek(_buff2,buffer_seek_start,0);
var _index, _brightness;
for (var i = 0; i < _buff_size; i++)
{
_b = buffer_read(_buff,buffer_u8);
_g = buffer_read(_buff,buffer_u8);
_r = buffer_read(_buff,buffer_u8);
_a = buffer_read(_buff,buffer_u8);
_index = ds_map_find_value(_palette_map, (_b << 16) + (_g << 8) + _r);
_brightness = (0.114*_b + 0.587*_g + 0.299*_r);
if (is_undefined(_index)) { _index = 0; }
buffer_write(_buff2,buffer_u8,_index);
buffer_write(_buff2,buffer_u8,_brightness);
buffer_write(_buff2,buffer_u8,_brightness);
buffer_write(_buff2,buffer_u8,_a);
}
buffer_set_surface(_buff2,_surf,0,0,0);
///////////////////////////////////////////////////////////////
//save new image as png
var _file_name = background_get_name(_background_to_convert) + ".png";
surface_save(_surf,_file_name);
//create a sprite out of the new image
converted_image = sprite_create_from_surface(_surf,0,0,_w,_h,0,0,0,0);
///////////////////////////////////////////////////////////////
//clean-up
///////////////////////////////////////////////////////////////
surface_free(_surf);
buffer_delete(_buff);
buffer_delete(_buff2);
ds_map_destroy(_palette_map);
///////////////////////////////////////////////////////////////