I have a sprite sheet that I would rather not split up and I was wondering (because I know SDL can do it, and this is written in SDL) if there was code that could clip sprites. These sprites are 24x32 each. I was also wondering if it is possible to make the background color i gave it transparent in game. Thanks
(http://forum.bennugd.org/index.php?action=dlattach;topic=3478.0;attach=2917)
Changing the blue color to transparant is easy, if the image is in 8 bit format. simply check with a graphics program (grafx2 is good for this) what the index value of the blue color is, and then load the png file in your bennu program.
To change the color:
FOR (line_count = 0; line_count < map_info ( <INT fileID> , <INT graphID> , G_WIDTH); line_count++)
FOR (row_count = 0; row_count < map_info ( <INT fileID> , <INT graphID> , G_HEIGHT); row_count++)
IF (map_get_pixel ( <INT fileID> , <INT graphID> ,line_count , row_count ) == wahtever color value blue is))
map_put_pixel ( <INT fileID> , <INT graphID> , line_count , row_count , 0 )
END
END
END
Something like that. But you can copy parts of the map to new maps in memory, to convert the spritesheet into individual images with
map_block_copy.
You are saying of setcolorkey. Sorry. Bennu doesnot work with it.
You need do that handsource sais.
Another faster methor is open it in gimp. In layoud menu add transparen add alpha channel. With color selection tool select the blue. And finally delete the selecton and save or export in png.
And for split the images. There is some examples un this forum ti convert this king of images in a fpg in memory needed to make yours games.
can you show me an example? i saw this
http://forum.bennugd.org/index.php?topic=795.msg11387#msg11387 (http://forum.bennugd.org/index.php?topic=795.msg11387#msg11387)
and i took this code:
function create_fpg_from_tileset(string tilesetname,int num_columns,int num_rows)
private
tileset;
tile_width;
tile_height;
i,j,k;
cur_tile;
begin
tileset=load_png(tilesetname);
tile_width=graphic_info(0,tileset,g_width)/num_columns;
tile_height=graphic_info(0,tileset,g_height)/num_rows;
file = fpg_new();
cur_tile = new_map(tile_width,tile_height,profundidad);
for (j=0;j<num_rows;j++)
for (i=0;i<num_columns;i++)
k= (j*num_rows+i)+1;
map_clear(0,cur_tile,0);
map_block_copy(0,cur_tile,0,0,tileset,i*tile_width,j*tile_height,tile_width,tile_height,0);
fpg_add(file,k,0,cur_tile);
end
end
unload_map(0,cur_tile);
unload_map(0,tileset);
return file;
end
(what does profunidad mean?)
and i put it in this process
process player_sprite(x,y,)
private
//sprite information
int sprite_sheet;
int line_count = 0; //example: 32 y pixels is 32 lines
int width = 24;
int row_count = 0; //exa,ple: 24 x pixels is 24 rows
int height = 32;
int sprite[9];
begin
file = create_fpg_from_tileset("testchar.png",3,3);
sprite_sheet = load_png("testplay.png");
graph = 1;
ctype = c_scroll;
loop
//keep it alligned with the player
x = father.x;
y = father.y-(player_dim_y/4);
//sprite transparency
for (row_count = 0; row_count < width; row_count++)
for (line_count = 0; line_count < height; line_count++)
if (map_get_pixel(file,graph,row_count,line_count) == rgb(0,148,255))
map_put_pixel(file,graph,row_count,line_count,0);
end
end
end
frame;end
end
and i dont got anything
EDIT:
I changed profunidad to sprite_depth and I made it 16 and it worked :D