hola, hace poco he analizado un script que trata de reemplazar un color RGB por otro, en un sprite y he preguntado en el foro... pero ahora pude colocarlo en el gm8, funciona ahora, pero el surface se ve un poco mas ancho que el sprite y hace que el sprite se vea muy mal.
en la forma en que el script funciona en gm7 el sprite se ve bien pero en gm8 se ve mal talvez por mi adaptacion que hice en el codigo.
el codigo de gm7 es asi
{
var sprite,oldc,newc;
sprite = argument0;
oldc = argument1;
newc = argument2;
var w,h,n,p,s,l,xo,yo,surf,i,tempsprite,newsprite,alphasprite;
w = sprite_get_width(sprite);
h = sprite_get_height(sprite);
n = sprite_get_number(sprite);
p = sprite_get_precise(sprite);
s = sprite_get_smooth(sprite);
l = sprite_get_preload(sprite);
xo = sprite_get_xoffset(sprite);
yo = sprite_get_yoffset(sprite);
surf = surface_create(w,h+1);
if (surf < 0) return -1;
surface_set_target(surf);
for (i=0; i<n; i+=1) {
draw_clear_alpha(c_black,1);
draw_set_blend_mode_ext(bm_inv_dest_color,bm_one);
draw_sprite(sprite,i,xo,yo);
draw_set_blend_mode(bm_normal);
draw_point_color(0,h,oldc);
tempsprite = sprite_create_from_surface(surf,0,0,w,h+1,p,true,s,l,xo,yo);
draw_clear_alpha(newc,1);
draw_sprite(tempsprite,0,xo,yo);
sprite_delete(tempsprite);
if (i == 0) {
newsprite = sprite_create_from_surface(surf,0,0,w,h,p,0,s,l,xo,yo);
if (newsprite < 0) {
surface_free(surf);
return -1;
}
}else{
sprite_add_from_surface(newsprite,surf,0,0,w,h);
}
draw_clear_alpha(c_white,1);
draw_set_blend_mode_ext(bm_zero,bm_src_alpha);
draw_sprite(sprite,i,xo,yo);
if (i == 0) {
alphasprite = sprite_create_from_surface(surf,0,0,w,h,p,0,s,l,xo,yo);
if (alphasprite < 0) {
sprite_delete(newsprite);
surface_free(surf);
return -1;
}
}else{
sprite_add_from_surface(alphasprite,surf,0,0,w,h);
}
draw_set_blend_mode(bm_normal);
}
surface_reset_target();
sprite_assign(sprite,newsprite);
sprite_set_alpha_from_sprite(sprite,alphasprite);
sprite_delete(newsprite);
sprite_delete(alphasprite);
surface_free(surf);
}
y en el gm8 lo edit? y es
{
var sprite,oldc,newc;
sprite = argument0;
oldc = argument1;
newc = argument2;
var w,h,n,p,s,xo,yo,surf,i,tempsprite,newsprite,alphasprite;
w = sprite_get_width(sprite);
h = sprite_get_height(sprite);
n = sprite_get_number(sprite);
p = 1;
s = 0;
xo = sprite_get_xoffset(sprite);
yo = sprite_get_yoffset(sprite);
surf = surface_create(w,h+1);
if (surf < 0) return -1;
surface_set_target(surf);
for (i=0; i<n; i+=1) {
draw_clear_alpha(c_black,1);
draw_set_blend_mode_ext(bm_inv_dest_color,bm_one);
draw_sprite(sprite,i,xo,yo);
draw_set_blend_mode(bm_normal);
draw_point_color(0,h,oldc);
tempsprite = sprite_create_from_surface(surf,0,0,w,h+1,p,s,xo,yo);
draw_clear_alpha(newc,1);
draw_sprite(tempsprite,0,xo,yo);
sprite_delete(tempsprite);
if (i == 0) {
newsprite = sprite_create_from_surface(surf,0,0,w,h,p,s,xo,yo);
if (newsprite < 0) {
surface_free(surf);
return -1;
}
}else{
sprite_add_from_surface(newsprite,surf,0,0,w,h,p,s);
}
draw_clear_alpha(c_white,1);
draw_set_blend_mode_ext(bm_zero,bm_src_alpha);
draw_sprite(sprite,i,xo,yo);
if (i == 0) {
alphasprite = sprite_create_from_surface(surf,0,0,w,h,p,s,xo,yo);
if (alphasprite < 0) {
sprite_delete(newsprite);
surface_free(surf);
return -1;
}
}else{
sprite_add_from_surface(alphasprite,surf,0,0,w,h,p,s);
}
draw_set_blend_mode(bm_normal);
}
surface_reset_target();
sprite_assign(sprite,newsprite);
sprite_set_alpha_from_sprite(sprite,alphasprite);
sprite_delete(newsprite);
sprite_delete(alphasprite);
surface_free(surf);
}
las diferencias son notables, habr? alguna forma de hacer que el surface que se dibuja en el reemplazo de color sea menos ancho?