From db364c549f70668c632bfdc55aaf441142ef646e Mon Sep 17 00:00:00 2001 From: Simon Date: Fri, 24 Dec 2010 12:51:39 +0000 Subject: [PATCH] You know, stuff. --- includes/powder.h | 4 +++- src/graphics.c | 49 +++++++++++++++++++++++++++++++++++++++ src/powder.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+), 1 deletion(-) diff --git a/includes/powder.h b/includes/powder.h index 44f3f8374..960a5ad94 100644 --- a/includes/powder.h +++ b/includes/powder.h @@ -176,7 +176,8 @@ #define PT_ARAY 126 #define PT_BRAY 127 #define PT_STKM2 128 -#define PT_NUM 129 +#define PT_BOMB 129 +#define PT_NUM 130 #define R_TEMP 22 #define MAX_TEMP 9999 @@ -398,6 +399,7 @@ static const part_type ptypes[PT_NUM] = {"ARAY", PIXPACK(0xFFBB00), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 1, 1, 1, 100, SC_ELEC, R_TEMP+0.0f +273.15f, 251, "Ray Emmitter. Rays create points when they collide", TYPE_SOLID, NULL}, {"BRAY", PIXPACK(0xFFFFFF), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 1, 1, 0, 100, SC_ELEC, R_TEMP+0.0f +273.15f, 251, "Ray Point. Rays create points when they collide", TYPE_SOLID, NULL}, {"STK2", PIXPACK(0x000000), 0.5f, 0.00f * CFDS, 0.2f, 1.0f, 0.0f, 0.0f, 0.0f, 0.00f * CFDS, 0, 0, 0, 0, 0, 1, 50, SC_SPECIAL, R_TEMP+14.6f+273.15f, 0, "Stickman. Don't kill him!", 0, NULL}, + {"BOMB", PIXPACK(0xFFF288), 0.6f, 0.01f * CFDS, 0.98f, 0.95f, 0.0f, 0.1f, 0.00f, 0.000f * CFDS, 1, 0, 0, 0, 20, 1, 30, SC_EXPLOSIVE, R_TEMP-2.0f +273.15f, 29, "Bomb.", TYPE_PART, NULL}, //Name Colour Advec Airdrag Airloss Loss Collid Grav Diffus Hotair Fal Burn Exp Mel Hrd M Weights Section H Ins Description }; diff --git a/src/graphics.c b/src/graphics.c index 3eb7e18a8..7a7965194 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -2425,6 +2425,55 @@ 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(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 71dee15bf..a386281bc 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>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>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)