diff options
| author | Cracker64 <cracker642@gmail.com> | 2010-12-24 20:00:59 (GMT) |
|---|---|---|
| committer | Cracker64 <cracker642@gmail.com> | 2010-12-24 20:00:59 (GMT) |
| commit | 65a60b3812b708620b4ff4b13c3521fa5e4547ab (patch) | |
| tree | 2bb37a97351e5069f550ddebec49bee5644e67f4 /src/powder.c | |
| parent | 41d9dca73fd5f29bfd30927ec5429d050718f68c (diff) | |
| download | powder-65a60b3812b708620b4ff4b13c3521fa5e4547ab.zip powder-65a60b3812b708620b4ff4b13c3521fa5e4547ab.tar.gz | |
updated with BOMB
Diffstat (limited to 'src/powder.c')
| -rw-r--r-- | src/powder.c | 64 |
1 files changed, 64 insertions, 0 deletions
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) |
