summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCracker64 <cracker642@gmail.com>2010-12-23 20:46:06 (GMT)
committer Cracker64 <cracker642@gmail.com>2010-12-23 20:46:06 (GMT)
commitff1255afd2883c6fb9ba124cd622fb2d94453a47 (patch)
tree67aef58688259376e78c0f9d9ba87d27a6df2427 /src
parent321c57058105a473b59e858c67cfa878a6e20d41 (diff)
downloadpowder-ff1255afd2883c6fb9ba124cd622fb2d94453a47.zip
powder-ff1255afd2883c6fb9ba124cd622fb2d94453a47.tar.gz
a fix for 1 pixel brush and flood fill crashing in certain builds.
Diffstat (limited to 'src')
-rw-r--r--src/powder.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/powder.c b/src/powder.c
index 4b03e5b..19320df 100644
--- a/src/powder.c
+++ b/src/powder.c
@@ -5591,6 +5591,8 @@ int flood_parts(int x, int y, int c, int cm, int bm)
{
int x1, x2, dy = (c<PT_NUM)?1:CELL;
int co = c;
+ if(y>YRES||y<0)
+ return 0;
if(cm==PT_INST&&co==PT_SPRK)
if((pmap[y][x]&0xFF)==PT_SPRK)
return 0;
@@ -5775,6 +5777,11 @@ int create_parts(int x, int y, int rx, int ry, int c)
if(((sdl_mod & (KMOD_LALT) && sdl_mod & (KMOD_SHIFT))|| sdl_mod & (KMOD_CAPS) )&& !REPLACE_MODE)
{
+ if(rx==0&&ry==0)
+ {
+ delete_part(x, y);
+ }
+ else
for(j=-ry; j<=ry; j++)
for(i=-rx; i<=rx; i++)
if((CURRENT_BRUSH==CIRCLE_BRUSH && (pow(i,2))/(pow(rx,2))+(pow(j,2))/(pow(ry,2))<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx))
@@ -5784,6 +5791,11 @@ int create_parts(int x, int y, int rx, int ry, int c)
if(c == SPC_AIR || c == SPC_HEAT || c == SPC_COOL || c == SPC_VACUUM)
{
+ if(rx==0&&ry==0)
+ {
+ create_part(-2, x, y, c);
+ }
+ else
for(j=-ry; j<=ry; j++)
for(i=-rx; i<=rx; i++)
if((CURRENT_BRUSH==CIRCLE_BRUSH && (pow(i,2))/(pow(rx,2))+(pow(j,2))/(pow(ry,2))<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx))
@@ -5798,6 +5810,11 @@ int create_parts(int x, int y, int rx, int ry, int c)
{
stemp = SLALT;
SLALT = 0;
+ if(rx==0&&ry==0)
+ {
+ delete_part(x, y);
+ }
+ else
for(j=-ry; j<=ry; j++)
for(i=-rx; i<=rx; i++)
if((CURRENT_BRUSH==CIRCLE_BRUSH && (pow(i,2))/(pow(rx,2))+(pow(j,2))/(pow(ry,2))<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx))
@@ -5807,6 +5824,11 @@ int create_parts(int x, int y, int rx, int ry, int c)
}
if(REPLACE_MODE)
{
+ if(rx==0&&ry==0)
+ {
+ create_part(-2, x, y, c);
+ }
+ else
for(j=-ry; j<=ry; j++)
for(i=-rx; i<=rx; i++)
if((CURRENT_BRUSH==CIRCLE_BRUSH && (pow(i,2))/(pow(rx,2))+(pow(j,2))/(pow(ry,2))<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx))
@@ -5823,6 +5845,11 @@ int create_parts(int x, int y, int rx, int ry, int c)
return 1;
}
+ if(rx==0&&ry==0)//workaround for 1pixel brush/floodfill crashing. todo: find a better fix later.
+ {
+ create_part(-2, x, y, c);
+ }
+ else
for(j=-ry; j<=ry; j++)
for(i=-rx; i<=rx; i++)
if((CURRENT_BRUSH==CIRCLE_BRUSH && (pow(i,2))/(pow(rx,2))+(pow(j,2))/(pow(ry,2))<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx))