GMLscripts.com

Discuss and collaborate on GML scripts
Invert

You are not logged in.

#1 2008-02-13 02:27:46

atarian
Member
Registered: 2008-01-07
Posts: 9

6 sprite_change_scripts

now , just to start out with these scripts are horrendously slow around 1 SECOND per 32*32 area, now i believe that there would be a faster way using surfaces but at the moment my slow computer can't handle any surfaces of any size

Expand#define sprite_add_hue
/*sprite_add_hue(sprite,hue)
**
**     Uses :
**  To change how a sprite looks while the game is running
**
**    Arguments :
**  sprite : the sprite that is going to be edited
**  hue : the hue to add to the sprite
**
**   Returns :
**  The newly created sprite's index
**
**   Notes : 
**  only sprites with one subimg can be used
**  very slow
*/
var spr,hue,prec,pre,q,tra,smo,xori,yori,wid,hie,e;
spr = argument0
hue = argument1
prec = sprite_get_precise(spr)
pre = sprite_get_preload(spr)
tra = sprite_get_transparent(spr)
smo = sprite_get_smooth(spr)
xori = sprite_get_xoffset(spr)
yori = sprite_get_yoffset(spr)
wid = sprite_get_width(spr)
hie = sprite_get_height(spr)
e = sprite_create_from_screen(0,0,wid,hie,false,false,false,true,0,0)
draw_rectangle_color(0,0,wid,hie,32896,32896,32896,32896,false)
draw_sprite(spr,0,xori,yori)
for (i = 0;i<wid;i+=1)
{
for (ii = 0;ii<hie;ii+=1)
{
q = draw_getpixel(i,ii)
draw_point_color(i,ii,make_color_hsv(color_get_hue(q)+hue,color_get_saturation(q),color_get_value(q)))
}
}
return sprite_create_from_screen(0,0,wid,hie,prec,tra,smo,pre,xori,yori)
draw_sprite(e,0,0,0)
#define sprite_add_value
/*sprite_add_value(sprite,val)
**
**     Uses :
**  To change how a sprite looks while the game is running
**
**    Arguments :
**  sprite : the sprite that is going to be edited
**  val : the value to add to the sprite
**
**   Returns :
**  The newly created sprite's index
**
**   Notes : 
**  only sprites with one subimg can be used
**  very slow
*/
var spr,val,prec,pre,q,tra,smo,xori,yori,wid,hie,e;
spr = argument0
val = argument1
prec = sprite_get_precise(spr)
pre = sprite_get_preload(spr)
tra = sprite_get_transparent(spr)
smo = sprite_get_smooth(spr)
xori = sprite_get_xoffset(spr)
yori = sprite_get_yoffset(spr)
wid = sprite_get_width(spr)
hie = sprite_get_height(spr)
e = sprite_create_from_screen(0,0,wid,hie,false,false,false,true,0,0)
draw_rectangle_color(0,0,wid,hie,32896,32896,32896,32896,false)
draw_sprite(spr,0,xori,yori)
for (i = 0;i<wid;i+=1)
{
for (ii = 0;ii<hie;ii+=1)
{
q = draw_getpixel(i,ii)
draw_point_color(i,ii,make_color_hsv(color_get_hue(q),color_get_saturation(q),color_get_value(q)+val))
}
}
return sprite_create_from_screen(0,0,wid,hie,prec,tra,smo,pre,xori,yori)
draw_sprite(e,0,0,0)
#define sprite_add_saturation
/*sprite_add_saturation(sprite,sat)
**
**     Uses :
**  To change how a sprite looks while the game is running
**
**    Arguments :
**  sprite : the sprite that is going to be edited
**  sat : the saturation to add to the sprite
**
**   Returns :
**  The newly created sprite's index
**
**   Notes : 
**  only sprites with one subimg can be used
**  very slow
*/
var spr,sat,prec,pre,q,tra,smo,xori,yori,wid,hie,e;
spr = argument0
sat = argument1
prec = sprite_get_precise(spr)
pre = sprite_get_preload(spr)
tra = sprite_get_transparent(spr)
smo = sprite_get_smooth(spr)
xori = sprite_get_xoffset(spr)
yori = sprite_get_yoffset(spr)
wid = sprite_get_width(spr)
hie = sprite_get_height(spr)
e = sprite_create_from_screen(0,0,wid,hie,false,false,false,true,0,0)
draw_rectangle_color(0,0,wid,hie,32896,32896,32896,32896,false)
draw_sprite(spr,0,xori,yori)
for (i = 0;i<wid;i+=1)
{
for (ii = 0;ii<hie;ii+=1)
{
q = draw_getpixel(i,ii)
draw_point_color(i,ii,make_color_hsv(color_get_hue(q),color_get_saturation(q)+sat,color_get_value(q)))
}
}
return sprite_create_from_screen(0,0,wid,hie,prec,tra,smo,pre,xori,yori)
draw_sprite(e,0,0,0)
Expand#define sprite_set_hue
/*sprite_set_hue(sprite,hue)
**
**     Uses :
**  To change how a sprite looks while the game is running
**
**    Arguments :
**  sprite : the sprite that is going to be edited
**  hue : the hue to set the sprite to
**
**   Returns :
**  The newly created sprite's index
**
**   Notes : 
**  only sprites with one subimg can be used
**  very slow
*/
var spr,hue,prec,pre,q,tra,smo,xori,yori,wid,hie,e;
spr = argument0
hue = argument1
prec = sprite_get_precise(spr)
pre = sprite_get_preload(spr)
tra = sprite_get_transparent(spr)
smo = sprite_get_smooth(spr)
xori = sprite_get_xoffset(spr)
yori = sprite_get_yoffset(spr)
wid = sprite_get_width(spr)
hie = sprite_get_height(spr)
e = sprite_create_from_screen(0,0,wid,hie,false,false,false,true,0,0)
draw_rectangle_color(0,0,wid,hie,32896,32896,32896,32896,false)
draw_sprite(spr,0,xori,yori)
for (i = 0;i<wid;i+=1)
{
    for (ii = 0;ii<hie;ii+=1)
    {
        q = draw_getpixel(i,ii)
        draw_point_color(i,ii,make_color_hsv(hue,color_get_saturation(q),color_get_value(q)))
    }
}
return sprite_create_from_screen(0,0,wid,hie,prec,tra,smo,pre,xori,yori)
draw_sprite(e,0,0,0)
#define sprite_set_saturation
/*sprite_set_saturation(sprite,sat)
**
**     Uses :
**  To change how a sprite looks while the game is running
**
**    Arguments :
**  sprite : the sprite that is going to be edited
**  sat : the saturation to set the sprite to
**
**   Returns :
**  The newly created sprite's index
**
**   Notes : 
**  only sprites with one subimg can be used
**  very slow
*/
var spr,sat,prec,pre,q,tra,smo,xori,yori,wid,hie,e;
spr = argument0
sat = argument1
prec = sprite_get_precise(spr)
pre = sprite_get_preload(spr)
tra = sprite_get_transparent(spr)
smo = sprite_get_smooth(spr)
xori = sprite_get_xoffset(spr)
yori = sprite_get_yoffset(spr)
wid = sprite_get_width(spr)
hie = sprite_get_height(spr)
e = sprite_create_from_screen(0,0,wid,hie,false,false,false,true,0,0)
draw_rectangle_color(0,0,wid,hie,32896,32896,32896,32896,false)
draw_sprite(spr,0,xori,yori)
for (i = 0;i<wid;i+=1)
{
    for (ii = 0;ii<hie;ii+=1)
    {
        q = draw_getpixel(i,ii)
        draw_point_color(i,ii,make_color_hsv(color_get_hue(q),sat,color_get_value(q)))
    }
}
return sprite_create_from_screen(0,0,wid,hie,prec,tra,smo,pre,xori,yori)
draw_sprite(e,0,0,0)
#define sprite_set_value
/*sprite_set_value(sprite,val)
**
**     Uses :
**  To change how a sprite looks while the game is running
**
**    Arguments :
**  sprite : the sprite that is going to be edited
**  val : the value to set the sprite to
**
**   Returns :
**  The newly created sprite's index
**
**   Notes : 
**  only sprites with one subimg can be used
**  very slow
*/
var spr,val,prec,pre,q,tra,smo,xori,yori,wid,hie,e;
spr = argument0
val = argument1
prec = sprite_get_precise(spr)
pre = sprite_get_preload(spr)
tra = sprite_get_transparent(spr)
smo = sprite_get_smooth(spr)
xori = sprite_get_xoffset(spr)
yori = sprite_get_yoffset(spr)
wid = sprite_get_width(spr)
hie = sprite_get_height(spr)
e = sprite_create_from_screen(0,0,wid,hie,false,false,false,true,0,0)
draw_rectangle_color(0,0,wid,hie,32896,32896,32896,32896,false)
draw_sprite(spr,0,xori,yori)
for (i = 0;i<wid;i+=1)
{
for (ii = 0;ii<hie;ii+=1)
{
q = draw_getpixel(i,ii)
draw_point_color(i,ii,make_color_hsv(color_get_hue(q),color_get_saturation(q),val))
}
}
return sprite_create_from_screen(0,0,wid,hie,prec,tra,smo,pre,xori,yori)
draw_sprite(e,0,0,0)

there they are please tell me what you think

Offline

#2 2008-02-13 06:16:58

xot
Administrator
Registered: 2007-08-18
Posts: 1,240

Re: 6 sprite_change_scripts

I don't know about these. I think they are good ideas for scripts, but they need a lot of work. Obviously they are extremely slow. They also don't yet handle sprites with more than one subimage. I think it is possible to speed them up tremendously with some blending tricks instead of pixel-by-pixel changes. They may not produce 100% the same result, but I think they'll be pretty close. I haven't test these yet, so I'm not certain how close it is possible to get.


Abusing forum power since 1986.

Offline

#3 2009-07-22 19:51:33

ze1
Member
Registered: 2009-07-22
Posts: 1

Re: 6 sprite_change_scripts

I hope you can improve this script, fixing the subimage and speed problems, because this is exactly whan I've been looking for.

Offline

#4 2009-07-23 01:00:14

xot
Administrator
Registered: 2007-08-18
Posts: 1,240

Re: 6 sprite_change_scripts

brac37 created some scripts for doing HSV operations. They require a small amount of processing time to get started, but after that, they are extremely fast. Check this topic:
http://gmc.yoyogames.com/index.php?showtopic=377844


Abusing forum power since 1986.

Offline

Board footer

Powered by FluxBB