* Add lua stuff to write to spare page
* Use it in Tiler to put the tilemap in the spare. git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1834 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
6e30a87f4c
commit
22d3f19df3
@ -14,29 +14,28 @@
|
|||||||
|
|
||||||
-- Grid size
|
-- Grid size
|
||||||
-- TODO : get it from GrafX2
|
-- TODO : get it from GrafX2
|
||||||
xgrid = 8;
|
xgrid = 17;
|
||||||
ygrid = 16;
|
ygrid = 17;
|
||||||
|
|
||||||
-- picture size
|
-- picture size
|
||||||
w, h = getsparepicturesize();
|
w, h = getpicturesize();
|
||||||
|
|
||||||
-- We may need less if there are duplicates
|
-- We may need less if there are duplicates
|
||||||
setpicturesize(xgrid, w*h/xgrid);
|
setsparepicturesize(xgrid, w*h/xgrid);
|
||||||
clearpicture(255);
|
|
||||||
|
|
||||||
tileid = 0;
|
tileid = 0;
|
||||||
|
|
||||||
-- blit part of the spare to picture
|
-- blit part of the spare to picture
|
||||||
function blitsparetopicture(srcx, srcy, dstx, dsty, width, height)
|
function blitpicturetospare(srcx, srcy, dstx, dsty, width, height)
|
||||||
local x,y;
|
local x,y;
|
||||||
for y = 0, height - 1, 1 do
|
for y = 0, height - 1, 1 do
|
||||||
for x = 0, width - 1, 1 do
|
for x = 0, width - 1, 1 do
|
||||||
putpicturepixel(dstx+x, dsty+y, getsparepicturepixel(srcx + x, srcy + y));
|
putsparepicturepixel(dstx+x, dsty+y, getpicturepixel(srcx + x, srcy + y));
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function comparesparetopicture(srcx, srcy, dstx, dsty, width, height)
|
function comparesparewithpicture(srcx, srcy, dstx, dsty, width, height)
|
||||||
local x,y,color
|
local x,y,color
|
||||||
for y = 0, height - 1, 1 do
|
for y = 0, height - 1, 1 do
|
||||||
for x = 0, width - 1, 1 do
|
for x = 0, width - 1, 1 do
|
||||||
@ -58,7 +57,7 @@ function checksum(srcx, srcy, width, height)
|
|||||||
sum = 0;
|
sum = 0;
|
||||||
for y = 0, height - 1, 1 do
|
for y = 0, height - 1, 1 do
|
||||||
for x = 0, width - 1, 1 do
|
for x = 0, width - 1, 1 do
|
||||||
sum = sum + getsparepicturepixel(srcx+x, srcy+y);
|
sum = sum + getpicturepixel(srcx+x, srcy+y);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -78,7 +77,7 @@ for y = 0, h-1, ygrid do
|
|||||||
found = false;
|
found = false;
|
||||||
for id in pairs(tilemap[csum]) do
|
for id in pairs(tilemap[csum]) do
|
||||||
-- is it a match ?
|
-- is it a match ?
|
||||||
if comparesparetopicture(x,y,0,id*ygrid, xgrid, ygrid) then
|
if comparesparewithpicture(x,y,0,id*ygrid, xgrid, ygrid) then
|
||||||
-- found it !
|
-- found it !
|
||||||
tilemap[csum][id] = tilemap[csum][id] + 1;
|
tilemap[csum][id] = tilemap[csum][id] + 1;
|
||||||
found = true;
|
found = true;
|
||||||
@ -88,7 +87,7 @@ for y = 0, h-1, ygrid do
|
|||||||
-- Add tile anyway if needed
|
-- Add tile anyway if needed
|
||||||
if not found then
|
if not found then
|
||||||
desty = tileid * ygrid;
|
desty = tileid * ygrid;
|
||||||
blitsparetopicture(x, y, 0, desty, xgrid, ygrid);
|
blitpicturetospare(x, y, 0, desty, xgrid, ygrid);
|
||||||
|
|
||||||
-- add it to the tilemap
|
-- add it to the tilemap
|
||||||
tilemap[csum][tileid] = 1;
|
tilemap[csum][tileid] = 1;
|
||||||
@ -98,7 +97,7 @@ for y = 0, h-1, ygrid do
|
|||||||
else
|
else
|
||||||
-- Copy to spare
|
-- Copy to spare
|
||||||
desty = tileid * ygrid;
|
desty = tileid * ygrid;
|
||||||
blitsparetopicture(x, y, 0, desty, xgrid, ygrid);
|
blitpicturetospare(x, y, 0, desty, xgrid, ygrid);
|
||||||
|
|
||||||
-- add it to the tilemap
|
-- add it to the tilemap
|
||||||
tilemap[csum] = {}
|
tilemap[csum] = {}
|
||||||
@ -109,6 +108,5 @@ for y = 0, h-1, ygrid do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
finalizepicture(); -- resize from what we just did
|
setsparepicturesize(xgrid, (tileid-1)*ygrid)
|
||||||
setpicturesize(xgrid, (tileid-1)*ygrid)
|
--updatescreen();
|
||||||
updatescreen();
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
*/
|
*/
|
||||||
/* Grafx2 - The Ultimate 256-color bitmap paint program
|
/* Grafx2 - The Ultimate 256-color bitmap paint program
|
||||||
|
|
||||||
Copyright 2009 Adrien Destugues
|
Copyright 2009-2011 Adrien Destugues
|
||||||
|
|
||||||
Grafx2 is free software; you can redistribute it and/or
|
Grafx2 is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU General Public License
|
modify it under the terms of the GNU General Public License
|
||||||
@ -308,6 +308,33 @@ int L_SetPictureSize(lua_State* L)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int L_SetSparePictureSize(lua_State* L)
|
||||||
|
{
|
||||||
|
|
||||||
|
int w;
|
||||||
|
int h;
|
||||||
|
int nb_args=lua_gettop(L);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
LUA_ARG_LIMIT (2, "setsparepicturesize");
|
||||||
|
LUA_ARG_NUMBER(1, "setsparepicturesize", w, 1, 9999);
|
||||||
|
LUA_ARG_NUMBER(2, "setsparepicturesize", h, 1, 9999);
|
||||||
|
|
||||||
|
Backup_and_resize_the_spare(w, h);
|
||||||
|
// part of Resize_image() : the pixel copy part.
|
||||||
|
for (i=0; i<Spare_backups->Pages->Nb_layers; i++)
|
||||||
|
{
|
||||||
|
Copy_part_of_image_to_another(
|
||||||
|
Spare_backups->Pages->Next->Image[i],0,0,Min(Spare_backups->Pages->Next->Width,Spare_image_width),
|
||||||
|
Min(Spare_backups->Pages->Next->Height,Spare_image_height),Spare_backups->Pages->Next->Width,
|
||||||
|
Spare_backups->Pages->Image[i],0,0,Spare_image_width);
|
||||||
|
}
|
||||||
|
Redraw_spare_image();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int L_GetPictureSize(lua_State* L)
|
int L_GetPictureSize(lua_State* L)
|
||||||
{
|
{
|
||||||
lua_pushinteger(L, Main_image_width);
|
lua_pushinteger(L, Main_image_width);
|
||||||
@ -355,6 +382,29 @@ int L_PutPicturePixel(lua_State* L)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int L_PutSparePicturePixel(lua_State* L)
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int c;
|
||||||
|
int nb_args=lua_gettop(L);
|
||||||
|
|
||||||
|
LUA_ARG_LIMIT (3, "putsparepicturepixel");
|
||||||
|
LUA_ARG_NUMBER(1, "putsparepicturepixel", x, INT_MIN, INT_MAX);
|
||||||
|
LUA_ARG_NUMBER(2, "putsparepicturepixel", y, INT_MIN, INT_MAX);
|
||||||
|
LUA_ARG_NUMBER(3, "putsparepicturepixel", c, INT_MIN, INT_MAX);
|
||||||
|
|
||||||
|
// Bound check
|
||||||
|
if (x<0 || y<0 || x>=Spare_image_width || y>=Spare_image_height)
|
||||||
|
{
|
||||||
|
// Silently ignored
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Pixel_in_spare(x, y, c);
|
||||||
|
return 0; // no values returned for lua
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int L_DrawLine(lua_State* L)
|
int L_DrawLine(lua_State* L)
|
||||||
{
|
{
|
||||||
int x1, y1, x2, y2, c;
|
int x1, y1, x2, y2, c;
|
||||||
@ -1292,6 +1342,19 @@ int L_StatusMessage(lua_State* L)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int L_SelectLayer(lua_State* L)
|
||||||
|
{
|
||||||
|
int nb_args=lua_gettop(L);
|
||||||
|
|
||||||
|
LUA_ARG_LIMIT (1, "selectlayer");
|
||||||
|
LUA_ARG_NUMBER(1, "selectlayer", Main_current_layer, 0, Main_backups->Pages->Nb_layers - 1);
|
||||||
|
|
||||||
|
// TODO create layer if it doesn't exist yet ?
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int L_FinalizePicture(lua_State* L)
|
int L_FinalizePicture(lua_State* L)
|
||||||
{
|
{
|
||||||
int nb_args=lua_gettop(L);
|
int nb_args=lua_gettop(L);
|
||||||
@ -1529,6 +1592,7 @@ void Run_script(const char *script_subdirectory, const char *script_filename)
|
|||||||
// Drawing
|
// Drawing
|
||||||
lua_register(L,"putbrushpixel",L_PutBrushPixel);
|
lua_register(L,"putbrushpixel",L_PutBrushPixel);
|
||||||
lua_register(L,"putpicturepixel",L_PutPicturePixel);
|
lua_register(L,"putpicturepixel",L_PutPicturePixel);
|
||||||
|
lua_register(L,"putsparepicturepixel",L_PutSparePicturePixel);
|
||||||
lua_register(L, "drawline",L_DrawLine);
|
lua_register(L, "drawline",L_DrawLine);
|
||||||
lua_register(L, "drawfilledrect",L_DrawFilledRect);
|
lua_register(L, "drawfilledrect",L_DrawFilledRect);
|
||||||
lua_register(L, "drawcircle",L_DrawCircle);
|
lua_register(L, "drawcircle",L_DrawCircle);
|
||||||
@ -1547,6 +1611,7 @@ void Run_script(const char *script_subdirectory, const char *script_filename)
|
|||||||
// Sizes
|
// Sizes
|
||||||
lua_register(L,"setbrushsize",L_SetBrushSize);
|
lua_register(L,"setbrushsize",L_SetBrushSize);
|
||||||
lua_register(L,"setpicturesize",L_SetPictureSize);
|
lua_register(L,"setpicturesize",L_SetPictureSize);
|
||||||
|
lua_register(L,"setsparepicturesize",L_SetSparePictureSize);
|
||||||
|
|
||||||
lua_register(L,"getbrushsize",L_GetBrushSize);
|
lua_register(L,"getbrushsize",L_GetBrushSize);
|
||||||
lua_register(L,"getpicturesize",L_GetPictureSize);
|
lua_register(L,"getpicturesize",L_GetPictureSize);
|
||||||
@ -1582,6 +1647,7 @@ void Run_script(const char *script_subdirectory, const char *script_filename)
|
|||||||
lua_register(L,"updatescreen",L_UpdateScreen);
|
lua_register(L,"updatescreen",L_UpdateScreen);
|
||||||
lua_register(L,"finalizepicture",L_FinalizePicture);
|
lua_register(L,"finalizepicture",L_FinalizePicture);
|
||||||
lua_register(L,"getfilename",L_GetFileName);
|
lua_register(L,"getfilename",L_GetFileName);
|
||||||
|
lua_register(L,"selectlayer",L_SelectLayer);
|
||||||
|
|
||||||
// Load all standard libraries
|
// Load all standard libraries
|
||||||
luaL_openlibs(L);
|
luaL_openlibs(L);
|
||||||
@ -1602,6 +1668,7 @@ void Run_script(const char *script_subdirectory, const char *script_filename)
|
|||||||
// The backup also allows the script to read from it to make something
|
// The backup also allows the script to read from it to make something
|
||||||
// like a feedback off effect (convolution matrix comes to mind).
|
// like a feedback off effect (convolution matrix comes to mind).
|
||||||
Backup();
|
Backup();
|
||||||
|
Backup_the_spare(-1);
|
||||||
|
|
||||||
Palette_has_changed=0;
|
Palette_has_changed=0;
|
||||||
Brush_was_altered=0;
|
Brush_was_altered=0;
|
||||||
|
|||||||
@ -3067,6 +3067,10 @@ void Pixel_in_current_screen (word x,word y,byte color,int with_preview)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Pixel_in_spare(word x,word y, byte color)
|
||||||
|
{
|
||||||
|
*((y)*Spare_image_width+(x)+Spare_backups->Pages->Image[Spare_current_layer])=color;
|
||||||
|
}
|
||||||
|
|
||||||
void Pixel_in_current_layer(word x,word y, byte color)
|
void Pixel_in_current_layer(word x,word y, byte color)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -121,6 +121,7 @@ void Update_part_of_screen(short x, short y, short width, short height);
|
|||||||
void Redraw_grid(short x, short y, unsigned short w, unsigned short h);
|
void Redraw_grid(short x, short y, unsigned short w, unsigned short h);
|
||||||
|
|
||||||
void Pixel_in_current_screen (word x,word y,byte color,int with_preview);
|
void Pixel_in_current_screen (word x,word y,byte color,int with_preview);
|
||||||
|
void Pixel_in_spare(word x,word y, byte color);
|
||||||
void Pixel_in_current_layer(word x,word y, byte color);
|
void Pixel_in_current_layer(word x,word y, byte color);
|
||||||
byte Read_pixel_from_current_screen (word x,word y);
|
byte Read_pixel_from_current_screen (word x,word y);
|
||||||
byte Read_pixel_from_current_layer(word x,word y);
|
byte Read_pixel_from_current_layer(word x,word y);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user