diff --git a/includes/graphics.h b/includes/graphics.h index 8061e7ce2..3b7672f71 100644 --- a/includes/graphics.h +++ b/includes/graphics.h @@ -26,6 +26,12 @@ #define PIXR(x) (((x)>>8)&0xFF) #define PIXG(x) (((x)>>16)&0xFF) #define PIXB(x) (((x)>>24)) +#elif defined(PIX32RGBA) +#define PIXPACK(x) ((((x)>>16)&0x0000FF)|((x)&0x00FF00)|(((x)<<16)&0xFF0000)) +#define PIXRGB(r,g,b) (((b)<<16)|((g)<<8)|((r)))// (((b)<<16)|((g)<<8)|(r)) +#define PIXR(x) ((x)&0xFF) +#define PIXG(x) (((x)>>8)&0xFF) +#define PIXB(x) ((x)>>16) #else #define PIXPACK(x) (x) #define PIXRGB(r,g,b) (((r)<<16)|((g)<<8)|(b)) diff --git a/src/graphics.c b/src/graphics.c index f019cfb9b..5d7354dd4 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -2,7 +2,7 @@ #include #include -#ifdef OpenGL +#if defined(OGLR) #ifdef MACOSX #include #include @@ -284,6 +284,31 @@ pixel *rescale_img(pixel *src, int sw, int sh, int *qw, int *qh, int f) return q; } +#ifdef OGLR +void ogl_blit(int x, int y, int w, int h, pixel *src, int pitch, int scale) +{ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(0 ,XRES*scale, 0, YRES*scale, -1, 1); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + + glRasterPos2i(0, YRES*scale); + glPixelZoom(scale, -scale); + + glDrawPixels(w,h,GL_RGBA,GL_UNSIGNED_BYTE,src); + + glPopMatrix(); + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + + + SDL_GL_SwapBuffers (); +} +#endif + void sdl_blit_1(int x, int y, int w, int h, pixel *src, int pitch) { pixel *dst; @@ -380,8 +405,8 @@ void sdl_blit_2(int x, int y, int w, int h, pixel *src, int pitch) void sdl_blit(int x, int y, int w, int h, pixel *src, int pitch) { -#ifdef OpenGL - RenderScene(); +#if defined(OGLR) + ogl_blit(x, y, w, h, src, pitch, sdl_scale); #else if (sdl_scale == 2) sdl_blit_2(x, y, w, h, src, pitch); @@ -404,312 +429,6 @@ void drawblob(pixel *vid, int x, int y, unsigned char cr, unsigned char cg, unsi blendpixel(vid, x-1, y+1, cr, cg, cb, 64); } -//old and unused equation to draw walls -/* -void draw_tool(pixel *vid_buf, int b, int sl, int sr, unsigned pc, unsigned iswall) -{ - int x, y, i, j, c; - int bo = b; - if (iswall==1) - { - b = b-100; - x = (2+32*((b-22)/1)); - y = YRES+2+40; - switch (b) - { - case WL_WALLELEC: - for (j=1; j<15; j++) - { - for (i=1; i<27; i++) - { - if (!(i%2) && !(j%2)) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - else - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = PIXPACK(0x808080); - } - } - } - break; - case 23: - for (j=1; j<15; j++) - { - for (i=1; i<6+j; i++) - { - if (!(i&j&1)) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - for (; i<27; i++) - { - if (i&j&1) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - } - break; - case 24: - for (j=1; j<15; j+=2) - { - for (i=1+(1&(j>>1)); i<27; i+=2) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - break; - case 25: - for (j=1; j<15; j++) - { - for (i=1; i<27; i++) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = i==1||i==26||j==1||j==14 ? PIXPACK(0xA0A0A0) : PIXPACK(0x000000); - drawtext(vid_buf, x+4, y+3, "\x8D", 255, 255, 255, 255); - } - } - for (i=9; i<27; i++) - { - drawpixel(vid_buf, x+i, y+8+(int)(3.9f*cos(i*0.3f)), 255, 255, 255, 255); - } - break; - case 26: - for (j=1; j<15; j++) - { - for (i=1; i<27; i++) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = i==1||i==26||j==1||j==14 ? PIXPACK(0xA0A0A0) : PIXPACK(0x000000); - } - } - drawtext(vid_buf, x+9, y+3, "\xA1", 32, 64, 128, 255); - drawtext(vid_buf, x+9, y+3, "\xA0", 255, 255, 255, 255); - break; - case 27: - for (j=1; j<15; j+=2) - { - for (i=1+(1&(j>>1)); i<27; i+=2) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - break; - case 28: - for (j=1; j<15; j++) - { - for (i=1; i<27; i++) - { - if (!(i%2) && !(j%2)) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - } - break; - case 29: - for (j=1; j<15; j+=2) - { - for (i=1+(1&(j>>1)); i<27; i+=2) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - break; - case 30: - for (j=1; j<15; j+=2) - { - for (i=1+(1&(j>>1)); i<13; i+=2) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - for (j=1; j<15; j++) - { - for (i=14; i<27; i++) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - break; - case 32: - for (j=1; j<15; j+=2) - { - for (i=1+(1&(j>>1)); i<27; i+=2) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - break; - case 33: - for (j=1; j<15; j+=2) - { - for (i=1+(1&(j>>1)); i<27; i+=2) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - break; - case 34: - for (j=1; j<15; j++) - { - for (i=1; i<27; i++) - { - if (!(i%2) && !(j%2)) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - } - break; - case 36: - for (j=1; j<15; j++) - { - for (i=1; i<27; i++) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - c = PIXR(pc) + 3*PIXG(pc) + 2*PIXB(pc); - if (c<544) - { - c = 255; - } - else - { - c = 0; - } - drawtext(vid_buf, x+14-textwidth("AIR")/2, y+4, "AIR", c, c, c, 255); - break; - case 37: - for (j=1; j<15; j++) - { - for (i=1; i<27; i++) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - c = PIXR(pc) + 3*PIXG(pc) + 2*PIXB(pc); - if (c<544) - { - c = 255; - } - else - { - c = 0; - } - drawtext(vid_buf, x+14-textwidth("HEAT")/2, y+4, "HEAT", c, c, c, 255); - break; - case 38: - for (j=1; j<15; j++) - { - for (i=1; i<27; i++) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - c = PIXR(pc) + 3*PIXG(pc) + 2*PIXB(pc); - if (c<544) - { - c = 255; - } - else - { - c = 0; - } - drawtext(vid_buf, x+14-textwidth("COOL")/2, y+4, "COOL", c, c, c, 255); - break; - case 39: - for (j=1; j<15; j++) - { - for (i=1; i<27; i++) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - c = PIXR(pc) + 3*PIXG(pc) + 2*PIXB(pc); - if (c<544) - { - c = 255; - } - else - { - c = 0; - } - drawtext(vid_buf, x+14-textwidth("VAC")/2, y+4, "VAC", c, c, c, 255); - break; - default: - for (j=1; j<15; j++) - { - for (i=1; i<27; i++) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - } - if (b==30) - { - for (j=4; j<12; j++) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+j+6)] = PIXPACK(0xFF0000); - vid_buf[(XRES+BARSIZE)*(y+j)+(x+j+7)] = PIXPACK(0xFF0000); - vid_buf[(XRES+BARSIZE)*(y+j)+(x-j+21)] = PIXPACK(0xFF0000); - vid_buf[(XRES+BARSIZE)*(y+j)+(x-j+22)] = PIXPACK(0xFF0000); - } - } - } - else - { - x = 2+32*(b/2); - y = YRES+2+20*(b%2); - for (j=1; j<15; j++) - { - for (i=1; i<27; i++) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; - } - } - if (b==0) - { - for (j=4; j<12; j++) - { - vid_buf[(XRES+BARSIZE)*(y+j)+(x+j+6)] = PIXPACK(0xFF0000); - vid_buf[(XRES+BARSIZE)*(y+j)+(x+j+7)] = PIXPACK(0xFF0000); - vid_buf[(XRES+BARSIZE)*(y+j)+(x-j+21)] = PIXPACK(0xFF0000); - vid_buf[(XRES+BARSIZE)*(y+j)+(x-j+22)] = PIXPACK(0xFF0000); - } - } - c = PIXB(ptypes[b].pcolors) + 3*PIXG(ptypes[b].pcolors) + 2*PIXR(ptypes[b].pcolors); - if (c<544) - { - c = 255; - } - else - { - c = 0; - } - drawtext(vid_buf, x+14-textwidth((char *)ptypes[b].name)/2, y+4, (char *)ptypes[b].name, c, c, c, 255); - } - if (bo==sl || bo==sr) - { - c = 0; - if (bo==sl) - c |= PIXPACK(0xFF0000); - if (bo==sr) - c |= PIXPACK(0x0000FF); - for (i=0; i<30; i++) - { - vid_buf[(XRES+BARSIZE)*(y-1)+(x+i-1)] = c; - vid_buf[(XRES+BARSIZE)*(y+16)+(x+i-1)] = c; - } - for (j=0; j<18; j++) - { - vid_buf[(XRES+BARSIZE)*(y+j-1)+(x-1)] = c; - vid_buf[(XRES+BARSIZE)*(y+j-1)+(x+28)] = c; - } - } -} -*/ //draws walls and elements for menu int draw_tool_xy(pixel *vid_buf, int x, int y, int b, unsigned pc) { @@ -719,9 +438,6 @@ int draw_tool_xy(pixel *vid_buf, int x, int y, int b, unsigned pc) return 26; if ((b&0xFF) == PT_LIFE) { -#ifdef OpenGL - fillrect(vid_buf, x, y, 28, 16, PIXR(pc), PIXG(pc), PIXB(pc), 255); -#else for (j=1; j<15; j++) { for (i=1; i<27; i++) @@ -729,7 +445,6 @@ int draw_tool_xy(pixel *vid_buf, int x, int y, int b, unsigned pc) vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; } } -#endif c = PIXB(pc) + 3*PIXG(pc) + 2*PIXR(pc); if (c<544) { @@ -916,9 +631,6 @@ int draw_tool_xy(pixel *vid_buf, int x, int y, int b, unsigned pc) { //x = 2+32*(b/2); //y = YRES+2+20*(b%2); -#ifdef OpenGL - fillrect(vid_buf, x, y, 28, 16, PIXR(pc), PIXG(pc), PIXB(pc), 255); -#else for (j=1; j<15; j++) { for (i=1; i<27; i++) @@ -926,7 +638,6 @@ int draw_tool_xy(pixel *vid_buf, int x, int y, int b, unsigned pc) vid_buf[(XRES+BARSIZE)*(y+j)+(x+i)] = pc; } } -#endif if (b==0) { for (j=4; j<12; j++) @@ -1028,8 +739,6 @@ inline int drawchar(pixel *vid, int x, int y, int c, int r, int g, int b, int a) int drawtext(pixel *vid, int x, int y, const char *s, int r, int g, int b, int a) { -#ifdef OpenGL -#else int sx = x; for (; *s; s++) { @@ -1072,7 +781,6 @@ int drawtext(pixel *vid, int x, int y, const char *s, int r, int g, int b, int a else x = drawchar(vid, x, y, *(unsigned char *)s, r, g, b, a); } -#endif return x; } @@ -1089,8 +797,6 @@ int drawtext_outline(pixel *vid, int x, int y, const char *s, int r, int g, int } int drawtextwrap(pixel *vid, int x, int y, int w, const char *s, int r, int g, int b, int a) { -#ifdef OpenGL -#else int sx = x; int rh = 12; int rw = 0; @@ -1158,21 +864,11 @@ int drawtextwrap(pixel *vid, int x, int y, int w, const char *s, int r, int g, i } return rh; - #endif } //draws a rectange, (x,y) are the top left coords. void drawrect(pixel *vid, int x, int y, int w, int h, int r, int g, int b, int a) { -#ifdef OpenGL - glBegin(GL_LINE_LOOP); - glColor4ub(r, g, b, a); - glVertex2i(x, y); - glVertex2i(x+w, y); - glVertex2i(x+w, y+h); - glVertex2i(x, y+h); - glEnd(); -#else int i; for (i=0; i<=w; i++) { @@ -1184,26 +880,15 @@ void drawrect(pixel *vid, int x, int y, int w, int h, int r, int g, int b, int a drawpixel(vid, x, y+i, r, g, b, a); drawpixel(vid, x+w, y+i, r, g, b, a); } -#endif } //draws a rectangle and fills it in as well. void fillrect(pixel *vid, int x, int y, int w, int h, int r, int g, int b, int a) { -#ifdef OpenGL - glBegin(GL_QUADS); - glColor4ub(r, g, b, a); - glVertex2i(x, y); - glVertex2i(x+w, y); - glVertex2i(x+w, y+h); - glVertex2i(x, y+h); - glEnd(); -#else int i,j; for (j=1; j=XRES+BARSIZE || r>=YRES+MENUSIZE) - return; - if (a!=255) - { - glBegin (GL_QUADS); - glColor4ub(r,g,b,a); - glVertex2i(x, y); - } - vid[y*(XRES+BARSIZE)+x] = PIXRGB(r,g,b); -#else pixel t; if (x<0 || y<0 || x>=XRES+BARSIZE || y>=YRES+MENUSIZE) return; @@ -1406,7 +1071,6 @@ inline void blendpixel(pixel *vid, int x, int y, int r, int g, int b, int a) b = (a*b + (255-a)*PIXB(t)) >> 8; } vid[y*(XRES+BARSIZE)+x] = PIXRGB(r,g,b); -#endif //OpenGL } void draw_icon(pixel *vid_buf, int x, int y, char ch, int flag) @@ -2010,2036 +1674,6 @@ void render_parts(pixel *vid) } } -//the old function for drawing the particles -void draw_parts(pixel *vid) -{ - int i, x, y, t, nx, ny, r, s; - int orbd[4] = {0, 0, 0, 0}; - int orbl[4] = {0, 0, 0, 0}; - int cr, cg, cb; - float fr, fg, fb; - float pt = R_TEMP; - if (GRID_MODE)//draws the grid - { - for (ny=0; ny(nx-3) && mousex<(nx+3) && mousey<(ny+3) && mousey>(ny-3)) //If mous is in the head - { - sprintf(buff, "%3d", parts[i].life); //Show HP - drawtext(vid, mousex-8-2*(parts[i].life<100)-2*(parts[i].life<10), mousey-12, buff, 255, 255, 255, 255); - } - - if ((int)player[2](nx-3) && mousex<(nx+3) && mousey<(ny+3) && mousey>(ny-3)) //If mous is in the head - { - sprintf(buff, "%3d", parts[i].life); //Show HP - drawtext(vid, mousex-8-2*(parts[i].life<100)-2*(parts[i].life<10), mousey-12, buff, 255, 255, 255, 255); - } - - if ((int)player2[2]> (x+18)) & 1; - cb += (parts[i].ctype >> x) & 1; - } - for (x=0; x<12; x++) - cg += (parts[i].ctype >> (x+9)) & 1; - x = 624/(cr+cg+cb+1); - cr *= x; - cg *= x; - cb *= x; - cr = cr>255?255:cr; - cg = cg>255?255:cg; - cb = cb>255?255:cb; - blendpixel(vid, nx, ny, cr, cg, cb, 255); - } - else - { - cr = PIXR(ptypes[t].pcolors); - cg = PIXG(ptypes[t].pcolors); - cb = PIXB(ptypes[t].pcolors); - blendpixel(vid, nx, ny, cr, cg, cb, 255); - } - } - else if (cmode==CM_GRAD) - { - float frequency = 0.05; - int q = parts[i].temp-40; - cr = sin(frequency*q) * 16 + PIXR(ptypes[t].pcolors); - cg = sin(frequency*q) * 16 + PIXG(ptypes[t].pcolors); - cb = sin(frequency*q) * 16 + 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 (cmode==CM_FANCY && //all fancy mode effects go here, this is a list of exceptions to skip - t!=PT_FIRE && t!=PT_PLSM && t!=PT_WTRV && - t!=PT_HFLM && t!=PT_SPRK && t!=PT_FIRW && - t!=PT_DUST && t!=PT_FIRW && t!=PT_FWRK && - t!=PT_NEUT && t!=PT_LAVA && t!=PT_BOMB && - t!=PT_PHOT && t!=PT_THDR && t!=PT_SMKE && - t!=PT_LCRY && t!=PT_SWCH && t!=PT_PCLN && - t!=PT_PUMP && t!=PT_HSWC && t!=PT_FILT && - t!=PT_GPMP && t!=PT_PBCN && t!=PT_LIFE && - t!=PT_O2 && t!=PT_H2 && t!=PT_PVOD) - { - if (ptypes[parts[i].type].properties&TYPE_LIQUID) //special effects for liquids in fancy mode - { - 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) - { - fr = restrict_flt(parts[i].temp-(275.13f+32.0f), 0, 128)/50.0f; - fg = restrict_flt(parts[i].ctype, 0, 128)/50.0f; - fb = restrict_flt(parts[i].tmp, 0, 128)/50.0f; - - cr = restrict_flt(64.0f+parts[i].temp-(275.13f+32.0f), 0, 255); - cg = restrict_flt(64.0f+parts[i].ctype, 0, 255); - cb = restrict_flt(64.0f+parts[i].tmp, 0, 255); - - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(cr, cg, cb); - 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; - - 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 //if no fancy effects, draw a simple pixel - { - vid[ny*(XRES+BARSIZE)+nx] = ptypes[t].pcolors; - } - } - else if (cmode==CM_LIFE) - { - float frequency = 0.4; - int q; - if (!(parts[i].life<5)) - q = sqrt(parts[i].life); - else - q = parts[i].life; - cr = sin(frequency*q) * 100 + 128; - cg = sin(frequency*q) * 100 + 128; - cb = sin(frequency*q) * 100 + 128; - 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_QRTZ || t==PT_PQRT) - { - int z = parts[i].tmp - 5;//speckles! - if (parts[i].temp>(ptransitions[t].thv-800.0f))//hotglow for quartz - { - float frequency = 3.1415/(2*ptransitions[t].thv-(ptransitions[t].thv-800.0f)); - int q = (parts[i].temp>ptransitions[t].thv)?ptransitions[t].thv-(ptransitions[t].thv-800.0f):parts[i].temp-(ptransitions[t].thv-800.0f); - cr = sin(frequency*q) * 226 + (z * 16 + PIXR(ptypes[t].pcolors)); - cg = sin(frequency*q*4.55 +3.14) * 34 + (z * 16 + PIXR(ptypes[t].pcolors)); - cb = sin(frequency*q*2.22 +3.14) * 64 + (z * 16 + PIXR(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 - { - cr = z * 16 + PIXR(ptypes[t].pcolors); - cg = z * 16 + PIXG(ptypes[t].pcolors); - cb = z * 16 + PIXB(ptypes[t].pcolors); - cr = cr>255?255:cr; - cg = cg>255?255:cg; - cb = cb>255?255:cb; - blendpixel(vid, nx, ny, cr, cg, cb, 255); - } - } - else if (t==PT_CLST) - { - int z = parts[i].tmp - 5;//speckles! - cr = z * 16 + PIXR(ptypes[t].pcolors); - cg = z * 16 + PIXG(ptypes[t].pcolors); - cb = z * 16 + PIXB(ptypes[t].pcolors); - cr = cr>255?255:cr; - cg = cg>255?255:cg; - cb = cb>255?255:cb; - blendpixel(vid, nx, ny, cr, cg, cb, 255); - } - else if (t==PT_CBNW) - { - int z = parts[i].tmp2 - 20;//speckles! - cr = z * 1 + PIXR(ptypes[t].pcolors); - cg = z * 2 + PIXG(ptypes[t].pcolors); - cb = z * 8 + PIXB(ptypes[t].pcolors); - cr = cr>255?255:cr; - cg = cg>255?255:cg; - cb = cb>255?255:cb; - blendpixel(vid, nx, ny, cr, cg, cb, 255); - } - else if (t==PT_SPNG) - { - cr = PIXR(ptypes[t].pcolors) - parts[i].life*15; - cg = PIXG(ptypes[t].pcolors) - parts[i].life*15; - cb = PIXB(ptypes[t].pcolors) - parts[i].life*15; - if (cr<=50) - cr = 50; - if (cg<=50) - cg = 50; - if (cb<=20) - cb = 20; - blendpixel(vid, nx, ny, cr, cg, cb, 255); - - } - else if (t==PT_LIFE && parts[i].ctype>=0 && parts[i].ctype < NGOLALT) { - pixel pc; - if (parts[i].ctype==NGT_LOTE)//colors for life states - { - if (parts[i].tmp==2) - pc = PIXRGB(255, 128, 0); - else if (parts[i].tmp==1) - pc = PIXRGB(255, 255, 0); - else - pc = PIXRGB(255, 0, 0); - } - else if (parts[i].ctype==NGT_FRG2)//colors for life states - { - if (parts[i].tmp==2) - pc = PIXRGB(0, 100, 50); - else - pc = PIXRGB(0, 255, 90); - } - else if (parts[i].ctype==NGT_STAR)//colors for life states - { - if (parts[i].tmp==4) - pc = PIXRGB(0, 0, 128); - else if (parts[i].tmp==3) - pc = PIXRGB(0, 0, 150); - else if (parts[i].tmp==2) - pc = PIXRGB(0, 0, 190); - else if (parts[i].tmp==1) - pc = PIXRGB(0, 0, 230); - else - pc = PIXRGB(0, 0, 70); - } - else if (parts[i].ctype==NGT_FROG)//colors for life states - { - if (parts[i].tmp==2) - pc = PIXRGB(0, 100, 0); - else - pc = PIXRGB(0, 255, 0); - } - else if (parts[i].ctype==NGT_BRAN)//colors for life states - { - if (parts[i].tmp==1) - pc = PIXRGB(150, 150, 0); - else - pc = PIXRGB(255, 255, 0); - } else { - pc = gmenu[parts[i].ctype].colour; - } - blendpixel(vid, nx, ny, PIXR(pc), PIXG(pc), PIXB(pc), 255); - if (cmode==CM_BLOB) - { - blendpixel(vid, nx+1, ny, PIXR(pc), PIXG(pc), PIXB(pc), 223); - blendpixel(vid, nx-1, ny, PIXR(pc), PIXG(pc), PIXB(pc), 223); - blendpixel(vid, nx, ny+1, PIXR(pc), PIXG(pc), PIXB(pc), 223); - blendpixel(vid, nx, ny-1, PIXR(pc), PIXG(pc), PIXB(pc), 223); - - blendpixel(vid, nx+1, ny-1, PIXR(pc), PIXG(pc), PIXB(pc), 112); - blendpixel(vid, nx-1, ny-1, PIXR(pc), PIXG(pc), PIXB(pc), 112); - blendpixel(vid, nx+1, ny+1, PIXR(pc), PIXG(pc), PIXB(pc), 112); - blendpixel(vid, nx-1, ny+1, PIXR(pc), PIXG(pc), PIXB(pc), 112); - } - } - else if (t==PT_DEUT) - { - - if (parts[i].life>=700&&(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)) - { - x = nx/CELL; - y = ny/CELL; - cr = 20; - cg = 20; - cb = 20; - cg += fire_g[y][x]; - if (cg > 255) cg = 255; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if (cb > 255) cb = 255; - fire_b[y][x] = cb; - cr += fire_r[y][x]; - if (cr > 255) cr = 255; - fire_r[y][x] = cr; - } - else - { - 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); - - } - - } - else if (t==PT_DUST && parts[i].life >= 1)//dust colors! - { - x = nx; - y = ny; - cr = parts[i].flags; - cg = parts[i].tmp; - cb = parts[i].ctype; - if (decorations_enable && parts[i].dcolour) - { - int a = (parts[i].dcolour>>24)&0xFF; - cr = (a*((parts[i].dcolour>>16)&0xFF) + (255-a)*cr) >> 8; - cg = (a*((parts[i].dcolour>>8)&0xFF) + (255-a)*cg) >> 8; - cb = (a*((parts[i].dcolour)&0xFF) + (255-a)*cb) >> 8; - } - if (cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY) - { - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(cg,cb,cr);//yes i know this pixel is different color than the glow... i don't know why - cg = cg/4; - cb = cb/4; - cr = cr/4; - x = nx/CELL; - y = ny/CELL; - cg += fire_g[y][x]; - if (cg > 255) cg = 255; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if (cb > 255) cb = 255; - fire_b[y][x] = cb; - cr += fire_r[y][x]; - if (cr > 255) cr = 255; - fire_r[y][x] = cr; - } - else - blendpixel(vid,x,y,cg,cb,cr,255); - } - else if (t==PT_GRAV) - { - cr = 20; - cg = 20; - cb = 20; - if (parts[i].vx>0) - { - cr += (parts[i].vx)*GRAV_R; - cg += (parts[i].vx)*GRAV_G; - cb += (parts[i].vx)*GRAV_B; - } - if (parts[i].vy>0) - { - cr += (parts[i].vy)*GRAV_G; - cg += (parts[i].vy)*GRAV_B; - cb += (parts[i].vy)*GRAV_R; - - } - if (parts[i].vx<0) - { - cr -= (parts[i].vx)*GRAV_B; - cg -= (parts[i].vx)*GRAV_R; - cb -= (parts[i].vx)*GRAV_G; - - } - if (parts[i].vy<0) - { - cr -= (parts[i].vy)*GRAV_R2; - cg -= (parts[i].vy)*GRAV_G2; - cb -= (parts[i].vy)*GRAV_B2; - } - if (cr>255) - cr=255; - if (cr<0) - cr=0; - if (cg>255) - cg=255; - if (cg<0) - cg=0; - if (cb>255) - cb=255; - if (cb<0) - cb=0; - blendpixel(vid, nx, ny, cr, cg, cb, 255); - } - else if (t==PT_WIFI) - { - float frequency = 0.0628; - int q = parts[i].tmp; - cr = sin(frequency*q + 0) * 127 + 128; - cg = sin(frequency*q + 2) * 127 + 128; - cb = sin(frequency*q + 4) * 127 + 128; - blendpixel(vid, nx, ny, cr, cg, cb, 255); - if (mousex==(nx) && mousey==(ny) && DEBUG_MODE)//draw lines connecting wifi channels - { - int z; - for (z = 0; z0 && ny+nyo0 && nx+nxo255) fire_rv = 255; - fire_r[(ny+nyo)/CELL][(nx+nxo)/CELL] = fire_rv; - } - } - addpixel(vid, nx, ny, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors), 200); - } - if (DEBUG_MODE) {//draw lines connecting portals - blendpixel(vid,nx,ny, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors),255); - if (mousex==(nx) && mousey==(ny)) - { - int z; - for (z = 0; z0 && ny+nyo0 && nx+nxo255) fire_bv = 255; - fire_b[(ny+nyo)/CELL][(nx+nxo)/CELL] = fire_bv; - } - } - addpixel(vid, nx, ny, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors), 200); - } - if (DEBUG_MODE) {//draw lines connecting portals - blendpixel(vid,nx,ny, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors),255); - if (mousex==(nx) && mousey==(ny)) - { - int z; - for (z = 0; z> (x+18)) & 1; - cb += (parts[i].ctype >> x) & 1; - } - for (x=0; x<12; x++) - cg += (parts[i].ctype >> (x+9)) & 1; - x = 624/(cr+cg+cb+1); - cr *= x; - cg *= x; - cb *= x; - cr = cr>255?255:cr; - cg = cg>255?255:cg; - cb = cb>255?255:cb; - if (fabs(parts[i].vx)+fabs(parts[i].vy)>0 &&(cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY)) { - fg = 0; - fb = 0; - fr = 0; - fg = cg/40 * fabs(parts[i].vx)+fabs(parts[i].vy); - fb = cb/40 * fabs(parts[i].vx)+fabs(parts[i].vy); - fr = cr/40 * fabs(parts[i].vx)+fabs(parts[i].vy); - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB((int)restrict_flt(cr, 0, 255), (int)restrict_flt(cg, 0, 255), (int)restrict_flt(cb, 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; - } - else - blendpixel(vid, nx, ny, cr, cg, cb, 255); - } - else if (t==PT_PIPE) - { - if (parts[i].ctype==2) - { - cr = 50; - cg = 1; - cb = 1; - } - else if (parts[i].ctype==3) - { - cr = 1; - cg = 50; - cb = 1; - } - else if (parts[i].ctype==4) - { - cr = 1; - cg = 1; - cb = 50; - } - else if (parts[i].temp<272.15&&parts[i].ctype!=1) - { - if (parts[i].temp>173.25&&parts[i].temp<273.15) - { - cr = 50; - cg = 1; - cb = 1; - } - if (parts[i].temp>73.25&&parts[i].temp<=173.15) - { - cr = 1; - cg = 50; - cb = 1; - } - if (parts[i].temp>=0&&parts[i].temp<=73.15) - { - cr = 1; - cg = 1; - cb = 50; - } - } - else - { - cr = PIXR(ptypes[t].pcolors); - cg = PIXG(ptypes[t].pcolors); - cb = PIXB(ptypes[t].pcolors); - } - if ((parts[i].tmp&0xFF)>0 && (parts[i].tmp&0xFF)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>75) parts[i].life = 75; - if (parts[i].life<49) parts[i].life = 49; - s = (parts[i].life-49)*3; - if (s==0) s = 1; - cr = 0x86 + s*4; - cg = 0x36 + s*1; - cb = 0x90 + s*2; - - if (cr>=255) - cr = 255; - if (cg>=255) - cg = 255; - if (cb>=255) - cb = 255; - - blendpixel(vid, nx, ny, cr, cg, cb, 255); - - if (cmode==CM_BLOB) - { - 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); - } - } - else if (t==PT_NEUT) - { - if (cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY) - { - vid[ny*(XRES+BARSIZE)+nx] = ptypes[t].pcolors; - cg = 8; - cb = 12; - x = nx/CELL; - y = ny/CELL; - cg += fire_g[y][x]; - if (cg > 255) cg = 255; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if (cb > 255) cb = 255; - fire_b[y][x] = cb; - } - else - { - cr = 0x20; - cg = 0xE0; - cb = 0xFF; - 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); - blendpixel(vid, nx+1, ny-1, cr, cg, cb, 32); - blendpixel(vid, nx-1, ny+1, cr, cg, cb, 32); - blendpixel(vid, nx+1, ny+1, cr, cg, cb, 32); - blendpixel(vid, nx-1, ny-1, cr, cg, cb, 32); - } - } - else if (t==PT_FILT) - { - int temp_bin = (int)((parts[i].temp-273.0f)*0.025f); - if (temp_bin < 0) temp_bin = 0; - if (temp_bin > 25) temp_bin = 25; - parts[i].ctype = 0x1F << temp_bin; - cg = 0; - cb = 0; - cr = 0; - for (x=0; x<12; x++) { - cr += (parts[i].ctype >> (x+18)) & 1; - cb += (parts[i].ctype >> x) & 1; - } - for (x=0; x<12; x++) - cg += (parts[i].ctype >> (x+9)) & 1; - x = 624/(cr+cg+cb+1); - cr *= x; - cg *= x; - cb *= x; - cr = cr>255?255:cr; - cg = cg>255?255:cg; - cb = cb>255?255:cb; - blendpixel(vid, nx, ny, cr, cg, cb, 127); - } - else if (t==PT_BRAY && parts[i].tmp==0) - { - int trans = parts[i].life * 7; - if (trans>255) trans = 255; - if (parts[i].ctype) { - cg = 0; - cb = 0; - cr = 0; - for (x=0; x<12; x++) { - cr += (parts[i].ctype >> (x+18)) & 1; - cb += (parts[i].ctype >> x) & 1; - } - for (x=0; x<12; x++) - cg += (parts[i].ctype >> (x+9)) & 1; - x = 624/(cr+cg+cb+1); - cr *= x; - cg *= x; - cb *= x; - cr = cr>255?255:cr; - cg = cg>255?255:cg; - cb = cb>255?255:cb; - blendpixel(vid, nx, ny, cr, cg, cb, trans); - } else - blendpixel(vid, nx, ny, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors), trans); - } - else if (t==PT_BRAY && parts[i].tmp==1) - { - int trans = parts[i].life/4; - if (trans>255) trans = 255; - if (parts[i].ctype) { - cg = 0; - cb = 0; - cr = 0; - for (x=0; x<12; x++) { - cr += (parts[i].ctype >> (x+18)) & 1; - cb += (parts[i].ctype >> x) & 1; - } - for (x=0; x<12; x++) - cg += (parts[i].ctype >> (x+9)) & 1; - x = 624/(cr+cg+cb+1); - cr *= x; - cg *= x; - cb *= x; - cr = cr>255?255:cr; - cg = cg>255?255:cg; - cb = cb>255?255:cb; - blendpixel(vid, nx, ny, cr, cg, cb, trans); - } else - blendpixel(vid, nx, ny, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors), trans); - } - else if (t==PT_BRAY && parts[i].tmp==2) - { - int trans = parts[i].life*100; - if (trans>255) trans = 255; - blendpixel(vid, nx, ny, 255, 150, 50, trans); - } - else if (t==PT_PHOT) - { - if (cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY) - { - cg = 0; - cb = 0; - cr = 0; - for (x=0; x<12; x++) { - cr += (parts[i].ctype >> (x+18)) & 1; - cb += (parts[i].ctype >> x) & 1; - } - for (x=0; x<12; x++) - cg += (parts[i].ctype >> (x+9)) & 1; - x = 624/(cr+cg+cb+1); - cr *= x; - cg *= x; - cb *= x; - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(cr>255?255:cr,cg>255?255:cg,cb>255?255:cb); - cr >>= 4; - cg >>= 4; - cb >>= 4; - x = nx/CELL; - y = ny/CELL; - cg += fire_g[y][x]; - if (cg > 255) cg = 255; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if (cb > 255) cb = 255; - fire_b[y][x] = cb; - cr += fire_r[y][x]; - if (cr > 255) cr = 255; - fire_r[y][x] = cr; - } - else - { - cg = 0; - cb = 0; - cr = 0; - for (x=0; x<12; x++) { - cr += (parts[i].ctype >> (x+18)) & 1; - cb += (parts[i].ctype >> x) & 1; - } - for (x=0; x<12; x++) - cg += (parts[i].ctype >> (x+9)) & 1; - x = 624/(cr+cg+cb+1); - cr *= x; - cg *= x; - cb *= x; - cr = cr>255?255:cr; - cg = cg>255?255:cg; - cb = cb>255?255:cb; - if(cmode == CM_PERS){ - if(parts[i].pavg[0] && parts[i].pavg[1]) - { - draw_line(vid, nx, ny, parts[i].pavg[0], parts[i].pavg[1], cr, cg, cb, XRES+BARSIZE); - } - else - { - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(cr, cg, cb); - } - } else { - 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); - blendpixel(vid, nx+1, ny-1, cr, cg, cb, 32); - blendpixel(vid, nx-1, ny+1, cr, cg, cb, 32); - blendpixel(vid, nx+1, ny+1, cr, cg, cb, 32); - blendpixel(vid, nx-1, ny-1, cr, cg, cb, 32); - } - } - } - //Life can be 11 too, so don't just check for 10 - else if (t==PT_SWCH && parts[i].life >= 10) - { - x = nx; - y = ny; - blendpixel(vid,x,y,17,217,24,255); - } - else if (t==PT_SMKE) - { - if (cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY) - { - x = nx/CELL; - y = ny/CELL; - cg = 10; - cb = 10; - cr = 10; - cg += fire_g[y][x]; - if (cg > 50) cg = 50; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if (cb > 50) cb = 50; - fire_b[y][x] = cb; - cr += fire_r[y][x]; - if (cr > 50) cr = 50; - fire_r[y][x] = cr; - } - else - { - for (x=-3; x<4; x++) - { - for (y=-3; y<4; y++) - { - if (abs(x)+abs(y) <2 && !(abs(x)==2||abs(y)==2)) - blendpixel(vid,x+nx,y+ny,100,100,100,30); - if (abs(x)+abs(y) <=3 && abs(x)+abs(y)) - blendpixel(vid,x+nx,y+ny,100,100,100,10); - if (abs(x)+abs(y) == 2) - blendpixel(vid,x+nx,y+ny,100,100,100,20); - } - } - } - } - else if (t==PT_WTRV) - { - if (cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY) - { - x = nx/CELL; - y = ny/CELL; - cg = PIXG(ptypes[t].pcolors)/3; - cb = PIXB(ptypes[t].pcolors)/3; - cr = PIXR(ptypes[t].pcolors)/3; - cg += fire_g[y][x]; - if (cg > PIXG(ptypes[t].pcolors)/2) cg = PIXG(ptypes[t].pcolors)/2; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if (cb > PIXB(ptypes[t].pcolors)/2) cb = PIXB(ptypes[t].pcolors)/2; - fire_b[y][x] = cb; - cr += fire_r[y][x]; - if (cr > PIXR(ptypes[t].pcolors)/2) cr = PIXR(ptypes[t].pcolors)/2; - fire_r[y][x] = cr; - } - else - { - for (x=-3; x<4; x++) - { - for (y=-3; y<4; y++) - { - if (abs(x)+abs(y) <2 && !(abs(x)==2||abs(y)==2)) - blendpixel(vid,x+nx,y+ny, PIXR(ptypes[t].pcolors)/1.6, PIXG(ptypes[t].pcolors)/1.6, PIXB(ptypes[t].pcolors)/1.6, 30); - if (abs(x)+abs(y) <=3 && abs(x)+abs(y)) - blendpixel(vid,x+nx,y+ny, PIXR(ptypes[t].pcolors)/1.6, PIXG(ptypes[t].pcolors)/1.6, PIXB(ptypes[t].pcolors)/1.6, 10); - if (abs(x)+abs(y) == 2) - blendpixel(vid,x+nx,y+ny, PIXR(ptypes[t].pcolors)/1.6, PIXG(ptypes[t].pcolors)/1.6, PIXB(ptypes[t].pcolors)/1.6, 20); - } - } - } - } - else if (t==PT_O2) - { - if (cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY) - { - x = nx/CELL; - y = ny/CELL; - cg = PIXG(ptypes[t].pcolors)/3; - cb = PIXB(ptypes[t].pcolors)/3; - cr = PIXR(ptypes[t].pcolors)/3; - cg += fire_g[y][x]; - if (cg > PIXG(ptypes[t].pcolors)/2) cg = PIXG(ptypes[t].pcolors)/2; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if (cb > PIXB(ptypes[t].pcolors)/2) cb = PIXB(ptypes[t].pcolors)/2; - fire_b[y][x] = cb; - cr += fire_r[y][x]; - if (cr > PIXR(ptypes[t].pcolors)/2) cr = PIXR(ptypes[t].pcolors)/2; - fire_r[y][x] = cr; - } - else - { - for (x=-3; x<4; x++) - { - for (y=-3; y<4; y++) - { - if (abs(x)+abs(y) <2 && !(abs(x)==2||abs(y)==2)) - blendpixel(vid,x+nx,y+ny, PIXR(ptypes[t].pcolors)/1.6, PIXG(ptypes[t].pcolors)/1.6, PIXB(ptypes[t].pcolors)/1.6, 30); - if (abs(x)+abs(y) <=3 && abs(x)+abs(y)) - blendpixel(vid,x+nx,y+ny, PIXR(ptypes[t].pcolors)/1.6, PIXG(ptypes[t].pcolors)/1.6, PIXB(ptypes[t].pcolors)/1.6, 10); - if (abs(x)+abs(y) == 2) - blendpixel(vid,x+nx,y+ny, PIXR(ptypes[t].pcolors)/1.6, PIXG(ptypes[t].pcolors)/1.6, PIXB(ptypes[t].pcolors)/1.6, 20); - } - } - } - } - else if (t==PT_H2) - { - if (cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY) - { - x = nx/CELL; - y = ny/CELL; - cg = PIXG(ptypes[t].pcolors)/3; - cb = PIXB(ptypes[t].pcolors)/3; - cr = PIXR(ptypes[t].pcolors)/3; - cg += fire_g[y][x]; - if (cg > PIXG(ptypes[t].pcolors)/2) cg = PIXG(ptypes[t].pcolors)/2; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if (cb > PIXB(ptypes[t].pcolors)/2) cb = PIXB(ptypes[t].pcolors)/2; - fire_b[y][x] = cb; - cr += fire_r[y][x]; - if (cr > PIXR(ptypes[t].pcolors)/2) cr = PIXR(ptypes[t].pcolors)/2; - fire_r[y][x] = cr; - } - else - { - for (x=-3; x<4; x++) - { - for (y=-3; y<4; y++) - { - if (abs(x)+abs(y) <2 && !(abs(x)==2||abs(y)==2)) - blendpixel(vid,x+nx,y+ny, PIXR(ptypes[t].pcolors)/1.6, PIXG(ptypes[t].pcolors)/1.6, PIXB(ptypes[t].pcolors)/1.6, 30); - if (abs(x)+abs(y) <=3 && abs(x)+abs(y)) - blendpixel(vid,x+nx,y+ny, PIXR(ptypes[t].pcolors)/1.6, PIXG(ptypes[t].pcolors)/1.6, PIXB(ptypes[t].pcolors)/1.6, 10); - if (abs(x)+abs(y) == 2) - blendpixel(vid,x+nx,y+ny, PIXR(ptypes[t].pcolors)/1.6, PIXG(ptypes[t].pcolors)/1.6, PIXB(ptypes[t].pcolors)/1.6, 20); - } - } - } - } - else if (t==PT_THDR) - { - if (cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY) - { - vid[ny*(XRES+BARSIZE)+nx] = ptypes[t].pcolors; - cg = 16; - cb = 20; - cr = 12; - x = nx/CELL; - y = ny/CELL; - cg += fire_g[y][x]; - if (cg > 255) cg = 255; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if (cb > 255) cb = 255; - fire_b[y][x] = cb; - cr += fire_r[y][x]; - if (cr > 255) cr = 255; - fire_r[y][x] = cr; - } - else - { - cr = 0xFF; - cg = 0xFF; - cb = 0xA0; - 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); - blendpixel(vid, nx+1, ny-1, cr, cg, cb, 32); - blendpixel(vid, nx-1, ny+1, cr, cg, cb, 32); - blendpixel(vid, nx+1, ny+1, cr, cg, cb, 32); - blendpixel(vid, nx-1, ny-1, cr, cg, cb, 32); - } - } - else if (t==PT_GLOW) - { - fr = restrict_flt(parts[i].temp-(275.13f+32.0f), 0, 128)/50.0f; - fg = restrict_flt(parts[i].ctype, 0, 128)/50.0f; - fb = restrict_flt(parts[i].tmp, 0, 128)/50.0f; - - cr = restrict_flt(64.0f+parts[i].temp-(275.13f+32.0f), 0, 255); - cg = restrict_flt(64.0f+parts[i].ctype, 0, 255); - cb = restrict_flt(64.0f+parts[i].tmp, 0, 255); - - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(cr, cg, cb); - if (cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY) - { - 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; - } - if (cmode == CM_BLOB) { - 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); - } - } - else if (t==PT_LCRY) - { - uint8 GR = 0x50+((parts[i].life>10?10:parts[i].life)*10); - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(GR, GR, GR); - if (cmode == CM_BLOB) { - blendpixel(vid, nx+1, ny, GR, GR, GR, 223); - blendpixel(vid, nx-1, ny, GR, GR, GR, 223); - blendpixel(vid, nx, ny+1, GR, GR, GR, 223); - blendpixel(vid, nx, ny-1, GR, GR, GR, 223); - - blendpixel(vid, nx+1, ny-1, GR, GR, GR, 112); - blendpixel(vid, nx-1, ny-1, GR, GR, GR, 112); - blendpixel(vid, nx+1, ny+1, GR, GR, GR, 112); - blendpixel(vid, nx-1, ny+1, GR, GR, GR, 112); - } - } - else if (t==PT_PCLN) - { - uint8 GR = 0x3B+((parts[i].life>10?10:parts[i].life)*19); - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(GR, GR, 10); - if (cmode == CM_BLOB) { - blendpixel(vid, nx+1, ny, GR, GR, 10, 223); - blendpixel(vid, nx-1, ny, GR, GR, 10, 223); - blendpixel(vid, nx, ny+1, GR, GR, 10, 223); - blendpixel(vid, nx, ny-1, GR, GR, 10, 223); - - blendpixel(vid, nx+1, ny-1, GR, GR, 10, 112); - blendpixel(vid, nx-1, ny-1, GR, GR, 10, 112); - blendpixel(vid, nx+1, ny+1, GR, GR, 10, 112); - blendpixel(vid, nx-1, ny+1, GR, GR, 10, 112); - } - } - else if (t==PT_PBCN) - { - uint8 GR = 0x3B+((parts[i].life>10?10:parts[i].life)*19); - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(GR, GR/2, 10); - if (cmode == CM_BLOB) { - blendpixel(vid, nx+1, ny, GR, GR/2, 10, 223); - blendpixel(vid, nx-1, ny, GR, GR/2, 10, 223); - blendpixel(vid, nx, ny+1, GR, GR/2, 10, 223); - blendpixel(vid, nx, ny-1, GR, GR/2, 10, 223); - - blendpixel(vid, nx+1, ny-1, GR, GR/2, 10, 112); - blendpixel(vid, nx-1, ny-1, GR, GR/2, 10, 112); - blendpixel(vid, nx+1, ny+1, GR, GR/2, 10, 112); - blendpixel(vid, nx-1, ny+1, GR, GR/2, 10, 112); - } - } - else if (t==PT_DLAY) - { - int stage = (int)(((float)parts[i].life/(parts[i].temp-273.15))*100.0f); - cr = PIXR(ptypes[t].pcolors)+stage; - cg = PIXG(ptypes[t].pcolors)+stage; - cb = PIXB(ptypes[t].pcolors)+stage; - if(cr>255) - cr = 255; - if(cg>255) - cg = 255; - if(cb>255) - cb = 255; - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(cr, cg, cb); - if (cmode == CM_BLOB) { - 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); - } - } - else if (t==PT_HSWC) - { - uint8 GR = 0x3B+((parts[i].life>10?10:parts[i].life)*19); - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(GR, 10, 10); - if (cmode == CM_BLOB) { - blendpixel(vid, nx+1, ny, GR, 10, 10, 223); - blendpixel(vid, nx-1, ny, GR, 10, 10, 223); - blendpixel(vid, nx, ny+1, GR, 10, 10, 223); - blendpixel(vid, nx, ny-1, GR, 10, 10, 223); - - blendpixel(vid, nx+1, ny-1, GR, 10, 10, 112); - blendpixel(vid, nx-1, ny-1, GR, 10, 10, 112); - blendpixel(vid, nx+1, ny+1, GR, 10, 10, 112); - blendpixel(vid, nx-1, ny+1, GR, 10, 10, 112); - } - } - else if (t==PT_PVOD) - { - uint8 GR = 0x3B+((parts[i].life>10?10:parts[i].life)*16); - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(GR, 30, 30); - if (cmode == CM_BLOB) { - blendpixel(vid, nx+1, ny, GR, 30, 30, 223); - blendpixel(vid, nx-1, ny, GR, 30, 30, 223); - blendpixel(vid, nx, ny+1, GR, 30, 30, 223); - blendpixel(vid, nx, ny-1, GR, 30, 30, 223); - - blendpixel(vid, nx+1, ny-1, GR, 30, 30, 112); - blendpixel(vid, nx-1, ny-1, GR, 30, 30, 112); - blendpixel(vid, nx+1, ny+1, GR, 30, 30, 112); - blendpixel(vid, nx-1, ny+1, GR, 30, 30, 112); - } - } - else if (t==PT_STOR) - { - if(parts[i].tmp){ - vid[ny*(XRES+BARSIZE)+nx] = PIXPACK(0x50DFDF); - } else { - vid[ny*(XRES+BARSIZE)+nx] = PIXPACK(0x20AFAF); - } - } - else if (t==PT_PUMP) - { - uint8 GR = 0x3B+((parts[i].life>10?10:parts[i].life)*19); - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(10, 10, GR); - if (cmode == CM_BLOB) { - blendpixel(vid, nx+1, ny, 10, 10, GR, 223); - blendpixel(vid, nx-1, ny, 10, 10, GR, 223); - blendpixel(vid, nx, ny+1, 10, 10, GR, 223); - blendpixel(vid, nx, ny-1, 10, 10, GR, 223); - - blendpixel(vid, nx+1, ny-1, 10, 10, GR, 112); - blendpixel(vid, nx-1, ny-1, 10, 10, GR, 112); - blendpixel(vid, nx+1, ny+1, 10, 10, GR, 112); - blendpixel(vid, nx-1, ny+1, 10, 10, GR, 112); - } - } - else if (t==PT_GPMP) - { - uint8 GR = 0x3B+((parts[i].life>10?10:parts[i].life)*19); - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(10, GR, GR); - if (cmode == CM_BLOB) { - blendpixel(vid, nx+1, ny, 10, GR, GR, 223); - blendpixel(vid, nx-1, ny, 10, GR, GR, 223); - blendpixel(vid, nx, ny+1, 10, GR, GR, 223); - blendpixel(vid, nx, ny-1, 10, GR, GR, 223); - - blendpixel(vid, nx+1, ny-1, 10, GR, GR, 112); - blendpixel(vid, nx-1, ny-1, 10, GR, GR, 112); - blendpixel(vid, nx+1, ny+1, 10, GR, GR, 112); - blendpixel(vid, nx-1, ny+1, 10, GR, GR, 112); - } - } - else if (t==PT_PLSM) - { - float ttemp = (float)parts[i].life; - int caddress = restrict_flt(restrict_flt(ttemp, 0.0f, 200.0f)*3, 0.0f, (200.0f*3)-3); - uint8 R = plasma_data[caddress]; - uint8 G = plasma_data[caddress+1]; - uint8 B = plasma_data[caddress+2]; - if (cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY) - { - cr = R/8; - cg = G/8; - cb = B/8; - x = nx/CELL; - y = ny/CELL; - cg += fire_g[y][x]; - if (cg > 255) cg = 255; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if (cb > 255) cb = 255; - fire_b[y][x] = cb; - cr += fire_r[y][x]; - if (cr > 255) cr = 255; - fire_r[y][x] = cr; - } - else - { - cr = R; - cg = G; - cb = B; - 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); - blendpixel(vid, nx+1, ny-1, cr, cg, cb, 32); - blendpixel(vid, nx-1, ny+1, cr, cg, cb, 32); - blendpixel(vid, nx+1, ny+1, cr, cg, cb, 32); - blendpixel(vid, nx-1, ny-1, cr, cg, cb, 32); - } - } else if (t==PT_HFLM) - { - float ttemp = (float)parts[i].life; - int caddress = restrict_flt(restrict_flt(ttemp, 0.0f, 200.0f)*3, 0.0f, (200.0f*3)-3); - uint8 R = hflm_data[caddress]; - uint8 G = hflm_data[caddress+1]; - uint8 B = hflm_data[caddress+2]; - if (cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY) - { - cr = R/8; - cg = G/8; - cb = B/8; - x = nx/CELL; - y = ny/CELL; - cg += fire_g[y][x]; - if (cg > 255) cg = 255; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if (cb > 255) cb = 255; - fire_b[y][x] = cb; - cr += fire_r[y][x]; - if (cr > 255) cr = 255; - fire_r[y][x] = cr; - } - else - { - cr = R; - cg = G; - cb = B; - 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); - blendpixel(vid, nx+1, ny-1, cr, cg, cb, 32); - blendpixel(vid, nx-1, ny+1, cr, cg, cb, 32); - blendpixel(vid, nx+1, ny+1, cr, cg, cb, 32); - blendpixel(vid, nx-1, ny-1, cr, cg, cb, 32); - } - } else if (t==PT_FIRW&&parts[i].tmp>=3) - { - float ttemp = (float)parts[i].tmp-4; - int caddress = restrict_flt(restrict_flt(ttemp, 0.0f, 200.0f)*3, 0.0f, (200.0f*3)-3); - uint8 R = firw_data[caddress]; - uint8 G = firw_data[caddress+1]; - uint8 B = firw_data[caddress+2]; - if (decorations_enable && parts[i].dcolour) - { - int a = (parts[i].dcolour>>24)&0xFF; - R = (a*((parts[i].dcolour>>16)&0xFF) + (255-a)*R) >> 8; - G = (a*((parts[i].dcolour>>8)&0xFF) + (255-a)*G) >> 8; - B = (a*((parts[i].dcolour)&0xFF) + (255-a)*B) >> 8; - } - if (cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY) - { - cr = R/2; - cg = G/2; - cb = B/2; - x = nx/CELL; - y = ny/CELL; - cg += fire_g[y][x]; - if (cg > 255) cg = 255; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if (cb > 255) cb = 255; - fire_b[y][x] = cb; - cr += fire_r[y][x]; - if (cr > 255) cr = 255; - fire_r[y][x] = cr; - } - else - { - cr = R; - cg = G; - cb = B; - 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); - blendpixel(vid, nx+1, ny-1, cr, cg, cb, 32); - blendpixel(vid, nx-1, ny+1, cr, cg, cb, 32); - blendpixel(vid, nx+1, ny+1, cr, cg, cb, 32); - 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_CRACK) { - int newx = 0; - float flicker = rand()%20; - float gradv = flicker + fabs(parts[i].vx)*17 + fabs(parts[i].vy)*17; - blendpixel(vid, nx, ny, cr, cg, cb, (gradv*4)>255?255:(gradv*4) ); - blendpixel(vid, nx+1, ny, cr, cg, cb, (gradv*2)>255?255:(gradv*2) ); - blendpixel(vid, nx-1, ny, cr, cg, cb, (gradv*2)>255?255:(gradv*2) ); - blendpixel(vid, nx, ny+1, cr, cg, cb, (gradv*2)>255?255:(gradv*2) ); - blendpixel(vid, nx, ny-1, cr, cg, cb, (gradv*2)>255?255:(gradv*2) ); - if (gradv>255) gradv=255; - blendpixel(vid, nx+1, ny-1, cr, cg, cb, gradv); - blendpixel(vid, nx-1, ny-1, cr, cg, cb, gradv); - blendpixel(vid, nx+1, ny+1, cr, cg, cb, gradv); - blendpixel(vid, nx-1, ny+1, cr, cg, cb, gradv); - for (newx = 1; 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.2f; - } - } else { - blendpixel(vid, nx, ny, cr, cg, cb, 255); - } - } - else if (parts[i].tmp==1) { - cr = PIXR(ptypes[t].pcolors); - cg = PIXG(ptypes[t].pcolors); - cb = PIXB(ptypes[t].pcolors); - if (cmode != CM_CRACK) { - int newx = 0; - float flicker = rand()%20; - float gradv = 4*parts[i].life + flicker; - 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, cr, cg, cb, 255); - } - } - else { - blendpixel(vid, nx, ny, 255, 255, 255, 255); - } - - } - else if (t==PT_GBMB) - { - if (parts[i].life<=0) {//not yet detonated - cr = PIXR(ptypes[t].pcolors); - cg = PIXG(ptypes[t].pcolors); - cb = PIXB(ptypes[t].pcolors); - if (cmode != CM_CRACK) { - int newx = 0; - float flicker = rand()%20; - float gradv = flicker + fabs(parts[i].vx)*17 + fabs(parts[i].vy)*17; - blendpixel(vid, nx, ny, cr, cg, cb, (gradv*4)>255?255:(gradv*4) ); - blendpixel(vid, nx+1, ny, cr, cg, cb, (gradv*2)>255?255:(gradv*2) ); - blendpixel(vid, nx-1, ny, cr, cg, cb, (gradv*2)>255?255:(gradv*2) ); - blendpixel(vid, nx, ny+1, cr, cg, cb, (gradv*2)>255?255:(gradv*2) ); - blendpixel(vid, nx, ny-1, cr, cg, cb, (gradv*2)>255?255:(gradv*2) ); - if (gradv>255) gradv=255; - blendpixel(vid, nx+1, ny-1, cr, cg, cb, gradv); - blendpixel(vid, nx-1, ny-1, cr, cg, cb, gradv); - blendpixel(vid, nx+1, ny+1, cr, cg, cb, gradv); - blendpixel(vid, nx-1, ny+1, cr, cg, cb, gradv); - for (newx = 1; 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.2f; - } - } else { - blendpixel(vid, nx, ny, cr, cg, cb, 255); - } - } - else {//exploding - cr = PIXR(ptypes[t].pcolors); - cg = PIXG(ptypes[t].pcolors); - cb = PIXB(ptypes[t].pcolors); - if (cmode != CM_CRACK) { - int newx = 0; - float flicker = rand()%20; - float gradv = 4*parts[i].life + flicker; - 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, cr, cg, cb, 255); - } - } - } - else if (ptypes[t].properties&PROP_HOT_GLOW && parts[i].temp>(ptransitions[t].thv-800.0f)) - { - float frequency = 3.1415/(2*ptransitions[t].thv-(ptransitions[t].thv-800.0f)); - int q = (parts[i].temp>ptransitions[t].thv)?ptransitions[t].thv-(ptransitions[t].thv-800.0f):parts[i].temp-(ptransitions[t].thv-800.0f); - 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)); - int caddress = restrict_flt(restrict_flt(ttemp, 0.0f, 200.0f)*3, 0.0f, (200.0f*3)-3); - uint8 R = flm_data[caddress]; - uint8 G = flm_data[caddress+1]; - uint8 B = flm_data[caddress+2]; - if (cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY) - { - cr = R/8; - cg = G/8; - cb = B/8; - x = nx/CELL; - y = ny/CELL; - cg += fire_g[y][x]; - if (cg > 255) cg = 255; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if (cb > 255) cb = 255; - fire_b[y][x] = cb; - cr += fire_r[y][x]; - if (cr > 255) cr = 255; - fire_r[y][x] = cr; - } - else - { - cr = parts[i].life * 8; - cg = parts[i].life * 2; - cb = parts[i].life; - if (cr>255) cr = 255; - if (cg>192) cg = 212; - if (cb>128) cb = 192; - blendpixel(vid, nx, ny, cr, cg, cb, 255); - 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); - blendpixel(vid, nx+1, ny-1, cr, cg, cb, 32); - blendpixel(vid, nx-1, ny+1, cr, cg, cb, 32); - blendpixel(vid, nx+1, ny+1, cr, cg, cb, 32); - blendpixel(vid, nx-1, ny-1, cr, cg, cb, 32); - } - // Older Code - /*if(cmode == 3||cmode==4 || cmode==6) - { - cr = parts[i].life / 4; - cg = parts[i].life / 16; - cb = parts[i].life / 32; - if(cr>255) cr = 255; - if(cg>192) cg = 212; - if(cb>128) cb = 192; - x = nx/CELL; - y = ny/CELL; - cr += fire_r[y][x]; - if(cr > 255) cr = 255; - fire_r[y][x] = cr; - cg += fire_g[y][x]; - if(cg > 255) cg = 255; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if(cb > 255) cb = 255; - fire_b[y][x] = cb; - } - else - { - cr = parts[i].life * 8; - cg = parts[i].life * 2; - cb = parts[i].life; - if(cr>255) cr = 255; - if(cg>192) cg = 212; - if(cb>128) cb = 192; - blendpixel(vid, nx, ny, cr, cg, cb, 255); - 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); - blendpixel(vid, nx+1, ny-1, cr, cg, cb, 32); - blendpixel(vid, nx-1, ny+1, cr, cg, cb, 32); - blendpixel(vid, nx+1, ny+1, cr, cg, cb, 32); - blendpixel(vid, nx-1, ny-1, cr, cg, cb, 32); - }*/ - } - else if (t==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; - blendpixel(vid, nx, ny, cr, cg, cb, 255); - blendpixel(vid, nx+1, ny, cr, cg, cb, 64); - blendpixel(vid, nx-1, ny, cr, cg, cb, 64); - blendpixel(vid, nx, ny+1, cr, cg, cb, 64); - blendpixel(vid, nx, ny-1, cr, cg, cb, 64); - if (cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY) - { - cr /= 32; - cg /= 32; - cb /= 32; - x = nx/CELL; - y = ny/CELL; - cr += fire_r[y][x]; - if (cr > 255) cr = 255; - fire_r[y][x] = cr; - cg += fire_g[y][x]; - if (cg > 255) cg = 255; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if (cb > 255) cb = 255; - fire_b[y][x] = cb; - } - } - else if (t==PT_LAVA || t==PT_SPRK) - { - vid[ny*(XRES+BARSIZE)+nx] = ptypes[t].pcolors; - if (cmode == CM_FIRE||cmode==CM_BLOB || cmode==CM_FANCY) - { - if (t == PT_LAVA) - { - cr = 3; - cg = i%2; - cb = 0; - } - else - { - cr = 8; - cg = 12; - cb = 16; - } - x = nx/CELL; - y = ny/CELL; - cr += fire_r[y][x]; - if (cr > 255) cr = 255; - fire_r[y][x] = cr; - cg += fire_g[y][x]; - if (cg > 255) cg = 255; - fire_g[y][x] = cg; - cb += fire_b[y][x]; - if (cb > 255) cb = 255; - fire_b[y][x] = cb; - } - } - /*else if((t==PT_COAL || t==PT_BCOL) && parts[i].tmp2 > 100.0f-80.0f){ - float frequency = 3.1415/(2*100.0f-(100.0f-80.0f)); - int q = (parts[i].tmp2>100.0f)?100.0f-(100.0f-80.0f):parts[i].tmp2-(100.0f-80.0f); - cr = PIXR(ptypes[t].pcolors); - cg = PIXG(ptypes[t].pcolors); - cb = PIXB(ptypes[t].pcolors); - - cr += parts[i].tmp2; - cg += parts[i].tmp2; - cb += parts[i].tmp2; - - - cr += sin(frequency*q) * 226; - cg += sin(frequency*q*4.55 +3.14) * 34; - cb += sin(frequency*q*2.22 +3.14) * 64; - - 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_COAL || t==PT_BCOL){ - cr = PIXR(ptypes[t].pcolors); - cg = PIXG(ptypes[t].pcolors); - //cb = PIXB(ptypes[t].pcolors); - - cr += (parts[i].tmp2-295.15f)/3; - //cg += (parts[i].tmp2-273.15f)/3; - //cb += (parts[i].tmp2-273.15f)/3; - if (cr>=170) - cr = 170; - if (cr<=cg) - cr = cg; - - cg = cb = cr; - - if((parts[i].temp-295.15f) > 300.0f-200.0f) - { - float frequency = 3.1415/(2*300.0f-(300.0f-200.0f)); - int q = ((parts[i].temp-295.15f)>300.0f)?300.0f-(300.0f-200.0f):(parts[i].temp-295.15f)-(300.0f-200.0f); - - cr += sin(frequency*q) * 226; - cg += sin(frequency*q*4.55 +3.14) * 34; - cb += sin(frequency*q*2.22 +3.14) * 64; - } - - 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 no special effect, draw a simple pixel - vid[ny*(XRES+BARSIZE)+nx] = ptypes[t].pcolors; - } - else //heat view - { - float ttemp = parts[i].temp+(-MIN_TEMP); - int caddress = restrict_flt((int)( restrict_flt(ttemp, 0.0f, MAX_TEMP+(-MIN_TEMP)) / ((MAX_TEMP+(-MIN_TEMP))/1024) ) *3, 0.0f, (1024.0f*3)-3); - uint8 R = color_data[caddress]; - uint8 G = color_data[caddress+1]; - uint8 B = color_data[caddress+2]; - - if (t==PT_STKM) //Stick man should be visible in heat mode - { - char buff[10]; //Buffer for HP - - if (mousex>(nx-3) && mousex<(nx+3) && mousey<(ny+3) && mousey>(ny-3)) //If mous is in the head - { - sprintf(buff, "%3d", parts[i].life); //Show HP - drawtext(vid, mousex-8-2*(parts[i].life<100)-2*(parts[i].life<10), mousey-12, buff, 255, 255, 255, 255); - } - - for (r=-2; r<=1; r++) - { - s = XRES+BARSIZE; - vid[(ny-2)*s+nx+r] = PIXRGB (R, G, B); - vid[(ny+2)*s+nx+r+1] = PIXRGB (R, G, B); - vid[(ny+r+1)*s+nx-2] = PIXRGB (R, G, B); - vid[(ny+r)*s+nx+2] = PIXRGB (R, G, B); - } - draw_line(vid , nx, ny+3, player[3], player[4], R, G, B, s); - draw_line(vid , player[3], player[4], player[7], player[8], R, G, B, s); - draw_line(vid , nx, ny+3, player[11], player[12], R, G, B, s); - draw_line(vid , player[11], player[12], player[15], player[16], R, G, B, s); - } - else if (t==PT_STKM2) //Stick man should be visible in heat mode - { - char buff[10]; //Buffer for HP - - if (mousex>(nx-3) && mousex<(nx+3) && mousey<(ny+3) && mousey>(ny-3)) //If mous is in the head - { - sprintf(buff, "%3d", parts[i].life); //Show HP - drawtext(vid, mousex-8-2*(parts[i].life<100)-2*(parts[i].life<10), mousey-12, buff, 255, 255, 255, 255); - } - - for (r=-2; r<=1; r++) - { - s = XRES+BARSIZE; - vid[(ny-2)*s+nx+r] = PIXRGB (R, G, B); - vid[(ny+2)*s+nx+r+1] = PIXRGB (R, G, B); - vid[(ny+r+1)*s+nx-2] = PIXRGB (R, G, B); - vid[(ny+r)*s+nx+2] = PIXRGB (R, G, B); - } - draw_line(vid , nx, ny+3, player2[3], player2[4], R, G, B, s); - draw_line(vid , player2[3], player2[4], player2[7], player2[8], R, G, B, s); - draw_line(vid , nx, ny+3, player2[11], player2[12], R, G, B, s); - draw_line(vid , player2[11], player2[12], player2[15], player2[16], R, G, B, s); - } - else - { - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(R, G, B); - //blendpixel(vid, nx+1, ny, R, G, B, 255); - } - } - //blob view! - if (cmode == CM_BLOB&&t!=PT_FIRE&&t!=PT_PLSM&&t!=PT_HFLM&&t!=PT_NONE&&t!=PT_ACID&&t!=PT_LCRY&&t!=PT_GLOW&&t!=PT_SWCH&&t!=PT_SMKE&&t!=PT_WTRV&&!(t==PT_FIRW&&parts[i].tmp==3)&&t!=PT_LIFE&&t!=PT_H2&&t!=PT_O2) - { - if (t==PT_PHOT) { - cg = 0; - cb = 0; - cr = 0; - for (x=0; x<12; x++) { - cr += (parts[i].ctype >> (x+18)) & 1; - cb += (parts[i].ctype >> x) & 1; - } - for (x=0; x<12; x++) - cg += (parts[i].ctype >> (x+9)) & 1; - x = 624/(cr+cg+cb+1); - cr *= x; - cg *= x; - cb *= x; - cr = cr>255?255:cr; - cg = cg>255?255:cg; - cb = cb>255?255:cb; - } else { - cr = PIXR(ptypes[t].pcolors); - cg = PIXG(ptypes[t].pcolors); - cb = PIXB(ptypes[t].pcolors); - } - - //if(vid[(ny-1)*YRES+(nx-1)]!=0){ - // blendpixel(vid, nx, ny-1, R, G, B, 46); - //} - - if (decorations_enable && parts[i].dcolour) - { - int a = (parts[i].dcolour>>24)&0xFF; - cr = (a*((parts[i].dcolour>>16)&0xFF) + (255-a)*cr) >> 8; - cg = (a*((parts[i].dcolour>>8)&0xFF) + (255-a)*cg) >> 8; - cb = (a*((parts[i].dcolour)&0xFF) + (255-a)*cb) >> 8; - } - 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); - } - if (decorations_enable && cmode!=CM_HEAT && cmode!=CM_LIFE && parts[i].dcolour) - if(t==PT_LCRY){ - cr = (parts[i].dcolour>>16)&0xFF; - cg = (parts[i].dcolour>>8)&0xFF; - cb = (parts[i].dcolour)&0xFF; - - if(parts[i].life<10){ - cr /= 10-parts[i].life; - cg /= 10-parts[i].life; - cb /= 10-parts[i].life; - } - - /*cr = cr>255?255:cr; - cg = cg>255?255:cg; - cb = cb>255?255:cb;*/ - blendpixel(vid, nx, ny, cr, cg, cb, (parts[i].dcolour>>24)&0xFF); - } else { - blendpixel(vid, nx, ny, (parts[i].dcolour>>16)&0xFF, (parts[i].dcolour>>8)&0xFF, (parts[i].dcolour)&0xFF, (parts[i].dcolour>>24)&0xFF); - } - } -#endif - } -#ifdef OpenGL - glFlush (); -#endif -} void draw_walls(pixel *vid) { int x, y, i, j, cr, cg, cb; @@ -5044,19 +2678,9 @@ int sdl_open(void) return 0; } atexit(SDL_Quit); -#ifdef OpenGL +#if defined(OGLR) sdl_scrn=SDL_SetVideoMode(XRES*sdl_scale + BARSIZE*sdl_scale,YRES*sdl_scale + MENUSIZE*sdl_scale,32,SDL_OPENGL); SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1); - Enable2D (); - // glBegin(GL_TRIANGLES); - // glColor3ub (255, 0, 0); - // glVertex2d (0, 0); - // glColor3ub (0, 255, 0); - // glVertex2d (640,0); - // glColor3ub (0, 0, 255); - // glVertex2d (50, 50); - //glEnd (); - //glFlush (); #else #ifdef PIX16 if (kiosk_enable) @@ -5151,35 +2775,3 @@ int draw_debug_info(pixel* vid, int lm, int lx, int ly, int cx, int cy, int line drawtext(vid, 10, YRES-22, infobuf, 255, 255, 255, 255); } } - -#ifdef OpenGL -void Enable2D () -{ - int ViewPort[4]; //Holds screen info - - glGetIntegerv (GL_VIEWPORT, ViewPort); - - glMatrixMode (GL_PROJECTION); - glPushMatrix (); - glLoadIdentity (); - - glOrtho (0, ViewPort[2], ViewPort[3], 0, -1, 1); - glMatrixMode (GL_MODELVIEW); - glPushMatrix (); - glLoadIdentity (); - - glEnable (GL_BLEND); - glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glHint( GL_LINE_SMOOTH_HINT, GL_NICEST); - glHint( GL_POINT_SMOOTH_HINT, GL_NICEST); -} -void RenderScene () -{ - SDL_GL_SwapBuffers (); -} -void ClearScreen() -{ - glClear(GL_COLOR_BUFFER_BIT); -} -#endif diff --git a/src/interface.c b/src/interface.c index d098b3f44..6ce057b2d 100644 --- a/src/interface.c +++ b/src/interface.c @@ -5046,7 +5046,7 @@ unsigned int decorations_ui(pixel *vid_buf,int *bsx,int *bsy, unsigned int saved my /= sdl_scale; memcpy(vid_buf,old_buf,(XRES+BARSIZE)*(YRES+MENUSIZE)*PIXELSIZE); - draw_parts(vid_buf); + render_parts(vid_buf); ui_edit_process(mx, my, b, &box_R); ui_edit_process(mx, my, b, &box_G); ui_edit_process(mx, my, b, &box_B);