summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCracker64 <cracker642@gmail.com>2010-12-24 20:00:59 (GMT)
committer Cracker64 <cracker642@gmail.com>2010-12-24 20:00:59 (GMT)
commit65a60b3812b708620b4ff4b13c3521fa5e4547ab (patch)
tree2bb37a97351e5069f550ddebec49bee5644e67f4 /src
parent41d9dca73fd5f29bfd30927ec5429d050718f68c (diff)
downloadpowder-65a60b3812b708620b4ff4b13c3521fa5e4547ab.zip
powder-65a60b3812b708620b4ff4b13c3521fa5e4547ab.tar.gz
updated with BOMB
Diffstat (limited to 'src')
-rw-r--r--src/graphics.c70
-rw-r--r--src/powder.c64
2 files changed, 134 insertions, 0 deletions
diff --git a/src/graphics.c b/src/graphics.c
index e719a04..9beeeb0 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -2425,6 +2425,76 @@ void draw_parts(pixel *vid)
blendpixel(vid, nx-1, ny-1, cr, cg, cb, 32);
}
}
+ else if(t==PT_BOMB){
+ if(parts[i].tmp==0){
+ cr = PIXR(ptypes[t].pcolors);
+ cg = PIXG(ptypes[t].pcolors);
+ cb = PIXB(ptypes[t].pcolors);
+ if(cmode != CM_NOTHING && cmode != CM_CRACK){
+ int newx = 0;
+ float gradv = 100;
+ blendpixel(vid, nx+1, ny, cr, cg, cb, 223);
+ blendpixel(vid, nx-1, ny, cr, cg, cb, 223);
+ blendpixel(vid, nx, ny+1, cr, cg, cb, 223);
+ blendpixel(vid, nx, ny-1, cr, cg, cb, 223);
+
+ blendpixel(vid, nx+1, ny-1, cr, cg, cb, 112);
+ blendpixel(vid, nx-1, ny-1, cr, cg, cb, 112);
+ blendpixel(vid, nx+1, ny+1, cr, cg, cb, 112);
+ blendpixel(vid, nx-1, ny+1, cr, cg, cb, 112);
+ for(newx = 0; gradv>0.5; newx++){
+ addpixel(vid, nx+newx, ny, cr, cg, cb, gradv);
+ addpixel(vid, nx-newx, ny, cr, cg, cb, gradv);
+
+ addpixel(vid, nx, ny+newx, cr, cg, cb, gradv);
+ addpixel(vid, nx, ny-newx, cr, cg, cb, gradv);
+ gradv = gradv/1.1f;
+ }
+ }
+ }
+ else if(parts[i].tmp==1){
+ cr = PIXR(ptypes[t].pcolors);
+ cg = PIXG(ptypes[t].pcolors);
+ cb = PIXB(ptypes[t].pcolors);
+ if(cmode != CM_NOTHING && cmode != CM_CRACK){
+ int newx = 0;
+ float gradv = 4*parts[i].life;
+ for(newx = 0; gradv>0.5; newx++){
+ addpixel(vid, nx+newx, ny, cr, cg, cb, gradv);
+ addpixel(vid, nx-newx, ny, cr, cg, cb, gradv);
+
+ addpixel(vid, nx, ny+newx, cr, cg, cb, gradv);
+ addpixel(vid, nx, ny-newx, cr, cg, cb, gradv);
+ gradv = gradv/1.5f;
+ }
+ }
+ }
+ else {
+ blendpixel(vid, nx, ny, 255, 255, 255, 255);
+ }
+
+ }
+ else if(ptypes[t].properties&PROP_HOT_GLOW && parts[i].temp>473.0f)
+ {
+ float frequency = 0.00146;
+ int q = (parts[i].temp>1370)?1370-473:parts[i].temp-473;
+ cr = sin(frequency*q) * 226 + PIXR(ptypes[t].pcolors);
+ cg = sin(frequency*q*4.55 +3.14) * 34 + PIXG(ptypes[t].pcolors);
+ cb = sin(frequency*q*2.22 +3.14) * 64 + PIXB(ptypes[t].pcolors);
+ if(cr>=255)
+ cr = 255;
+ if(cg>=255)
+ cg = 255;
+ if(cb>=255)
+ cb = 255;
+ if(cr<=0)
+ cr = 0;
+ if(cg<=0)
+ cg = 0;
+ if(cb<=0)
+ cb = 0;
+ blendpixel(vid, nx, ny, cr, cg, cb, 255);
+ }
else if(t==PT_FIRE && parts[i].life)
{
float ttemp = (float)((int)(parts[i].life/2));
diff --git a/src/powder.c b/src/powder.c
index 02a740f..ad3c9b6 100644
--- a/src/powder.c
+++ b/src/powder.c
@@ -133,6 +133,10 @@ int try_move(int i, int x, int y, int nx, int ny)
return 1;
e = eval_move(parts[i].type, nx, ny, &r);
+
+ if((pmap[ny][nx]&0xFF)==PT_BOMB && parts[i].type==PT_BOMB && parts[i].tmp == 1)
+ e = 2;
+
if((pmap[ny][nx]&0xFF)==PT_INVIS && (pv[ny/CELL][nx/CELL]>4.0f ||pv[ny/CELL][nx/CELL]<-4.0f))
return 1;
/* half-silvered mirror */
@@ -2788,6 +2792,66 @@ void update_particles_i(pixel *vid, int start, int inc)
}
}
}
+ else if(t==PT_BOMB)
+ {
+ if(parts[i].tmp==1){
+ for(nx=-2; nx<3; nx++)
+ for(ny=-2; ny<3; ny++)
+ if(x+nx>=0 && y+ny>0 && x+nx<XRES && y+ny<YRES && (nx || ny))
+ {
+ r = pmap[y+ny][x+nx];
+ if((r>>8)>=NPART || !r)
+ continue;
+ if(parts[r>>8].type!=PT_NONE && parts[r>>8].type!=PT_BOMB){
+ parts[i].type = PT_NONE;
+ goto killed;
+ }
+ }
+ } else if(parts[i].tmp==0){
+ for(nx=-2; nx<3; nx++)
+ for(ny=-2; ny<3; ny++)
+ if(x+nx>=0 && y+ny>0 && x+nx<XRES && y+ny<YRES)
+ {
+ r = pmap[y+ny][x+nx];
+ if((r>>8)>=NPART || !r)
+ continue;
+ if(parts[r>>8].type!=PT_NONE && parts[r>>8].type!=PT_BOMB){
+ int rad = 8;
+ int nxi;
+ int nxj;
+ pmap[y][x] = 0;
+ for(nxj=-(rad+1); nxj<=(rad+1); nxj++)
+ for(nxi=-(rad+1); nxi<=(rad+1); nxi++)
+ if((pow(nxi,2))/(pow((rad+1),2))+(pow(nxj,2))/(pow((rad+1),2))<=1){
+ int nb = create_part(-1, x+nxi, y+nxj, PT_BOMB);
+ if(nb!=-1){
+ parts[nb].tmp = 1;
+ parts[nb].life = 50;
+ parts[nb].temp = MAX_TEMP;
+ parts[nb].vx = rand()%20-10;
+ parts[nb].vy = rand()%20-10;
+ }
+ }
+ for(nxj=-rad; nxj<=rad; nxj++)
+ for(nxi=-rad; nxi<=rad; nxi++)
+ if((pow(nxi,2))/(pow(rad,2))+(pow(nxj,2))/(pow(rad,2))<=1){
+ delete_part(x+nxi, y+nxj);
+ pv[(y+nxj)/CELL][(x+nxi)/CELL] += 0.1f;
+ int nb = create_part(-1, x+nxi, y+nxj, PT_BOMB);
+ if(nb!=-1){
+ parts[nb].tmp = 2;
+ parts[nb].life = 2;
+ parts[nb].temp = MAX_TEMP;
+ }
+ }
+ //create_parts(x, y, 9, 9, PT_BOMB);
+ //create_parts(x, y, 8, 8, PT_NONE);
+ parts[i].type = PT_NONE;
+ goto killed;
+ }
+ }
+ }
+ }
else if(t==PT_FWRK)
{
if((parts[i].temp>400&&(9+parts[i].temp/40)>rand()%100000&&parts[i].life==0&&!pmap[y-1][x])||parts[i].ctype==PT_DUST)