summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCracker64 <cracker642@gmail.com>2011-01-05 01:53:24 (GMT)
committer Cracker64 <cracker642@gmail.com>2011-01-05 01:53:24 (GMT)
commitfd2f0c905be873dc3892086850744f18c068e4be (patch)
treee29177a26251fea3de26250b4ac932b1248aee58 /src
parent5a37f32ca12a48432af5be190245d2a377005e49 (diff)
downloadpowder-fd2f0c905be873dc3892086850744f18c068e4be.zip
powder-fd2f0c905be873dc3892086850744f18c068e4be.tar.gz
better liquid movement in radial gravity, '=' resets pressure, cannot draw stickman on clone anymore, 'w' does not work when stickman2 is out, use shift-w.
Diffstat (limited to 'src')
-rw-r--r--src/graphics.c355
-rw-r--r--src/main.c17
-rw-r--r--src/powder.c4
3 files changed, 178 insertions, 198 deletions
diff --git a/src/graphics.c b/src/graphics.c
index 6e503c7..e4a4a4c 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -1478,6 +1478,163 @@ void draw_parts(pixel *vid)
cb = 0;
blendpixel(vid, nx, ny, cr, cg, cb, 255);
}
+ else if(cmode==CM_FANCY)
+ {
+ if(ptypes[parts[i].type].properties&TYPE_LIQUID)
+ {
+ if(parts[i].type==PT_DEUT)
+ {
+ cr = PIXR(ptypes[t].pcolors) + parts[i].life*1;
+ cg = PIXG(ptypes[t].pcolors) + parts[i].life*2;
+ cb = PIXB(ptypes[t].pcolors) + parts[i].life*4;
+ if(cr>=255)
+ cr = 255;
+ if(cg>=255)
+ cg = 255;
+ if(cb>=255)
+ cb = 255;
+ blendpixel(vid, nx, ny, cr, cg, cb, 255);
+ for(x=-1; x<=1; x++)
+ {
+ for(y=-1; y<=1; y++)
+ {
+ if ((abs(x) == 0) && (abs(y) == 0))
+ blendpixel(vid,x+nx,y+ny,cr,cg,cb,100);
+ else if (abs(y) != 0 || abs(x) != 0)
+ blendpixel(vid,x+nx,y+ny,cr,cg,cb,50);
+ }
+ }
+ }
+ else if(parts[i].type==PT_LAVA && parts[i].life)
+ {
+ cr = parts[i].life * 2 + 0xE0;
+ cg = parts[i].life * 1 + 0x50;
+ cb = parts[i].life/2 + 0x10;
+ if(cr>255) cr = 255;
+ if(cg>192) cg = 192;
+ if(cb>128) cb = 128;
+ for(x=-1; x<=1; x++)
+ {
+ for(y=-1; y<=1; y++)
+ {
+ if ((abs(x) == 0) && (abs(y) == 0))
+ blendpixel(vid,x+nx,y+ny,cr,cg,cb,100);
+ else if (abs(y) != 0 || abs(x) != 0)
+ blendpixel(vid,x+nx,y+ny,cr,cg,cb,50);
+ }
+ }
+ }
+ else if(parts[i].type==PT_GLOW)
+ {
+ fg = 0;
+ fb = 0;
+ fr = 0;
+ if(pv[ny/CELL][nx/CELL]>0) {
+ fg = 6 * pv[ny/CELL][nx/CELL];
+ fb = 4 * pv[ny/CELL][nx/CELL];
+ fr = 2 * pv[ny/CELL][nx/CELL];
+ }
+ vid[ny*(XRES+BARSIZE)+nx] = PIXRGB((int)restrict_flt(0x44 + fr*8, 0, 255), (int)restrict_flt(0x88 + fg*8, 0, 255), (int)restrict_flt(0x44 + fb*8, 0, 255));
+
+ /*x = nx/CELL;
+ y = ny/CELL;
+ fg += fire_g[y][x];
+ if(fg > 255) fg = 255;
+ fire_g[y][x] = fg;
+ fb += fire_b[y][x];
+ if(fb > 255) fb = 255;
+ fire_b[y][x] = fb;
+ fr += fire_r[y][x];
+ if(fr > 255) fr = 255;
+ fire_r[y][x] = fr;*/
+
+ cr = (int)restrict_flt(0x44 + fr*8, 0, 255);
+ cg = (int)restrict_flt(0x88 + fg*8, 0, 255);
+ cb = (int)restrict_flt(0x44 + fb*8, 0, 255);
+ for(x=-1; x<=1; x++)
+ {
+ for(y=-1; y<=1; y++)
+ {
+ if ((abs(x) == 0) && (abs(y) == 0))
+ blendpixel(vid,x+nx,y+ny,cr,cg,cb,100);
+ else if (abs(y) != 0 || abs(x) != 0)
+ blendpixel(vid,x+nx,y+ny,cr,cg,cb,50);
+ }
+ }
+ }
+ else
+ {
+ cr = PIXR(ptypes[t].pcolors);
+ cg = PIXG(ptypes[t].pcolors);
+ cb = PIXB(ptypes[t].pcolors);
+ for(x=-1; x<=1; x++)
+ {
+ for(y=-1; y<=1; y++)
+ {
+ if ((abs(x) == 0) && (abs(y) == 0))
+ blendpixel(vid,x+nx,y+ny,cr,cg,cb,100);
+ else if (abs(y) != 0 || abs(x) != 0)
+ blendpixel(vid,x+nx,y+ny,cr,cg,cb,50);
+ }
+ }
+ }
+ }
+ else if (ptypes[parts[i].type].properties&TYPE_GAS)
+ {
+ //if(parts[i].type!=PT_FIRE&&parts[i].type!=PT_SMKE&&parts[i].type!=PT_PLSM&&parts[i].type!=PT_WTRV)
+ {
+ cr = PIXR(ptypes[t].pcolors);
+ cg = PIXG(ptypes[t].pcolors);
+ cb = PIXB(ptypes[t].pcolors);
+ for(x=-1; x<=1; x++)
+ {
+ for(y=-1; y<=1; y++)
+ {
+ if ((abs(x) == 0) && (abs(y) == 0))
+ blendpixel(vid,x+nx,y+ny,cr,cg,cb,180);
+ else if (abs(y) != 0 && abs(x) != 0)
+ blendpixel(vid,x+nx,y+ny,cr,cg,cb,50);
+ else
+ blendpixel(vid,x+nx,y+ny,cr,cg,cb,80);
+ }
+ }
+ }
+ }
+ else if(ptypes[parts[i].type].properties&PROP_RADIOACTIVE)
+ {
+ int tempx = 0;
+ int tempy = 0;
+ cr = PIXR(ptypes[t].pcolors);
+ cg = PIXG(ptypes[t].pcolors);
+ cb = PIXB(ptypes[t].pcolors);
+ //blendpixel(vid, nx, ny, cr, cg, cb, 192);
+ //blendpixel(vid, nx+1, ny, cr, cg, cb, 96);
+ //blendpixel(vid, nx-1, ny, cr, cg, cb, 96);
+ //blendpixel(vid, nx, ny+1, cr, cg, cb, 96);
+ //blendpixel(vid, nx, ny-1, cr, cg, cb, 96);
+ addpixel(vid, nx, ny, cr, cg, cb, 192);
+ addpixel(vid, nx+1, ny, cr, cg, cb, 96);
+ addpixel(vid, nx-1, ny, cr, cg, cb, 96);
+ addpixel(vid, nx, ny+1, cr, cg, cb, 96);
+ addpixel(vid, nx, ny-1, cr, cg, cb, 96);
+ for(tempx = 2; tempx < 7; tempx++) {
+ for(tempy = 2; tempy < 7; tempy++) {
+ addpixel(vid, nx+tempx, ny-tempy, cr, cg, cb, 5);
+ addpixel(vid, nx-tempx, ny+tempy, cr, cg, cb, 5);
+ addpixel(vid, nx+tempx, ny+tempy, cr, cg, cb, 5);
+ addpixel(vid, nx-tempx, ny-tempy, cr, cg, cb, 5);
+ //blendpixel(vid, nx+tempx, ny-tempy, cr, cg, cb, 5);
+ //blendpixel(vid, nx-tempx, ny+tempy, cr, cg, cb, 5);
+ //blendpixel(vid, nx+tempx, ny+tempy, cr, cg, cb, 5);
+ //blendpixel(vid, nx-tempx, ny-tempy, cr, cg, cb, 5);
+ }
+ }
+ }
+ else
+ {
+ vid[ny*(XRES+BARSIZE)+nx] = ptypes[t].pcolors;
+ }
+ }
else if(cmode==CM_LIFE)
{
float frequency = 0.4;
@@ -1503,22 +1660,6 @@ void draw_parts(pixel *vid)
cb = 0;
blendpixel(vid, nx, ny, cr, cg, cb, 255);
}
- else if(t==PT_MWAX&&cmode == CM_FANCY)
- {
- for(x=-1; x<=1; x++)
- {
- for(y=-1; y<=1; y++)
- {
- if ((abs(x) == 0) && (abs(y) == 0))
- blendpixel(vid,x+nx,y+ny,224,224,170,255);
- else if (abs(y) != 0 && abs(x) != 0)
- blendpixel(vid,x+nx,y+ny,224,224,170,20);
- else
- blendpixel(vid,x+nx,y+ny,224,224,170,40);
- }
- }
-
- }
else if(t==PT_QRTZ || t==PT_PQRT)
{
int z = parts[i].tmp;
@@ -1788,7 +1929,9 @@ void draw_parts(pixel *vid)
}
else if(t==PT_INVIS && (pv[ny/CELL][nx/CELL]>4.0f ||pv[ny/CELL][nx/CELL]<-4.0f))
+ {
blendpixel(vid, nx, ny, 15, 0, 150, 100);
+ }
else if(t==PT_ACID)
{
if(parts[i].life>255) parts[i].life = 255;
@@ -1798,20 +1941,7 @@ void draw_parts(pixel *vid)
cr = PIXR(ptypes[t].pcolors)/s;
cg = PIXG(ptypes[t].pcolors)/s;
cb = PIXB(ptypes[t].pcolors)/s;
- if(cmode==CM_FANCY) {
- for(x=-1; x<=1; x++)
- {
- for(y=-1; y<=1; y++)
- {
- if ((abs(x) == 0) && (abs(y) == 0))
- blendpixel(vid,x+nx,y+ny,cr,cg,cb,100);
- else if (abs(y) != 0 || abs(x) != 0)
- blendpixel(vid,x+nx,y+ny,cr,cg,cb,40);
- }
- }
- } else {
- blendpixel(vid, nx, ny, cr, cg, cb, 255);
- }
+ blendpixel(vid, nx, ny, cr, cg, cb, 255);
if(cmode==CM_BLOB)
{
@@ -1826,19 +1956,6 @@ void draw_parts(pixel *vid)
blendpixel(vid, nx-1, ny+1, cr, cg, cb, 112);
}
}
- else if(t==PT_OIL&&cmode == CM_FANCY)
- {
- for(x=-1; x<=1; x++)
- {
- for(y=-1; y<=1; y++)
- {
- if ((abs(x) == 0) && (abs(y) == 0))
- blendpixel(vid,x+nx,y+ny,64,64,16,100);
- else if (abs(y) != 0 || abs(x) != 0)
- blendpixel(vid,x+nx,y+ny,64,64,16,40);
- }
- }
- }
else if(t==PT_NEUT)
{
if(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)
@@ -1870,58 +1987,6 @@ void draw_parts(pixel *vid)
blendpixel(vid, nx+1, ny+1, cr, cg, cb, 32);
blendpixel(vid, nx-1, ny-1, cr, cg, cb, 32);
}
- } else if(t==PT_PLUT&&cmode == CM_FANCY)
- {
- int tempx;
- int tempy;
- cr = 0x40;
- cg = 0x70;
- cb = 0x20;
- blendpixel(vid, nx, ny, cr, cg, cb, 192);
- blendpixel(vid, nx+1, ny, cr, cg, cb, 96);
- blendpixel(vid, nx-1, ny, cr, cg, cb, 96);
- blendpixel(vid, nx, ny+1, cr, cg, cb, 96);
- blendpixel(vid, nx, ny-1, cr, cg, cb, 96);
- for(tempx = 2; tempx < 10; tempx++) {
- for(tempy = 2; tempy < 10; tempy++) {
- blendpixel(vid, nx+tempx, ny-tempy, cr, cg, cb, 5);
- blendpixel(vid, nx-tempx, ny+tempy, cr, cg, cb, 5);
- blendpixel(vid, nx+tempx, ny+tempy, cr, cg, cb, 5);
- blendpixel(vid, nx-tempx, ny-tempy, cr, cg, cb, 5);
- }
- }
- } else if(t==PT_URAN&&cmode == CM_FANCY)
- {
- int tempx;
- int tempy;
- cr = 0x70;
- cg = 0x70;
- cb = 0x20;
- blendpixel(vid, nx, ny, cr, cg, cb, 192);
- blendpixel(vid, nx+1, ny, cr, cg, cb, 96);
- blendpixel(vid, nx-1, ny, cr, cg, cb, 96);
- blendpixel(vid, nx, ny+1, cr, cg, cb, 96);
- blendpixel(vid, nx, ny-1, cr, cg, cb, 96);
- for(tempx = 2; tempx < 10; tempx++) {
- for(tempy = 2; tempy < 10; tempy++) {
- blendpixel(vid, nx+tempx, ny-tempy, cr, cg, cb, 5);
- blendpixel(vid, nx-tempx, ny+tempy, cr, cg, cb, 5);
- blendpixel(vid, nx+tempx, ny+tempy, cr, cg, cb, 5);
- blendpixel(vid, nx-tempx, ny-tempy, cr, cg, cb, 5);
- }
- }
- } else if(t==PT_SLTW&&cmode == CM_FANCY)
- {
- for(x=-1; x<=1; x++)
- {
- for(y=-1; y<=1; y++)
- {
- if ((abs(x) == 0) && (abs(y) == 0))
- blendpixel(vid,x+nx,y+ny,64,80,240,100);
- else if (abs(y) != 0 || abs(x) != 0)
- blendpixel(vid,x+nx,y+ny,64,80,240,50);
- }
- }
}
else if(t==PT_FILT)
{
@@ -2069,19 +2134,6 @@ void draw_parts(pixel *vid)
y = ny;
blendpixel(vid,x,y,17,217,24,255);
}
- else if(t==PT_LNTG&&cmode == CM_FANCY)
- {
- for(x=-1; x<=1; x++)
- {
- for(y=-1; y<=1; y++)
- {
- if ((abs(x) == 0) && (abs(y) == 0))
- blendpixel(vid,x+nx,y+ny,128,160,223,100);
- else if (abs(y) != 0 || abs(x) != 0)
- blendpixel(vid,x+nx,y+ny,128,160,223,50);
- }
- }
- }
else if(t==PT_SMKE)
{
if(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)
@@ -2117,93 +2169,6 @@ void draw_parts(pixel *vid)
}
}
}
- else if(t==PT_WATR&&cmode == CM_FANCY)
- {
- for(x=-1; x<=1; x++)
- {
- for(y=-1; y<=1; y++)
- {
- if ((abs(x) == 0) && (abs(y) == 0))
- blendpixel(vid,x+nx,y+ny,32,48,208,100);
- else if (abs(y) != 0 || abs(x) != 0)
- blendpixel(vid,x+nx,y+ny,32,48,208,50);
- }
- }
-
- } else if(t==PT_DSTW&&cmode == CM_FANCY)
- {
- for(x=-1; x<=1; x++)
- {
- for(y=-1; y<=1; y++)
- {
- if ((abs(x) == 0) && (abs(y) == 0))
- blendpixel(vid,x+nx,y+ny,32,48,208,100);
- else if (abs(y) != 0 || abs(x) != 0)
- blendpixel(vid,x+nx,y+ny,32,48,208,50);
- }
- }
- }
- else if(t==PT_NITR&&cmode == CM_FANCY)
- {
- for(x=-1; x<=1; x++)
- {
- for(y=-1; y<=1; y++)
- {
- if ((abs(x) == 0) && (abs(y) == 0))
- blendpixel(vid,x+nx,y+ny,32,224,16,100);
- else if (abs(y) != 0 || abs(x) != 0)
- blendpixel(vid,x+nx,y+ny,32,224,16,50);
- }
- }
-
- }
- else if(t==PT_LRBD&&cmode == CM_FANCY)
- {
- for(x=-1; x<=1; x++)
- {
- for(y=-1; y<=1; y++)
- {
- if ((abs(x) == 0) && (abs(y) == 0))
- blendpixel(vid,x+nx,y+ny,170,170,170,100);
- else if (abs(y) != 0 || abs(x) != 0)
- blendpixel(vid,x+nx,y+ny,170,170,170,50);
- }
- }
-
- }
-
- else if(t==PT_NBLE&&cmode == CM_FANCY)
- {
- for(x=-1; x<=1; x++)
- {
- for(y=-1; y<=1; y++)
- {
- if ((abs(x) == 0) && (abs(y) == 0))
- blendpixel(vid,x+nx,y+ny,235,73,23,100);
- else if (abs(y) != 0 && abs(x) != 0)
- blendpixel(vid,x+nx,y+ny,235,73,23,30);
- else
- blendpixel(vid,x+nx,y+ny,235,73,23,50);
- }
- }
-
- }
- else if(t==PT_GAS&&cmode == CM_FANCY)
- {
- for(x=-1; x<=1; x++)
- {
- for(y=-1; y<=1; y++)
- {
- if ((abs(x) == 0) && (abs(y) == 0))
- blendpixel(vid,x+nx,y+ny,255,255,0,180);
- else if (abs(y) != 0 && abs(x) != 0)
- blendpixel(vid,x+nx,y+ny,255,255,0,50);
- else
- blendpixel(vid,x+nx,y+ny,255,255,0,80);
- }
- }
-
- }
else if(t==PT_WTRV)
{
if(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)
diff --git a/src/main.c b/src/main.c
index c5fc100..f89eae1 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1516,8 +1516,19 @@ int main(int argc, char *argv[])
else
GRID_MODE = (GRID_MODE+1)%10;
}
+ if(sdl_key=='=')
+ {
+ int nx, ny;
+ for(nx = 0;nx<XRES/CELL;nx++)
+ for(ny = 0;ny<YRES/CELL;ny++)
+ {
+ pv[ny][nx] = 0;
+ vx[ny][nx] = 0;
+ vy[ny][nx] = 0;
+ }
+ }
- if(sdl_key=='w') //Gravity, by Moach
+ if(sdl_key=='w' && (!isplayer2 || (sdl_mod & (KMOD_SHIFT)))) //Gravity, by Moach
{
++gravityMode; // cycle gravity mode
itc = 51;
@@ -2060,6 +2071,10 @@ int main(int argc, char *argv[])
svf_tags[0] = 0;
svf_description[0] = 0;
gravityMode = 1;
+ isplayer2 = 0;
+ isplayer = 0;
+ ISSPAWN1 = 0;
+ ISSPAWN2 = 0;
memset(fire_bg, 0, XRES*YRES*PIXELSIZE);
memset(fire_r, 0, sizeof(fire_r));
diff --git a/src/powder.c b/src/powder.c
index 908b15e..f26db35 100644
--- a/src/powder.c
+++ b/src/powder.c
@@ -577,7 +577,7 @@ inline int create_part(int p, int x, int y, int t)
{
if(pmap[y][x])
{
- if(((pmap[y][x]&0xFF)==PT_CLNE||(pmap[y][x]&0xFF)==PT_BCLN||(pmap[y][x]&0xFF)==PT_PCLN)&&(t!=PT_CLNE&&t!=PT_PCLN&&t!=PT_BCLN))
+ if(((pmap[y][x]&0xFF)==PT_CLNE||(pmap[y][x]&0xFF)==PT_BCLN||(pmap[y][x]&0xFF)==PT_PCLN)&&(t!=PT_CLNE&&t!=PT_PCLN&&t!=PT_BCLN&&t!=PT_STKM&&t!=PT_STKM2))
{
parts[pmap[y][x]>>8].ctype = t;
}
@@ -5046,7 +5046,7 @@ killed:
parts[i].vx *= ptypes[t].collision;
parts[i].vy *= ptypes[t].collision;
}
- else if(ptypes[t].falldown>1 && parts[i].vy>fabs(parts[i].vx))
+ else if(ptypes[t].falldown>1 && (parts[i].vy>fabs(parts[i].vx) || gravityMode==2))
{
s = 0;
if(!rt || nt) //nt is if there is an something else besides the current particle type, around the particle