Made wall code use #defines. small fix for adjustabl brush.

This commit is contained in:
Philip 2010-11-19 22:03:52 -05:00
parent c1182db42d
commit a38dddaf5a
6 changed files with 131 additions and 181 deletions

View File

@ -16,13 +16,10 @@
#define CM_PRESS 1 #define CM_PRESS 1
#define CM_VEL 0 #define CM_VEL 0
#define UI_WALLSTART 37
#define UI_WALLCOUNT 19
#define SPC_AIR 136 #define UI_WALLSTART 122
#define SPC_HEAT 137 #define UI_ACTUALSTART 22
#define SPC_COOL 138 #define UI_WALLCOUNT 19
#define SPC_VACUUM 139
#define WL_WALLELEC 22 #define WL_WALLELEC 22
#define WL_EWALL 23 #define WL_EWALL 23
@ -38,8 +35,16 @@
#define WL_ALLOWSOLID 33 #define WL_ALLOWSOLID 33
#define WL_ALLOWALLELEC 34 #define WL_ALLOWALLELEC 34
#define WL_EHOLE 35 #define WL_EHOLE 35
#define SPC_AIR 136
#define SPC_HEAT 137
#define SPC_COOL 138
#define SPC_VACUUM 139
#define WL_ALLOWGAS 40 #define WL_ALLOWGAS 40
#define PT_NONE 0 #define PT_NONE 0
#define PT_DUST 1 #define PT_DUST 1
#define PT_WATR 2 #define PT_WATR 2

View File

@ -54,15 +54,15 @@ void update_air(void)
vy[y][x] *= VLOSS; vy[y][x] *= VLOSS;
vx[y][x] += dx*TSTEPV; vx[y][x] += dx*TSTEPV;
vy[y][x] += dy*TSTEPV; vy[y][x] += dy*TSTEPV;
if(bmap[y][x]==1 || bmap[y][x+1]==1 || if(bmap[y][x]==WL_WALL || bmap[y][x+1]==WL_WALL ||
bmap[y][x]==8 || bmap[y][x+1]==8 || bmap[y][x]==WL_WALLELEC || bmap[y][x+1]==WL_WALLELEC ||
(bmap[y][x]==7 && !emap[y][x]) || (bmap[y][x]==WL_EWALL && !emap[y][x]) ||
(bmap[y][x+1]==7 && !emap[y][x+1])) (bmap[y][x+1]==WL_EWALL && !emap[y][x+1]))
vx[y][x] = 0; vx[y][x] = 0;
if(bmap[y][x]==1 || bmap[y+1][x]==1 || if(bmap[y][x]==WL_WALL || bmap[y+1][x]==WL_WALL ||
bmap[y][x]==8 || bmap[y+1][x]==8 || bmap[y][x]==WL_WALLELEC || bmap[y+1][x]==WL_WALLELEC ||
(bmap[y][x]==7 && !emap[y][x]) || (bmap[y][x]==WL_EWALL && !emap[y][x]) ||
(bmap[y+1][x]==7 && !emap[y+1][x])) (bmap[y+1][x]==WL_EWALL && !emap[y+1][x]))
vy[y][x] = 0; vy[y][x] = 0;
} }
@ -76,9 +76,9 @@ void update_air(void)
for(i=-1; i<2; i++) for(i=-1; i<2; i++)
if(y+j>0 && y+j<YRES/CELL-1 && if(y+j>0 && y+j<YRES/CELL-1 &&
x+i>0 && x+i<XRES/CELL-1 && x+i>0 && x+i<XRES/CELL-1 &&
bmap[y+j][x+i]!=1 && bmap[y+j][x+i]!=WL_WALL &&
bmap[y+j][x+i]!=8 && bmap[y+j][x+i]!=WL_WALLELEC &&
(bmap[y+j][x+i]!=7 || emap[y+j][x+i])) (bmap[y+j][x+i]!=WL_EWALL || emap[y+j][x+i]))
{ {
f = kernel[i+1+(j+1)*3]; f = kernel[i+1+(j+1)*3];
dx += vx[y+j][x+i]*f; dx += vx[y+j][x+i]*f;
@ -118,7 +118,7 @@ void update_air(void)
dy += VADV*tx*ty*vy[j+1][i+1]; dy += VADV*tx*ty*vy[j+1][i+1];
} }
if(bmap[y][x] == 4) if(bmap[y][x] == WL_FAN)
{ {
dx += fvx[y][x]; dx += fvx[y][x];
dy += fvy[y][x]; dy += fvy[y][x];

View File

@ -2864,7 +2864,7 @@ void render_cursor(pixel *vid, int x, int y, int t, float rx, float ry)
else if(CURRENT_BRUSH==CIRCLE_BRUSH) else if(CURRENT_BRUSH==CIRCLE_BRUSH)
for(j=0; j<=ry; j++) for(j=0; j<=ry; j++)
for(i=0; i<=rx; i++) for(i=0; i<=rx; i++)
if((i*i)/(rx*rx)+(j*j)/(ry*rx)<=1 && (((i+1)*(i+1))/(rx*rx)+(j*j)/(ry*rx)>1 || ((i*i)/(rx*rx)+((j+1)*(j+1))/(ry*ry)>1))) if((i*i)/(rx*rx)+(j*j)/(ry*ry)<=1 && (((i+1)*(i+1))/(rx*rx)+(j*j)/(ry*ry)>1 || ((i*i)/(rx*rx)+((j+1)*(j+1))/(ry*ry)>1)))
{ {
xor_pixel(x+i, y+j, vid); xor_pixel(x+i, y+j, vid);
if(j) xor_pixel(x+i, y-j, vid); if(j) xor_pixel(x+i, y-j, vid);

View File

@ -1491,7 +1491,7 @@ void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int b, int bq, int mx,
sy = y; sy = y;
if(i==SC_WALL) if(i==SC_WALL)
{ {
for(n = 122; n<122+UI_WALLCOUNT; n++) for(n = UI_WALLSTART; n<UI_WALLSTART+UI_WALLCOUNT; n++)
{ {
if(n!=SPC_AIR&&n!=SPC_HEAT&&n!=SPC_COOL&&n!=SPC_VACUUM) if(n!=SPC_AIR&&n!=SPC_HEAT&&n!=SPC_COOL&&n!=SPC_VACUUM)
{ {
@ -1500,7 +1500,7 @@ void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int b, int bq, int mx,
x = XRES-BARSIZE-26; x = XRES-BARSIZE-26;
y += 19; y += 19;
} }
x -= draw_tool_xy(vid_buf, x, y, n, mwalls[n-122].colour)+5; x -= draw_tool_xy(vid_buf, x, y, n, mwalls[n-UI_WALLSTART].colour)+5;
if(!bq && mx>=x+32 && mx<x+58 && my>=y && my< y+15) if(!bq && mx>=x+32 && mx<x+58 && my>=y && my< y+15)
{ {
drawrect(vid_buf, x+30, y-1, 29, 17, 255, 0, 0, 255); drawrect(vid_buf, x+30, y-1, 29, 17, 255, 0, 0, 255);
@ -1528,7 +1528,7 @@ void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int b, int bq, int mx,
} }
else if(i==SC_SPECIAL) else if(i==SC_SPECIAL)
{ {
for(n = 122; n<122+UI_WALLCOUNT; n++) for(n = UI_WALLSTART; n<UI_WALLSTART+UI_WALLCOUNT; n++)
{ {
if(n==SPC_AIR||n==SPC_HEAT||n==SPC_COOL||n==SPC_VACUUM) if(n==SPC_AIR||n==SPC_HEAT||n==SPC_COOL||n==SPC_VACUUM)
{ {
@ -1537,7 +1537,7 @@ void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int b, int bq, int mx,
x = XRES-BARSIZE-26; x = XRES-BARSIZE-26;
y += 19; y += 19;
} }
x -= draw_tool_xy(vid_buf, x, y, n, mwalls[n-122].colour)+5; x -= draw_tool_xy(vid_buf, x, y, n, mwalls[n-UI_WALLSTART].colour)+5;
if(!bq && mx>=x+32 && mx<x+58 && my>=y && my< y+15) if(!bq && mx>=x+32 && mx<x+58 && my>=y && my< y+15)
{ {
drawrect(vid_buf, x+30, y-1, 29, 17, 255, 0, 0, 255); drawrect(vid_buf, x+30, y-1, 29, 17, 255, 0, 0, 255);

View File

@ -250,7 +250,7 @@ void *build_save(int *size, int x0, int y0, int w, int h)
d[p++] = bmap[y][x]; d[p++] = bmap[y][x];
for(y=by0; y<by0+bh; y++) for(y=by0; y<by0+bh; y++)
for(x=bx0; x<bx0+bw; x++) for(x=bx0; x<bx0+bw; x++)
if(bmap[y][x]==4) if(bmap[y][x]==WL_FAN)
{ {
i = (int)(fvx[y][x]*64.0f+127.5f); i = (int)(fvx[y][x]*64.0f+127.5f);
if(i<0) i=0; if(i<0) i=0;
@ -259,7 +259,7 @@ void *build_save(int *size, int x0, int y0, int w, int h)
} }
for(y=by0; y<by0+bh; y++) for(y=by0; y<by0+bh; y++)
for(x=bx0; x<bx0+bw; x++) for(x=bx0; x<bx0+bw; x++)
if(bmap[y][x]==4) if(bmap[y][x]==WL_FAN)
{ {
i = (int)(fvy[y][x]*64.0f+127.5f); i = (int)(fvy[y][x]*64.0f+127.5f);
if(i<0) i=0; if(i<0) i=0;
@ -1108,7 +1108,7 @@ int main(int argc, char *argv[])
{ {
for(i=1; i<XRES/CELL; i++) for(i=1; i<XRES/CELL; i++)
{ {
if(bmap[j][i]==1 || bmap[j][i]==8 || (bmap[j][i]==7 && !emap[j][i])) if(bmap[j][i]==WL_WALL || bmap[j][i]==WL_WALLELEC || (bmap[j][i]==WL_EWALL && !emap[j][i]))
{ {
vx[j][i] = 0.0f; vx[j][i] = 0.0f;
vx[j][i-1] = 0.0f; vx[j][i-1] = 0.0f;
@ -1874,7 +1874,7 @@ int main(int argc, char *argv[])
if(lm == 1) if(lm == 1)
{ {
xor_line(lx, ly, x, y, vid_buf); xor_line(lx, ly, x, y, vid_buf);
if(c==127 && lx>=0 && ly>=0 && lx<XRES && ly<YRES && bmap[ly/CELL][lx/CELL]==4) if(c==127 && lx>=0 && ly>=0 && lx<XRES && ly<YRES && bmap[ly/CELL][lx/CELL]==WL_FAN)
{ {
nfvx = (x-lx)*0.005f; nfvx = (x-lx)*0.005f;
nfvy = (y-ly)*0.005f; nfvy = (y-ly)*0.005f;
@ -1885,7 +1885,7 @@ int main(int argc, char *argv[])
{ {
fvx[j][i] = nfvx; fvx[j][i] = nfvx;
fvy[j][i] = nfvy; fvy[j][i] = nfvy;
bmap[j][i] = 4; bmap[j][i] = WL_FAN;
} }
} }
} }
@ -1991,7 +1991,7 @@ int main(int argc, char *argv[])
su = c; su = c;
if(lm == 1) if(lm == 1)
{ {
if(c!=127 || lx<0 || ly<0 || lx>=XRES || ly>=YRES || bmap[ly/CELL][lx/CELL]!=4) if(c!=127 || lx<0 || ly<0 || lx>=XRES || ly>=YRES || bmap[ly/CELL][lx/CELL]!=WL_FAN)
create_line(lx, ly, x, y, bsx, bsy, c); create_line(lx, ly, x, y, bsx, bsy, c);
} }
else else

View File

@ -82,17 +82,17 @@ static int eval_move(int pt, int nx, int ny, unsigned *rr)
if(pt==PT_STKM) //Stick man's head shouldn't collide if(pt==PT_STKM) //Stick man's head shouldn't collide
return 2; return 2;
if(bmap[ny/CELL][nx/CELL]==13 && ptypes[pt].falldown!=0 && pt!=PT_FIRE && pt!=PT_SMKE) if(bmap[ny/CELL][nx/CELL]==WL_ALLOWGAS && ptypes[pt].falldown!=0 && pt!=PT_FIRE && pt!=PT_SMKE)
return 0; return 0;
if(ptypes[pt].falldown!=2 && bmap[ny/CELL][nx/CELL]==3) if(ptypes[pt].falldown!=2 && bmap[ny/CELL][nx/CELL]==WL_ALLOWLIQUID)
return 0; return 0;
if((pt==PT_NEUT ||pt==PT_PHOT) && bmap[ny/CELL][nx/CELL]==7 && !emap[ny/CELL][nx/CELL]) if((pt==PT_NEUT ||pt==PT_PHOT) && bmap[ny/CELL][nx/CELL]==WL_EWALL && !emap[ny/CELL][nx/CELL])
return 0; return 0;
if(bmap[ny/CELL][nx/CELL]==9) if(bmap[ny/CELL][nx/CELL]==WL_ALLOWAIR)
return 0; return 0;
if(ptypes[pt].falldown!=1 && bmap[ny/CELL][nx/CELL]==10) if(ptypes[pt].falldown!=1 && bmap[ny/CELL][nx/CELL]==WL_ALLOWSOLID)
return 0; return 0;
if(r && (r&0xFF) < PT_NUM){ if(r && (r&0xFF) < PT_NUM){
@ -183,12 +183,12 @@ int try_move(int i, int x, int y, int nx, int ny)
if(parts[i].type==PT_CNCT && y<ny && (pmap[y+1][x]&0xFF)==PT_CNCT) if(parts[i].type==PT_CNCT && y<ny && (pmap[y+1][x]&0xFF)==PT_CNCT)
return 0; return 0;
if(bmap[ny/CELL][nx/CELL]==12 && !emap[y/CELL][x/CELL]) if(bmap[ny/CELL][nx/CELL]==WL_EHOLE && !emap[y/CELL][x/CELL])
return 1; return 1;
if((bmap[y/CELL][x/CELL]==12 && !emap[y/CELL][x/CELL]) && (bmap[ny/CELL][nx/CELL]!=12 && !emap[ny/CELL][nx/CELL])) if((bmap[y/CELL][x/CELL]==WL_EHOLE && !emap[y/CELL][x/CELL]) && (bmap[ny/CELL][nx/CELL]!=WL_EHOLE && !emap[ny/CELL][nx/CELL]))
return 0; return 0;
if(r && (r>>8)<NPART && ptypes[r&0xFF].falldown!=2 && bmap[y/CELL][x/CELL]==3) if(r && (r>>8)<NPART && ptypes[r&0xFF].falldown!=2 && bmap[y/CELL][x/CELL]==WL_ALLOWLIQUID)
return 0; return 0;
if(parts[i].type == PT_PHOT) if(parts[i].type == PT_PHOT)
@ -704,7 +704,7 @@ _inline int is_wire(int x, int y)
inline int is_wire(int x, int y) inline int is_wire(int x, int y)
#endif #endif
{ {
return bmap[y][x]==6 || bmap[y][x]==7 || bmap[y][x]==3 || bmap[y][x]==8 || bmap[y][x]==11 || bmap[y][x]==12; return bmap[y][x]==WL_DETECT || bmap[y][x]==WL_EWALL || bmap[y][x]==WL_ALLOWLIQUID || bmap[y][x]==WL_WALLELEC || bmap[y][x]==WL_ALLOWALLELEC || bmap[y][x]==WL_EHOLE;
} }
#if defined(WIN32) && !defined(__GNUC__) #if defined(WIN32) && !defined(__GNUC__)
@ -713,7 +713,7 @@ _inline int is_wire_off(int x, int y)
inline int is_wire_off(int x, int y) inline int is_wire_off(int x, int y)
#endif #endif
{ {
return (bmap[y][x]==6 || bmap[y][x]==7 || bmap[y][x]==3 || bmap[y][x]==8 || bmap[y][x]==11 || bmap[y][x]==12) && emap[y][x]<8; return (bmap[y][x]==WL_DETECT || bmap[y][x]==WL_EWALL || bmap[y][x]==WL_ALLOWLIQUID || bmap[y][x]==WL_WALLELEC || bmap[y][x]==WL_ALLOWALLELEC || bmap[y][x]==WL_EHOLE) && emap[y][x]<8;
} }
int get_wavelength_bin(int *wm) int get_wavelength_bin(int *wm)
@ -1024,15 +1024,15 @@ void update_particles_i(pixel *vid, int start, int inc)
if(x<0 || y<0 || x>=XRES || y>=YRES || if(x<0 || y<0 || x>=XRES || y>=YRES ||
((bmap[y/CELL][x/CELL]==1 || ((bmap[y/CELL][x/CELL]==WL_WALL ||
bmap[y/CELL][x/CELL]==8 || bmap[y/CELL][x/CELL]==WL_WALLELEC ||
bmap[y/CELL][x/CELL]==9 || bmap[y/CELL][x/CELL]==WL_ALLOWAIR ||
(bmap[y/CELL][x/CELL]==2) || (bmap[y/CELL][x/CELL]==WL_DESTROYALL) ||
(bmap[y/CELL][x/CELL]==3 && ptypes[t].falldown!=2) || (bmap[y/CELL][x/CELL]==WL_ALLOWLIQUID && ptypes[t].falldown!=2) ||
(bmap[y/CELL][x/CELL]==10 && ptypes[t].falldown!=1) || (bmap[y/CELL][x/CELL]==WL_ALLOWSOLID && ptypes[t].falldown!=1) ||
(bmap[y/CELL][x/CELL]==13 && ptypes[t].falldown!=0 && parts[i].type!=PT_FIRE && parts[i].type!=PT_SMKE) || (bmap[y/CELL][x/CELL]==WL_ALLOWGAS && ptypes[t].falldown!=0 && parts[i].type!=PT_FIRE && parts[i].type!=PT_SMKE) ||
(bmap[y/CELL][x/CELL]==6 && (t==PT_METL || t==PT_SPRK)) || (bmap[y/CELL][x/CELL]==WL_DETECT && (t==PT_METL || t==PT_SPRK)) ||
(bmap[y/CELL][x/CELL]==7 && !emap[y/CELL][x/CELL])) && (t!=PT_STKM))) (bmap[y/CELL][x/CELL]==WL_EWALL && !emap[y/CELL][x/CELL])) && (t!=PT_STKM)))
{ {
kill_part(i); kill_part(i);
continue; continue;
@ -1158,7 +1158,7 @@ void update_particles_i(pixel *vid, int start, int inc)
iy += dy; iy += dy;
nx = (int)(ix+0.5f); nx = (int)(ix+0.5f);
ny = (int)(iy+0.5f); ny = (int)(iy+0.5f);
if(nx<0 || ny<0 || nx>=XRES || ny>=YRES || pmap[ny][nx] || (bmap[ny/CELL][nx/CELL] && bmap[ny/CELL][nx/CELL]!=5)) if(nx<0 || ny<0 || nx>=XRES || ny>=YRES || pmap[ny][nx] || (bmap[ny/CELL][nx/CELL] && bmap[ny/CELL][nx/CELL]!=WL_STREAM))
{ {
parts[i].x = ix; parts[i].x = ix;
parts[i].y = iy; parts[i].y = iy;
@ -1172,7 +1172,7 @@ void update_particles_i(pixel *vid, int start, int inc)
for(ny=-1; ny<2; ny++) for(ny=-1; ny<2; ny++)
if(x+nx>=0 && y+ny>0 && if(x+nx>=0 && y+ny>0 &&
x+nx<XRES && y+ny<YRES && x+nx<XRES && y+ny<YRES &&
(!bmap[(y+ny)/CELL][(x+nx)/CELL] || bmap[(y+ny)/CELL][(x+nx)/CELL]==5)) (!bmap[(y+ny)/CELL][(x+nx)/CELL] || bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_STREAM))
{ {
if(!pmap[y+ny][x+nx]) if(!pmap[y+ny][x+nx])
a = 1; a = 1;
@ -1415,14 +1415,14 @@ void update_particles_i(pixel *vid, int start, int inc)
t = PT_SPRK; t = PT_SPRK;
} }
} }
else if(bmap[ny][nx]==6 || bmap[ny][nx]==7 || bmap[ny][nx]==3 || bmap[ny][nx]==8 || bmap[ny][nx]==11 || bmap[ny][nx]==12) else if(bmap[ny][nx]==WL_DETECT || bmap[ny][nx]==WL_EWALL || bmap[ny][nx]==WL_ALLOWLIQUID || bmap[ny][nx]==WL_WALLELEC || bmap[ny][nx]==WL_ALLOWALLELEC || bmap[ny][nx]==WL_EHOLE)
set_emap(nx, ny); set_emap(nx, ny);
} }
} }
nx = x/CELL; nx = x/CELL;
ny = y/CELL; ny = y/CELL;
if(bmap[ny][nx]==6 && emap[ny][nx]<8) if(bmap[ny][nx]==6 && emap[ny][nx]<WL_WALLELEC)
set_emap(nx, ny); set_emap(nx, ny);
fe = 0; fe = 0;
@ -2029,8 +2029,8 @@ void update_particles_i(pixel *vid, int start, int inc)
r = pmap[y+ny][x+nx]; r = pmap[y+ny][x+nx];
if((r>>8)>=NPART) if((r>>8)>=NPART)
continue; continue;
if((bmap[(y+ny)/CELL][(x+nx)/CELL]==8||bmap[(y+ny)/CELL][(x+nx)/CELL]==7||bmap[(y+ny)/CELL][(x+nx)/CELL]==2||bmap[(y+ny)/CELL][(x+nx)/CELL]==1|| if((bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_WALLELEC||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_EWALL||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_DESTROYALL||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_WALL||
bmap[(y+ny)/CELL][(x+nx)/CELL]==9||bmap[(y+ny)/CELL][(x+nx)/CELL]==10||bmap[(y+ny)/CELL][(x+nx)/CELL]==13)) bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_ALLOWAIR||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_ALLOWSOLID||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_ALLOWGAS))
continue; continue;
if((!r)&&parts[i].life>=1)//if nothing then create water if((!r)&&parts[i].life>=1)//if nothing then create water
{ {
@ -2087,7 +2087,7 @@ void update_particles_i(pixel *vid, int start, int inc)
r = pmap[y+ny][x+nx]; r = pmap[y+ny][x+nx];
if((r>>8)>=NPART) if((r>>8)>=NPART)
continue; continue;
if((bmap[(y+ny)/CELL][(x+nx)/CELL]==8||bmap[(y+ny)/CELL][(x+nx)/CELL]==3||bmap[(y+ny)/CELL][(x+nx)/CELL]==2||bmap[(y+ny)/CELL][(x+nx)/CELL]==1||bmap[(y+ny)/CELL][(x+nx)/CELL]==10)) if((bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_WALLELEC||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_ALLOWLIQUID||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_DESTROYALL||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_WALL||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_ALLOWSOLID))
continue; continue;
if((!r)&&parts[i].life>=1)//if nothing then create steam if((!r)&&parts[i].life>=1)//if nothing then create steam
{ {
@ -2176,8 +2176,8 @@ void update_particles_i(pixel *vid, int start, int inc)
r = pmap[y+ny][x+nx]; r = pmap[y+ny][x+nx];
if((r>>8)>=NPART || (parts[i].life<=maxlife)) if((r>>8)>=NPART || (parts[i].life<=maxlife))
continue; continue;
if((bmap[(y+ny)/CELL][(x+nx)/CELL]==8||bmap[(y+ny)/CELL][(x+nx)/CELL]==7||bmap[(y+ny)/CELL][(x+nx)/CELL]==2||bmap[(y+ny)/CELL][(x+nx)/CELL]==1|| if((bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_WALLELEC||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_EWALL||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_DESTROYALL||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_WALL||
bmap[(y+ny)/CELL][(x+nx)/CELL]==9||bmap[(y+ny)/CELL][(x+nx)/CELL]==10||bmap[(y+ny)/CELL][(x+nx)/CELL]==13)) bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_ALLOWAIR||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_ALLOWSOLID||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_ALLOWGAS))
continue; continue;
if((!r)&&parts[i].life>=1)//if nothing then create wtf if((!r)&&parts[i].life>=1)//if nothing then create wtf
{ {
@ -2237,7 +2237,7 @@ void update_particles_i(pixel *vid, int start, int inc)
} }
} }
} }
if(t==PT_FWRK) 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) 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)
{ {
@ -2714,7 +2714,7 @@ void update_particles_i(pixel *vid, int start, int inc)
r = pmap[y+ny][x+nx]; r = pmap[y+ny][x+nx];
if((r>>8)>=NPART || !r) if((r>>8)>=NPART || !r)
continue; continue;
if(bmap[(y+ny)/CELL][(x+nx)/CELL] && bmap[(y+ny)/CELL][(x+nx)/CELL]!=5) if(bmap[(y+ny)/CELL][(x+nx)/CELL] && bmap[(y+ny)/CELL][(x+nx)/CELL]!=WL_STREAM)
continue; continue;
rt = parts[r>>8].type; rt = parts[r>>8].type;
if((a || ptypes[rt].explosive) && ((rt!=PT_RBDM && rt!=PT_LRBD && rt!=PT_INSL && rt!=PT_SWCH) || t!=PT_SPRK) && if((a || ptypes[rt].explosive) && ((rt!=PT_RBDM && rt!=PT_LRBD && rt!=PT_INSL && rt!=PT_SWCH) || t!=PT_SPRK) &&
@ -3063,9 +3063,9 @@ killed:
} }
//Charge detector wall if foot inside //Charge detector wall if foot inside
if(bmap[(int)(player[8]+0.5)/CELL][(int)(player[7]+0.5)/CELL]==6) if(bmap[(int)(player[8]+0.5)/CELL][(int)(player[7]+0.5)/CELL]==WL_DETECT)
set_emap((int)player[7]/CELL, (int)player[8]/CELL); set_emap((int)player[7]/CELL, (int)player[8]/CELL);
if(bmap[(int)(player[16]+0.5)/CELL][(int)(player[15]+0.5)/CELL]==6) if(bmap[(int)(player[16]+0.5)/CELL][(int)(player[15]+0.5)/CELL]==WL_DETECT)
set_emap((int)(player[15]+0.5)/CELL, (int)(player[16]+0.5)/CELL); set_emap((int)(player[15]+0.5)/CELL, (int)(player[16]+0.5)/CELL);
//Searching for particles near head //Searching for particles near head
@ -3092,7 +3092,7 @@ killed:
parts[i].life -= (102-parts[i].life)/2; parts[i].life -= (102-parts[i].life)/2;
kill_part(pmap[ny+y][nx+x]>>8); kill_part(pmap[ny+y][nx+x]>>8);
} }
if(bmap[(ny+y)/CELL][(nx+x)/CELL]==4) if(bmap[(ny+y)/CELL][(nx+x)/CELL]==WL_FAN)
player[2] = SPC_AIR; player[2] = SPC_AIR;
} }
@ -3523,7 +3523,7 @@ killed:
s = 1; s = 1;
break; break;
} }
if((pmap[y][j]&255)!=t || (bmap[y/CELL][j/CELL] && bmap[y/CELL][j/CELL]!=5)) if((pmap[y][j]&255)!=t || (bmap[y/CELL][j/CELL] && bmap[y/CELL][j/CELL]!=WL_STREAM))
break; break;
} }
if(parts[i].vy>0) if(parts[i].vy>0)
@ -3538,7 +3538,7 @@ killed:
parts[i].y += j-y; parts[i].y += j-y;
break; break;
} }
if((pmap[j][x]&255)!=t || (bmap[j/CELL][x/CELL] && bmap[j/CELL][x/CELL]!=5)) if((pmap[j][x]&255)!=t || (bmap[j/CELL][x/CELL] && bmap[j/CELL][x/CELL]!=WL_STREAM))
{ {
s = 0; s = 0;
break; break;
@ -3689,7 +3689,7 @@ void update_particles(pixel *vid)
{ {
for(x=0; x<XRES/CELL; x++) for(x=0; x<XRES/CELL; x++)
{ {
if(bmap[y][x]==1) if(bmap[y][x]==WL_WALL)
for(j=0; j<CELL; j++) for(j=0; j<CELL; j++)
for(i=0; i<CELL; i++) for(i=0; i<CELL; i++)
{ {
@ -3698,14 +3698,14 @@ void update_particles(pixel *vid)
drawblob(vid, (x*CELL+i), (y*CELL+j), 0x80, 0x80, 0x80); drawblob(vid, (x*CELL+i), (y*CELL+j), 0x80, 0x80, 0x80);
} }
if(bmap[y][x]==2) if(bmap[y][x]==WL_DESTROYALL)
for(j=0; j<CELL; j+=2) for(j=0; j<CELL; j+=2)
for(i=(j>>1)&1; i<CELL; i+=2) for(i=(j>>1)&1; i<CELL; i+=2)
{ {
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x808080); vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x808080);
drawblob(vid, (x*CELL+i), (y*CELL+j), 0x80, 0x80, 0x80); drawblob(vid, (x*CELL+i), (y*CELL+j), 0x80, 0x80, 0x80);
} }
if(bmap[y][x]==3) if(bmap[y][x]==WL_ALLOWLIQUID)
{ {
for(j=0; j<CELL; j++) for(j=0; j<CELL; j++)
for(i=0; i<CELL; i++) for(i=0; i<CELL; i++)
@ -3728,14 +3728,14 @@ void update_particles(pixel *vid)
fire_b[y][x] = cb; fire_b[y][x] = cb;
} }
} }
if(bmap[y][x]==4) if(bmap[y][x]==WL_FAN)
for(j=0; j<CELL; j+=2) for(j=0; j<CELL; j+=2)
for(i=(j>>1)&1; i<CELL; i+=2) for(i=(j>>1)&1; i<CELL; i+=2)
{ {
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x8080FF); vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x8080FF);
drawblob(vid, (x*CELL+i), (y*CELL+j), 0x80, 0x80, 0xFF); drawblob(vid, (x*CELL+i), (y*CELL+j), 0x80, 0x80, 0xFF);
} }
if(bmap[y][x]==6) if(bmap[y][x]==WL_DETECT)
{ {
for(j=0; j<CELL; j+=2) for(j=0; j<CELL; j+=2)
for(i=(j>>1)&1; i<CELL; i+=2) for(i=(j>>1)&1; i<CELL; i+=2)
@ -3759,7 +3759,7 @@ void update_particles(pixel *vid)
fire_b[y][x] = cb; fire_b[y][x] = cb;
} }
} }
if(bmap[y][x]==7) if(bmap[y][x]==WL_EWALL)
{ {
if(emap[y][x]) if(emap[y][x])
{ {
@ -3795,7 +3795,7 @@ void update_particles(pixel *vid)
} }
} }
} }
if(bmap[y][x]==8) if(bmap[y][x]==WL_WALLELEC)
{ {
for(j=0; j<CELL; j++) for(j=0; j<CELL; j++)
for(i=0; i<CELL; i++) for(i=0; i<CELL; i++)
@ -3826,7 +3826,7 @@ void update_particles(pixel *vid)
fire_b[y][x] = cb; fire_b[y][x] = cb;
} }
} }
if(bmap[y][x]==11) if(bmap[y][x]==WL_ALLOWALLELEC)
{ {
for(j=0; j<CELL; j++) for(j=0; j<CELL; j++)
for(i=0; i<CELL; i++) for(i=0; i<CELL; i++)
@ -3853,7 +3853,7 @@ void update_particles(pixel *vid)
fire_b[y][x] = cb; fire_b[y][x] = cb;
} }
} }
if(bmap[y][x]==13) if(bmap[y][x]==WL_ALLOWGAS)
{ {
for(j=0; j<CELL; j+=2) for(j=0; j<CELL; j+=2)
{ {
@ -3864,7 +3864,7 @@ void update_particles(pixel *vid)
} }
} }
} }
if(bmap[y][x]==9) if(bmap[y][x]==WL_ALLOWAIR)
{ {
for(j=0; j<CELL; j+=2) for(j=0; j<CELL; j+=2)
{ {
@ -3875,7 +3875,7 @@ void update_particles(pixel *vid)
} }
} }
} }
if(bmap[y][x]==10) if(bmap[y][x]==WL_ALLOWSOLID)
{ {
for(j=0; j<CELL; j+=2) for(j=0; j<CELL; j+=2)
{ {
@ -3886,7 +3886,7 @@ void update_particles(pixel *vid)
} }
} }
} }
if(bmap[y][x]==12) if(bmap[y][x]==WL_EHOLE)
{ {
if(emap[y][x]) if(emap[y][x])
{ {
@ -3942,18 +3942,18 @@ void update_particles(pixel *vid)
{ {
for(x=0; x<XRES/CELL; x++) for(x=0; x<XRES/CELL; x++)
{ {
if(bmap[y][x]==1) if(bmap[y][x]==WL_WALL)
for(j=0; j<CELL; j++) for(j=0; j<CELL; j++)
for(i=0; i<CELL; i++) for(i=0; i<CELL; i++)
{ {
pmap[y*CELL+j][x*CELL+i] = 0x7FFFFFFF; pmap[y*CELL+j][x*CELL+i] = 0x7FFFFFFF;
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x808080); vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x808080);
} }
if(bmap[y][x]==2) if(bmap[y][x]==WL_DESTROYALL)
for(j=0; j<CELL; j+=2) for(j=0; j<CELL; j+=2)
for(i=(j>>1)&1; i<CELL; i+=2) for(i=(j>>1)&1; i<CELL; i+=2)
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x808080); vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x808080);
if(bmap[y][x]==3) if(bmap[y][x]==WL_ALLOWLIQUID)
{ {
for(j=0; j<CELL; j++) for(j=0; j<CELL; j++)
for(i=0; i<CELL; i++) for(i=0; i<CELL; i++)
@ -3973,11 +3973,11 @@ void update_particles(pixel *vid)
fire_b[y][x] = cb; fire_b[y][x] = cb;
} }
} }
if(bmap[y][x]==4) if(bmap[y][x]==WL_FAN)
for(j=0; j<CELL; j+=2) for(j=0; j<CELL; j+=2)
for(i=(j>>1)&1; i<CELL; i+=2) for(i=(j>>1)&1; i<CELL; i+=2)
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x8080FF); vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x8080FF);
if(bmap[y][x]==6) if(bmap[y][x]==WL_DETECT)
{ {
for(j=0; j<CELL; j+=2) for(j=0; j<CELL; j+=2)
for(i=(j>>1)&1; i<CELL; i+=2) for(i=(j>>1)&1; i<CELL; i+=2)
@ -3998,7 +3998,7 @@ void update_particles(pixel *vid)
fire_b[y][x] = cb; fire_b[y][x] = cb;
} }
} }
if(bmap[y][x]==7) if(bmap[y][x]==WL_EWALL)
{ {
if(emap[y][x]) if(emap[y][x])
{ {
@ -4028,7 +4028,7 @@ void update_particles(pixel *vid)
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x808080); vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x808080);
} }
} }
if(bmap[y][x]==8) if(bmap[y][x]==WL_WALLELEC)
{ {
for(j=0; j<CELL; j++) for(j=0; j<CELL; j++)
for(i=0; i<CELL; i++) for(i=0; i<CELL; i++)
@ -4053,7 +4053,7 @@ void update_particles(pixel *vid)
fire_b[y][x] = cb; fire_b[y][x] = cb;
} }
} }
if(bmap[y][x]==11) if(bmap[y][x]==WL_ALLOWALLELEC)
{ {
for(j=0; j<CELL; j++) for(j=0; j<CELL; j++)
for(i=0; i<CELL; i++) for(i=0; i<CELL; i++)
@ -4077,7 +4077,7 @@ void update_particles(pixel *vid)
fire_b[y][x] = cb; fire_b[y][x] = cb;
} }
} }
if(bmap[y][x]==9) if(bmap[y][x]==WL_ALLOWAIR)
{ {
for(j=0; j<CELL; j+=2) for(j=0; j<CELL; j+=2)
{ {
@ -4087,7 +4087,7 @@ void update_particles(pixel *vid)
} }
} }
} }
if(bmap[y][x]==13) if(bmap[y][x]==WL_ALLOWGAS)
{ {
for(j=0; j<CELL; j+=2) for(j=0; j<CELL; j+=2)
{ {
@ -4097,7 +4097,7 @@ void update_particles(pixel *vid)
} }
} }
} }
if(bmap[y][x]==10) if(bmap[y][x]==WL_ALLOWSOLID)
{ {
for(j=0; j<CELL; j+=2) for(j=0; j<CELL; j+=2)
{ {
@ -4107,7 +4107,7 @@ void update_particles(pixel *vid)
} }
} }
} }
if(bmap[y][x]==12) if(bmap[y][x]==WL_EHOLE)
{ {
if(emap[y][x]) if(emap[y][x])
{ {
@ -4160,7 +4160,7 @@ void update_particles(pixel *vid)
for(y=0; y<YRES/CELL; y++) for(y=0; y<YRES/CELL; y++)
for(x=0; x<XRES/CELL; x++) for(x=0; x<XRES/CELL; x++)
if(bmap[y][x]==5) if(bmap[y][x]==WL_STREAM)
{ {
lx = x*CELL + CELL*0.5f; lx = x*CELL + CELL*0.5f;
ly = y*CELL + CELL*0.5f; ly = y*CELL + CELL*0.5f;
@ -4175,7 +4175,7 @@ void update_particles(pixel *vid)
j = ny/CELL; j = ny/CELL;
lx += vx[j][i]*0.125f; lx += vx[j][i]*0.125f;
ly += vy[j][i]*0.125f; ly += vy[j][i]*0.125f;
if(bmap[j][i]==5 && i!=x && j!=y) if(bmap[j][i]==WL_STREAM && i!=x && j!=y)
break; break;
} }
drawtext(vid, x*CELL, y*CELL-2, "\x8D", 255, 255, 255, 128); drawtext(vid, x*CELL, y*CELL-2, "\x8D", 255, 255, 255, 128);
@ -4221,7 +4221,7 @@ int flood_parts(int x, int y, int c, int cm, int bm)
{ {
int x1, x2, dy = (c<PT_NUM)?1:CELL; int x1, x2, dy = (c<PT_NUM)?1:CELL;
int co = c; int co = c;
if(c>=122&&c<=122+UI_WALLCOUNT) if(c>=UI_WALLSTART&&c<=UI_WALLSTART+UI_WALLCOUNT)
{ {
c = c-100; c = c-100;
} }
@ -4238,12 +4238,12 @@ int flood_parts(int x, int y, int c, int cm, int bm)
} }
if(bm==-1) if(bm==-1)
{ {
if(c==30) if(c==WL_ERASE)
{ {
bm = bmap[y/CELL][x/CELL]; bm = bmap[y/CELL][x/CELL];
if(!bm) if(!bm)
return 0; return 0;
if(bm==1) if(bm==WL_WALL)
cm = 0xFF; cm = 0xFF;
} }
else else
@ -4291,7 +4291,11 @@ int create_parts(int x, int y, float rx, float ry, int c)
{ {
int i, j, f = 0, u, v, oy, ox, b = 0, dw = 0, stemp = 0; //n; int i, j, f = 0, u, v, oy, ox, b = 0, dw = 0, stemp = 0; //n;
if(c == 125)
int wall = c - 100;
for(int r=UI_ACTUALSTART;r<=UI_ACTUALSTART+UI_WALLCOUNT;r++)
{
if(wall==WL_STREAM)
{ {
i = x / CELL; i = x / CELL;
j = y / CELL; j = y / CELL;
@ -4299,75 +4303,16 @@ int create_parts(int x, int y, float rx, float ry, int c)
for(u=-1; u<2; u++) for(u=-1; u<2; u++)
if(i+u>=0 && i+u<XRES/CELL && if(i+u>=0 && i+u<XRES/CELL &&
j+v>=0 && j+v<YRES/CELL && j+v>=0 && j+v<YRES/CELL &&
bmap[j+v][i+u] == 5) bmap[j+v][i+u] == WL_STREAM)
return 1; return 1;
bmap[j][i] = 5; bmap[j][i] = WL_STREAM;
return 1; return 1;
} }
if(c == 127) else if(wall==r)
{ {
b = 4; b = wall;
dw = 1; dw = 1;
} }
if(c == 122)
{
b = 8;
dw = 1;
}
if(c == 123)
{
b = 7;
dw = 1;
}
if(c == 124)
{
b = 6;
dw = 1;
}
if(c == 128)
{
b = 3;
dw = 1;
}
if(c == 129)
{
b = 2;
dw = 1;
}
if(c == 130)
{
b = 0;
dw = 1;
}
if(c == 131)
{
b = 1;
dw = 1;
}
if(c == 132)
{
b = 9;
dw = 1;
}
if(c == 133)
{
b = 10;
dw = 1;
}
if(c == 134)
{
b = 11;
dw = 1;
}
if(c == 135)
{
b = 12;
dw = 1;
}
if(c == 140)
{
b = 13;
dw = 1;
} }
if(c == 255) if(c == 255)
{ {
@ -4389,7 +4334,7 @@ int create_parts(int x, int y, float rx, float ry, int c)
{ {
i = ox; i = ox;
j = oy; j = oy;
if(b==4) if(b==WL_FAN)
{ {
fvx[j][i] = 0.0f; fvx[j][i] = 0.0f;
fvy[j][i] = 0.0f; fvy[j][i] = 0.0f;
@ -4404,7 +4349,7 @@ int create_parts(int x, int y, float rx, float ry, int c)
{ {
for(j=-ry; j<=ry; j++) for(j=-ry; j<=ry; j++)
for(i=-rx; i<=rx; i++) for(i=-rx; i<=rx; i++)
if((CURRENT_BRUSH==CIRCLE_BRUSH && (i*i)/(rx*rx)+(j*j)/(ry*rx)<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx)) if((CURRENT_BRUSH==CIRCLE_BRUSH && (i*i)/(rx*rx)+(j*j)/(ry*ry)<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx))
delete_part(x+i, y+j); delete_part(x+i, y+j);
return 1; return 1;
} }
@ -4412,7 +4357,7 @@ int create_parts(int x, int y, float rx, float ry, int c)
{ {
for(j=-ry; j<=ry; j++) for(j=-ry; j<=ry; j++)
for(i=-rx; i<=rx; i++) for(i=-rx; i<=rx; i++)
if((CURRENT_BRUSH==CIRCLE_BRUSH && (i*i)/(rx*rx)+(j*j)/(ry*rx)<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx)) if((CURRENT_BRUSH==CIRCLE_BRUSH && (i*i)/(rx*rx)+(j*j)/(ry*ry)<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx))
delete_part(x+i, y+j); delete_part(x+i, y+j);
if(c==0) if(c==0)
return 1; return 1;
@ -4421,7 +4366,7 @@ int create_parts(int x, int y, float rx, float ry, int c)
{ {
for(j=-ry; j<=ry; j++) for(j=-ry; j<=ry; j++)
for(i=-rx; i<=rx; i++) for(i=-rx; i<=rx; i++)
if((CURRENT_BRUSH==CIRCLE_BRUSH && (i*i)/(rx*rx)+(j*j)/(ry*rx)<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx)) if((CURRENT_BRUSH==CIRCLE_BRUSH && (i*i)/(rx*rx)+(j*j)/(ry*ry)<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx))
create_part(-1, x+i, y+j, c); create_part(-1, x+i, y+j, c);
return 1; return 1;
} }
@ -4432,7 +4377,7 @@ int create_parts(int x, int y, float rx, float ry, int c)
SLALT = 0; SLALT = 0;
for(j=-ry; j<=ry; j++) for(j=-ry; j<=ry; j++)
for(i=-rx; i<=rx; i++) for(i=-rx; i<=rx; i++)
if((CURRENT_BRUSH==CIRCLE_BRUSH && (i*i)/(rx*rx)+(j*j)/(ry*rx)<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx)) if((CURRENT_BRUSH==CIRCLE_BRUSH && (i*i)/(rx*rx)+(j*j)/(ry*ry)<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx))
delete_part(x+i, y+j); delete_part(x+i, y+j);
SLALT = stemp; SLALT = stemp;
return 1; return 1;
@ -4440,7 +4385,7 @@ int create_parts(int x, int y, float rx, float ry, int c)
for(j=-ry; j<=ry; j++) for(j=-ry; j<=ry; j++)
for(i=-rx; i<=rx; i++) for(i=-rx; i<=rx; i++)
if((CURRENT_BRUSH==CIRCLE_BRUSH && (i*i)/(rx*rx)+(j*j)/(ry*rx)<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx)) if((CURRENT_BRUSH==CIRCLE_BRUSH && (i*i)/(rx*rx)+(j*j)/(ry*ry)<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx))
if(create_part(-1, x+i, y+j, c)==-1) if(create_part(-1, x+i, y+j, c)==-1)
f = 1; f = 1;
return !f; return !f;