diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2011-07-12 21:03:01 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2011-07-12 21:03:01 (GMT) |
| commit | 68f2310d2d87ada306bd9e506394b3a958c0227e (patch) | |
| tree | 44aa22cb9a9dfd812cfa59cdc55c39aa66b7101b /src | |
| parent | 02848f9e0c278893a4613b5c28df1c4031c795fe (diff) | |
| download | powder-68f2310d2d87ada306bd9e506394b3a958c0227e.zip powder-68f2310d2d87ada306bd9e506394b3a958c0227e.tar.gz | |
Allow flood_parts to cope with Life types
Diffstat (limited to 'src')
| -rw-r--r-- | src/powder.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/powder.c b/src/powder.c index f83c790..154fbf2 100644 --- a/src/powder.c +++ b/src/powder.c @@ -2483,8 +2483,9 @@ void create_box(int x1, int y1, int x2, int y2, int c) create_parts(i, j, 0, 0, c); } -int flood_parts(int x, int y, int c, int cm, int bm) +int flood_parts(int x, int y, int fullc, int cm, int bm) { + int c = fullc&0xFF; int x1, x2, dy = (c<PT_NUM)?1:CELL; int co = c; if (cm==PT_INST&&co==PT_SPRK) @@ -2544,10 +2545,10 @@ int flood_parts(int x, int y, int c, int cm, int bm) { if (cm==PT_INST&&co==PT_SPRK) { - if (create_part(-1,x, y, co)==-1) + if (create_part(-1,x, y, fullc)==-1) return 0; } - else if (!create_parts(x, y, 0, 0, co)) + else if (!create_parts(x, y, 0, 0, fullc)) return 0; } // fill children @@ -2556,7 +2557,7 @@ int flood_parts(int x, int y, int c, int cm, int bm) if (y>=CELL+dy && x1==x2 && ((pmap[y-1][x1-1]&0xFF)==PT_INST||(pmap[y-1][x1-1]&0xFF)==PT_SPRK) && ((pmap[y-1][x1]&0xFF)==PT_INST||(pmap[y-1][x1]&0xFF)==PT_SPRK) && ((pmap[y-1][x1+1]&0xFF)==PT_INST || (pmap[y-1][x1+1]&0xFF)==PT_SPRK) && (pmap[y-2][x1-1]&0xFF)!=PT_INST && ((pmap[y-2][x1]&0xFF)==PT_INST ||(pmap[y-2][x1]&0xFF)==PT_SPRK) && (pmap[y-2][x1+1]&0xFF)!=PT_INST) - flood_parts(x1, y-2, co, cm, bm); + flood_parts(x1, y-2, fullc, cm, bm); else if (y>=CELL+dy) for (x=x1; x<=x2; x++) if ((pmap[y-1][x]&0xFF)!=PT_SPRK) @@ -2564,14 +2565,14 @@ int flood_parts(int x, int y, int c, int cm, int bm) if (x==x1 || x==x2 || y>=YRES-CELL-1 || (pmap[y-1][x-1]&0xFF)==PT_INST || (pmap[y-1][x+1]&0xFF)==PT_INST || (pmap[y+1][x-1]&0xFF)==PT_INST || ((pmap[y+1][x]&0xFF)!=PT_INST&&(pmap[y+1][x]&0xFF)!=PT_SPRK) || (pmap[y+1][x+1]&0xFF)==PT_INST) - flood_parts(x, y-dy, co, cm, bm); + flood_parts(x, y-dy, fullc, cm, bm); } if (y<YRES-CELL-dy && x1==x2 && ((pmap[y+1][x1-1]&0xFF)==PT_INST||(pmap[y+1][x1-1]&0xFF)==PT_SPRK) && ((pmap[y+1][x1]&0xFF)==PT_INST||(pmap[y+1][x1]&0xFF)==PT_SPRK) && ((pmap[y+1][x1+1]&0xFF)==PT_INST || (pmap[y+1][x1+1]&0xFF)==PT_SPRK) && (pmap[y+2][x1-1]&0xFF)!=PT_INST && ((pmap[y+2][x1]&0xFF)==PT_INST ||(pmap[y+2][x1]&0xFF)==PT_SPRK) && (pmap[y+2][x1+1]&0xFF)!=PT_INST) - flood_parts(x1, y+2, co, cm, bm); + flood_parts(x1, y+2, fullc, cm, bm); else if (y<YRES-CELL-dy) for (x=x1; x<=x2; x++) if ((pmap[y+1][x]&0xFF)!=PT_SPRK) @@ -2579,7 +2580,7 @@ int flood_parts(int x, int y, int c, int cm, int bm) if (x==x1 || x==x2 || y<0 || (pmap[y+1][x-1]&0xFF)==PT_INST || (pmap[y+1][x+1]&0xFF)==PT_INST || (pmap[y-1][x-1]&0xFF)==PT_INST || ((pmap[y-1][x]&0xFF)!=PT_INST&&(pmap[y-1][x]&0xFF)!=PT_SPRK) || (pmap[y-1][x+1]&0xFF)==PT_INST) - flood_parts(x, y+dy, co, cm, bm); + flood_parts(x, y+dy, fullc, cm, bm); } } @@ -2588,12 +2589,12 @@ int flood_parts(int x, int y, int c, int cm, int bm) if (y>=CELL+dy) for (x=x1; x<=x2; x++) if ((pmap[y-dy][x]&0xFF)==cm && bmap[(y-dy)/CELL][x/CELL]==bm) - if (!flood_parts(x, y-dy, co, cm, bm)) + if (!flood_parts(x, y-dy, fullc, cm, bm)) return 0; if (y<YRES-CELL-dy) for (x=x1; x<=x2; x++) if ((pmap[y+dy][x]&0xFF)==cm && bmap[(y+dy)/CELL][x/CELL]==bm) - if (!flood_parts(x, y+dy, co, cm, bm)) + if (!flood_parts(x, y+dy, fullc, cm, bm)) return 0; } if (!(cm==PT_INST&&co==PT_SPRK)) |
