summaryrefslogtreecommitdiff
path: root/src/powder.c
diff options
context:
space:
mode:
authorSimon <simon@hardwired.org.uk>2010-12-24 12:51:39 (GMT)
committer Simon <simon@hardwired.org.uk>2010-12-24 12:51:39 (GMT)
commitdb364c549f70668c632bfdc55aaf441142ef646e (patch)
treed6952629064b222d0b672d3f7d19d750eafafadd /src/powder.c
parent267e6a4511a4f99b9a894c1eb08b8c5a77c4e685 (diff)
downloadpowder-db364c549f70668c632bfdc55aaf441142ef646e.zip
powder-db364c549f70668c632bfdc55aaf441142ef646e.tar.gz
You know, stuff.
Diffstat (limited to 'src/powder.c')
-rw-r--r--src/powder.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/powder.c b/src/powder.c
index 71dee15..a386281 100644
--- a/src/powder.c
+++ b/src/powder.c
@@ -2788,6 +2788,64 @@ 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;
+ }
+ }
+ 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] += 1.0f;
+ int nb = create_part(-1, x+nxi, y+nxj, PT_BOMB);
+ if(nb!=-1){
+ parts[nb].tmp = 2;
+ parts[nb].life = 1;
+ 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)