diff --git a/src/elements/amtr.c b/src/elements/amtr.c index 3f70daae4..748254b65 100644 --- a/src/elements/amtr.c +++ b/src/elements/amtr.c @@ -1,30 +1,26 @@ #include int update_AMTR(UPDATE_FUNC_ARGS) { - int r, rt; - for (nx=-1; nx<2; nx++) - for (ny=-1; ny<2; ny++) - if (x+nx>=0 && y+ny>0 && - x+nx=0 && y+ry>0 && x+rx>8)>=NPART || !r) continue; - rt = parts[r>>8].type; if ((r&0xFF)!=PT_AMTR && (r&0xFF)!=PT_DMND && (r&0xFF)!=PT_CLNE && (r&0xFF)!=PT_PCLN && (r&0xFF)!=PT_NONE && (r&0xFF)!=PT_PHOT && (r&0xFF)!=PT_VOID && (r&0xFF)!=PT_BHOL && (r&0xFF)!=PT_PRTI && (r&0xFF)!=PT_PRTO) { parts[i].life++; if (parts[i].life==3) { - parts[i].type = PT_NONE; kill_part(i); return 1; } - parts[r>>8].life = 0; - parts[r>>8].type = PT_NONE; - kill_part(r>>8); if (2>(rand()/(RAND_MAX/100))) - create_part(-1, x+nx, y+ny, PT_PHOT); + create_part(r>>8, x+rx, y+ry, PT_PHOT); + else + kill_part(r>>8); pv[y/CELL][x/CELL] -= 5.0f; } } diff --git a/src/elements/aray.c b/src/elements/aray.c index e3d142f75..136158ae9 100644 --- a/src/elements/aray.c +++ b/src/elements/aray.c @@ -1,19 +1,20 @@ #include int update_ARAY(UPDATE_FUNC_ARGS) { - int r, nxx, nyy, docontinue, nxi, nyi; + int r, nxx, nyy, docontinue, nxi, nyi, rx, ry, nr; if (parts[i].life==0) { int colored =0; - for (nx=-1; nx<2; nx++) { - for (ny=-1; ny<2; ny++) { - if (x+nx>=0 && y+ny>0 && x+nx=0 && y+ry>0 && x+rx>8)>=NPART || !r) continue; if ((r&0xFF)==PT_SPRK) { int destroy = (parts[r>>8].ctype==PT_PSCN)?1:0; int nostop = (parts[r>>8].ctype==PT_INST)?1:0; - for (docontinue = 1, nxx = 0, nyy = 0, nxi = nx*-1, nyi = ny*-1; docontinue; nyy+=nyi, nxx+=nxi) { + for (docontinue = 1, nxx = 0, nyy = 0, nxi = rx*-1, nyi = ry*-1; docontinue; nyy+=nyi, nxx+=nxi) { if (!(x+nxi+nxx= 0 && y+nyi+nyy >= 0)) { break; } @@ -29,22 +30,21 @@ int update_ARAY(UPDATE_FUNC_ARGS) { parts[nr].ctype = colored; } } else if (!destroy) { - if (parts[r>>8].type==PT_BRAY&&parts[r>>8].tmp==0) { + if ((r&0xFF)==PT_BRAY&&parts[r>>8].tmp==0) { if (nyy!=0 || nxx!=0) { - parts[r>>8].type = PT_BRAY; parts[r>>8].life = 1020; parts[r>>8].tmp = 1; if (!parts[r>>8].ctype) parts[r>>8].ctype = colored; } docontinue = 0; - } else if (parts[r>>8].type==PT_BRAY&&parts[r>>8].tmp==1) { + } else if ((r&0xFF)==PT_BRAY&&parts[r>>8].tmp==1) { parts[r>>8].life = 1020; //docontinue = 1; } - else if (parts[r>>8].type==PT_FILT) { + else if ((r&0xFF)==PT_FILT) { colored = parts[r>>8].ctype; - } else if (parts[r>>8].type!=PT_INWR && parts[r>>8].type!=PT_ARAY && parts[r>>8].type!=PT_WIFI) { + } else if ((r&0xFF)!=PT_INWR && (r&0xFF)!=PT_ARAY && (r&0xFF)!=PT_WIFI) { if (nyy!=0 || nxx!=0) { create_part(-1, x+nxi+nxx, y+nyi+nyy, PT_SPRK); } @@ -69,8 +69,6 @@ int update_ARAY(UPDATE_FUNC_ARGS) { } //parts[i].life = 4; } - } - } } return 0; } diff --git a/src/elements/bcln.c b/src/elements/bcln.c index e27478d09..dfcfcd827 100644 --- a/src/elements/bcln.c +++ b/src/elements/bcln.c @@ -13,18 +13,18 @@ int update_BCLN(UPDATE_FUNC_ARGS) { } if (!parts[i].ctype) { - for (nx=-1; nx<2; nx++) - for (ny=-1; ny<2; ny++) - if (x+nx>=0 && y+ny>0 && - x+nx=0 && y+ry>0 && x+rx int update_BCOL(UPDATE_FUNC_ARGS) { - int r; + int r, rx, ry; if (parts[i].life<=0) { - parts[i].type = PT_NONE; - kill_part(i); - create_part(-1, x, y, PT_FIRE); + create_part(i, x, y, PT_FIRE); return 1; } else if (parts[i].life < 100) { parts[i].life--; create_part(-1, x+rand()%3-1, y+rand()%3-1, PT_FIRE); } - for (nx=-2; nx<3; nx++) - for (ny=-2; ny<3; ny++) - if (x+nx>=0 && y+ny>0 && - x+nx=0 && y+ry>0 && x+rx>8)>=NPART || !r) continue; if (((r&0xFF)==PT_FIRE || (r&0xFF)==PT_PLSM) && 1>(rand()%500)) diff --git a/src/elements/bmtl.c b/src/elements/bmtl.c index e47c9b709..5a2703e3d 100644 --- a/src/elements/bmtl.c +++ b/src/elements/bmtl.c @@ -1,26 +1,26 @@ #include int update_BMTL(UPDATE_FUNC_ARGS) { - int r, rt; + int r, rx, ry, rt; if (parts[i].tmp>1) { parts[i].tmp--; - for (nx=-1; nx<2; nx++) - for (ny=-1; ny<2; ny++) - if (x+nx>=0 && y+ny>0 && x+nx=0 && y+ry>0 && x+rx>8)>=NPART || !r) continue; - rt =parts[r>>8].type; + rt = parts[r>>8].type; if ((rt==PT_METL || rt==PT_IRON) && 1>(rand()/(RAND_MAX/100))) { - parts[r>>8].type=PT_BMTL; + part_change_type(r>>8,x+rx,y+ry,PT_BMTL); parts[r>>8].tmp=(parts[i].tmp<=7)?parts[i].tmp=1:parts[i].tmp-(rand()%5);//rand()/(RAND_MAX/300)+100; } } } else if (parts[i].tmp==1 && 1>rand()%1000) { parts[i].tmp = 0; - parts[i].type = PT_BRMT; + part_change_type(i,x,y,PT_BRMT); } return 0; } diff --git a/src/elements/bomb.c b/src/elements/bomb.c index b80dfdfe5..814f120bc 100644 --- a/src/elements/bomb.c +++ b/src/elements/bomb.c @@ -1,29 +1,29 @@ #include int update_BOMB(UPDATE_FUNC_ARGS) { - int r, nb; + int r, rx, ry, nb; 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=0 && y+ry>0 && x+rx>8)>=NPART || !r) continue; - if (parts[r>>8].type!=PT_NONE && parts[r>>8].type!=PT_BOMB) { - parts[i].type = PT_NONE; + if ((r&0xFF)!=PT_BOMB) { + kill_part(i); return 1; } } } 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=0 && y+ry>0 && x+rx>8)>=NPART || !r) continue; - if (parts[r>>8].type!=PT_NONE && parts[r>>8].type!=PT_BOMB && parts[r>>8].type!=PT_DMND && parts[r>>8].type!=PT_CLNE && parts[r>>8].type!=PT_PCLN && parts[r>>8].type!=PT_BCLN) { + if ((r&0xFF)!=PT_BOMB && (r&0xFF)!=PT_DMND && (r&0xFF)!=PT_CLNE && (r&0xFF)!=PT_PCLN && (r&0xFF)!=PT_BCLN) { int rad = 8; int nxi; int nxj; @@ -55,7 +55,7 @@ int update_BOMB(UPDATE_FUNC_ARGS) { } //create_parts(x, y, 9, 9, PT_BOMB); //create_parts(x, y, 8, 8, PT_NONE); - parts[i].type = PT_NONE; + kill_part(i); return 1; } } diff --git a/src/elements/clne.c b/src/elements/clne.c index d8e6879a1..dcb205bfe 100644 --- a/src/elements/clne.c +++ b/src/elements/clne.c @@ -3,18 +3,18 @@ int update_CLNE(UPDATE_FUNC_ARGS) { if (!parts[i].ctype) { - for (nx=-1; nx<2; nx++) - for (ny=-1; ny<2; ny++) - if (x+nx>=0 && y+ny>0 && - x+nx=0 && y+ry>0 && x+rx int update_PLNT(UPDATE_FUNC_ARGS) { - int r; - for (nx=-2; nx<3; nx++) - for (ny=-2; ny<3; ny++) - if (x+nx>=0 && y+ny>0 && - x+nx=0 && y+ry>0 && x+rx>8)>=NPART || !r) continue; if ((r&0xFF)==PT_WATR && 1>(rand()%250)) { - parts[i].type = PT_PLNT; - parts[r>>8].type = PT_PLNT; - parts[r>>8].life = 0; + np = create_part(r>>8,x+rx,y+ry,PT_PLNT); + if (np<0) continue; + parts[np].life = 0; } else if ((r&0xFF)==PT_LAVA && 1>(rand()%250)) { + part_change_type(i,x,y,PT_FIRE); parts[i].life = 4; - parts[i].type = PT_FIRE; } else if ((r&0xFF)==PT_SMKE && (1>rand()%250)) { - parts[r>>8].type = PT_NONE; + kill_part(r>>8); parts[i].life = rand()%60 + 60; } else if ((r&0xFF)==PT_WOOD && (1>rand()%20) && abs(nx+ny)<=2 && VINE_MODE) { int nnx = rand()%3 -1; int nny = rand()%3 -1; - if (x+nx+nnx>=0 && y+ny+nny>0 && - x+nx+nnx=0 && y+ry+nny>0 && x+rx+nnx>8)>=NPART||pmap[y+ny+nny][x+nx+nnx]) + if ((pmap[y+ry+nny][x+rx+nnx]>>8)>=NPART||pmap[y+ry+nny][x+rx+nnx]) continue; - if (create_part(-1,x+nx+nnx,y+ny+nny,PT_VINE)) - parts[pmap[y+ny+nny][x+nx+nnx]>>8].temp = parts[i].temp; + np = create_part(-1,x+rx+nnx,y+ry+nny,PT_VINE); + if (np<0) continue; + parts[np].temp = parts[i].temp; } } //if(t==PT_SNOW && (r&0xFF)==PT_WATR && 15>(rand()%1000)) @@ -44,16 +43,15 @@ int update_PLNT(UPDATE_FUNC_ARGS) { } if (parts[i].life==2) { - for (nx=-1; nx<2; nx++) - for (ny=-1; ny<2; ny++) - if (x+nx>=0 && y+ny>0 && - x+nx=0 && y+ry>0 && x+rx>8)>=NPART) continue; if (!r) - create_part(-1,x+nx,y+ny,PT_O2); + create_part(-1,x+rx,y+ry,PT_O2); } parts[i].life = 0; } diff --git a/src/elements/prti.c b/src/elements/prti.c index ff9f4598a..4d3a4bef9 100644 --- a/src/elements/prti.c +++ b/src/elements/prti.c @@ -1,28 +1,27 @@ #include int update_PRTI(UPDATE_FUNC_ARGS) { - int r, nnx; + int r, nnx, rx, ry; int count =0; parts[i].tmp = (int)((parts[i].temp-73.15f)/100+1); - for (ny=-1; ny<2; ny++) - for (nx=-1; nx<2; nx++) - if (x+nx>=0 && y+ny>0 && - x+nx=0 && y+ry>0 && x+rx>8)>=NPART || !r) continue; - if (parts[r>>8].type==PT_SPRK || (parts[r>>8].type!=PT_PRTI && parts[r>>8].type!=PT_PRTO && (ptypes[parts[r>>8].type].falldown!= 0 || pstates[parts[r>>8].type].state == ST_GAS))) + if ((r&0xFF)==PT_SPRK || ((r&0xFF)!=PT_PRTI && (r&0xFF)!=PT_PRTO && (ptypes[r&0xFF].falldown!= 0 || pstates[r&0xFF].state == ST_GAS))) for ( nnx=0; nnx<80; nnx++) if (!portal[parts[i].tmp][count-1][nnx]) { portal[parts[i].tmp][count-1][nnx] = parts[r>>8].type; portaltemp[parts[i].tmp][count-1][nnx] = parts[r>>8].temp; if (parts[r>>8].type==PT_SPRK) - parts[r>>8].type = parts[r>>8].ctype; + part_change_type(r>>8,x+rx,y+ry,parts[r>>8].ctype); else - parts[r>>8].type = PT_NONE; + kill_part(r>>8); break; } } diff --git a/src/elements/prto.c b/src/elements/prto.c index acaa689bf..a5d2c7ec9 100644 --- a/src/elements/prto.c +++ b/src/elements/prto.c @@ -1,16 +1,15 @@ #include int update_PRTO(UPDATE_FUNC_ARGS) { - int r, nnx; + int r, nnx, rx, ry, np; int count = 0; parts[i].tmp = (int)((parts[i].temp-73.15f)/100+1); - for (ny=1; ny>-2; ny--) - for (nx=1; nx>-2; nx--) - if (x+nx>=0 && y+ny>0 && - x+nx=0 && y+ry>0 && x+rx>8)>=NPART || r) continue; if (!r) @@ -22,7 +21,7 @@ int update_PRTO(UPDATE_FUNC_ARGS) { randomness=1; if (randomness>8) randomness=8; - if (portal[parts[i].tmp][randomness-1][nnx]==PT_SPRK)//todo. make it look better + if (portal[parts[i].tmp][randomness-1][nnx]==PT_SPRK)// TODO: make it look better { create_part(-1,x+1,y,portal[parts[i].tmp][randomness-1][nnx]); create_part(-1,x+1,y+1,portal[parts[i].tmp][randomness-1][nnx]); @@ -38,8 +37,9 @@ int update_PRTO(UPDATE_FUNC_ARGS) { } else if (portal[parts[i].tmp][randomness-1][nnx]) { - create_part(-1,x+nx,y+ny,portal[parts[i].tmp][randomness-1][nnx]); - parts[pmap[y+ny][x+nx]>>8].temp = portaltemp[parts[i].tmp][randomness-1][nnx]; + np = create_part(-1,x+rx,y+ry,portal[parts[i].tmp][randomness-1][nnx]); + if (np<0) continue; + parts[np].temp = portaltemp[parts[i].tmp][randomness-1][nnx]; portal[parts[i].tmp][randomness-1][nnx] = 0; portaltemp[parts[i].tmp][randomness-1][nnx] = 0; break; diff --git a/src/elements/pump.c b/src/elements/pump.c index 1de7a1073..c1c120163 100644 --- a/src/elements/pump.c +++ b/src/elements/pump.c @@ -1,7 +1,7 @@ #include int update_PUMP(UPDATE_FUNC_ARGS) { - int r; + int r, rx, ry; if (parts[i].life==10) { if (parts[i].temp>=256.0+273.15) @@ -19,12 +19,11 @@ int update_PUMP(UPDATE_FUNC_ARGS) { if (y+CELL=0 && y+ny>0 && - x+nx=0 && y+ry>0 && x+rx>8)>=NPART || !r) continue; if ((r&0xFF)==PT_PUMP) diff --git a/src/elements/rime.c b/src/elements/rime.c index d78e322bd..845d8a293 100644 --- a/src/elements/rime.c +++ b/src/elements/rime.c @@ -1,26 +1,24 @@ #include int update_RIME(UPDATE_FUNC_ARGS) { - int r, rt; + int r, rx, ry; parts[i].vx = 0; parts[i].vy = 0; - for (nx=-1; nx<2; nx++) - for (ny=-1; ny<2; ny++) - if (x+nx>=0 && y+ny>0 && - x+nx=0 && y+ry>0 && x+rx>8)>=NPART || !r) continue; - rt = parts[r>>8].type; - if (rt==PT_SPRK) + if ((r&0xFF)==PT_SPRK) { - parts[i].type = PT_FOG; + part_change_type(i,x,y,PT_FOG); parts[i].life = rand()%50 + 60; } - else if (rt==PT_FOG&&parts[r>>8].life>0) + else if ((r&0xFF)==PT_FOG&&parts[r>>8].life>0) { - parts[i].type = PT_FOG; + part_change_type(i,x,y,PT_FOG); parts[i].life = parts[r>>8].life; } } diff --git a/src/elements/shld.c b/src/elements/shld.c index 940fa08d5..434a9dbfd 100644 --- a/src/elements/shld.c +++ b/src/elements/shld.c @@ -1,33 +1,34 @@ #include int update_SHLD1(UPDATE_FUNC_ARGS) { - int r, nnx, nny; - for (nx=-1; nx<2; nx++) - for (ny=-1; ny<2; ny++) - if (x+nx>=0 && y+ny>0 && - x+nx=0 && y+ry>0 && x+rx>8)>=NPART || !r) continue; - else if (parts[r>>8].type==PT_SPRK&&parts[i].life==0) + else if ((r&0xFF)==PT_SPRK&&parts[i].life==0) + { + if (55>rand()%200&&parts[i].life==0) + { + part_change_type(i,x,y,PT_SHLD2); + parts[i].life = 7; + } for ( nnx=-1; nnx<2; nnx++) for ( nny=-1; nny<2; nny++) { - if (7>rand()%200&&parts[i].life==0) + if (!pmap[y+ry+nny][x+rx+nnx]) { - parts[i].type = PT_SHLD2; - parts[i].life = 7; - } - else if (!pmap[y+ny+nny][x+nx+nnx]) - { - create_part(-1,x+nx+nnx,y+ny+nny,PT_SHLD1); + create_part(-1,x+rx+nnx,y+ry+nny,PT_SHLD1); //parts[pmap[y+ny+nny][x+nx+nnx]>>8].life=7; } } - else if (parts[r>>8].type==PT_SHLD3&&4>rand()%10) + } + else if ((r&0xFF)==PT_SHLD3&&4>rand()%10) { - parts[i].type=PT_SHLD2; + part_change_type(i,x,y,PT_SHLD2); parts[i].life = 7; } } @@ -35,37 +36,39 @@ int update_SHLD1(UPDATE_FUNC_ARGS) { } int update_SHLD2(UPDATE_FUNC_ARGS) { - int r, nnx, nny; - for (nx=-1; nx<2; nx++) - for (ny=-1; ny<2; ny++) - if (x+nx>=0 && y+ny>0 && - x+nx=0 && y+ry>0 && x+rx>8)>=NPART) continue; if (!r && parts[i].life>0) - create_part(-1,x+nx,y+ny,PT_SHLD1); + create_part(-1,x+rx,y+ry,PT_SHLD1); if (!r) continue; - else if (parts[r>>8].type==PT_SPRK&&parts[i].life==0) + else if ((r&0xFF)==PT_SPRK&&parts[i].life==0) + { + if (25>rand()%200&&parts[i].life==0) + { + part_change_type(i,x,y,PT_SHLD3); + parts[i].life = 7; + } for ( nnx=-1; nnx<2; nnx++) for ( nny=-1; nny<2; nny++) { - if (3>rand()%200&&parts[i].life==0) + if (!pmap[y+ry+nny][x+rx+nnx]) { - parts[i].type = PT_SHLD3; - parts[i].life = 7; - } - else if (!pmap[y+ny+nny][x+nx+nnx]) - { - create_part(-1,x+nx+nnx,y+ny+nny,PT_SHLD1); - parts[pmap[y+ny+nny][x+nx+nnx]>>8].life=7; + np = create_part(-1,x+rx+nnx,y+ry+nny,PT_SHLD1); + if (np<0) continue; + parts[np].life=7; } } - else if (parts[r>>8].type==PT_SHLD4&&4>rand()%10) + } + else if ((r&0xFF)==PT_SHLD4&&4>rand()%10) { - parts[i].type=PT_SHLD3; + part_change_type(i,x,y,PT_SHLD3); parts[i].life = 7; } } @@ -73,86 +76,91 @@ int update_SHLD2(UPDATE_FUNC_ARGS) { } int update_SHLD3(UPDATE_FUNC_ARGS) { - int r, nnx, nny; - for (nx=-1; nx<2; nx++) - for (ny=-1; ny<2; ny++) - if (x+nx>=0 && y+ny>0 && - x+nx=0 && y+ry>0 && x+rx>8)>=NPART) continue; if (!r) { if (1>rand()%2500) { - create_part(-1,x+nx,y+ny,PT_SHLD1); - parts[pmap[y+ny][x+nx]>>8].life=7; - parts[i].type = PT_SHLD2; + np = create_part(-1,x+rx,y+ry,PT_SHLD1); + if (np<0) continue; + parts[np].life=7; + part_change_type(i,x,y,PT_SHLD2); } else continue; } - if (parts[r>>8].type==PT_SHLD1 && parts[i].life>3) + if ((r&0xFF)==PT_SHLD1 && parts[i].life>3) { - parts[r>>8].type = PT_SHLD2; + part_change_type(r>>8,x+rx,y+ry,PT_SHLD2); parts[r>>8].life=7; } - else if (parts[r>>8].type==PT_SPRK&&parts[i].life==0) + else if ((r&0xFF)==PT_SPRK&&parts[i].life==0) + { + if (18>rand()%3000&&parts[i].life==0) + { + part_change_type(i,x,y,PT_SHLD4); + parts[i].life = 7; + } for ( nnx=-1; nnx<2; nnx++) for ( nny=-1; nny<2; nny++) { - if (2>rand()%3000&&parts[i].life==0) + + if (!pmap[y+ry+nny][x+rx+nnx]) { - parts[i].type = PT_SHLD4; - parts[i].life = 7; - } - else if (!pmap[y+ny+nny][x+nx+nnx]) - { - create_part(-1,x+nx+nnx,y+ny+nny,PT_SHLD1); - parts[pmap[y+ny+nny][x+nx+nnx]>>8].life=7; + np = create_part(-1,x+rx+nnx,y+ry+nny,PT_SHLD1); + if (np<0) continue; + parts[np].life=7; } } + } } return 0; } int update_SHLD4(UPDATE_FUNC_ARGS) { - int r, nnx, nny; - for (nx=-1; nx<2; nx++) - for (ny=-1; ny<2; ny++) - if (x+nx>=0 && y+ny>0 && - x+nx=0 && y+ry>0 && x+rx>8)>=NPART) continue; if (!r) { if (1>rand()%5500) { - create_part(-1,x+nx,y+ny,PT_SHLD1); - parts[pmap[y+ny][x+nx]>>8].life=7; - parts[i].type = PT_SHLD2; + np = create_part(-1,x+rx,y+ry,PT_SHLD1); + if (np<0) continue; + parts[np].life=7; + part_change_type(i,x,y,PT_SHLD2); } else continue; } - if (parts[r>>8].type==PT_SHLD2 && parts[i].life>3) + if ((r&0xFF)==PT_SHLD2 && parts[i].life>3) { - parts[r>>8].type = PT_SHLD3; + part_change_type(r>>8,x+rx,y+ry,PT_SHLD3); parts[r>>8].life = 7; } - else if (parts[r>>8].type==PT_SPRK&&parts[i].life==0) + else if ((r&0xFF)==PT_SPRK&&parts[i].life==0) for ( nnx=-1; nnx<2; nnx++) for ( nny=-1; nny<2; nny++) { - if (!pmap[y+ny+nny][x+nx+nnx]) + if (!pmap[y+ry+nny][x+rx+nnx]) { - create_part(-1,x+nx+nnx,y+ny+nny,PT_SHLD1); - parts[pmap[y+ny+nny][x+nx+nnx]>>8].life=7; + np = create_part(-1,x+rx+nnx,y+ry+nny,PT_SHLD1); + if (np<0) continue; + parts[np].life=7; } } } diff --git a/src/elements/sing.c b/src/elements/sing.c index 8f7c0a7a7..7127f7764 100644 --- a/src/elements/sing.c +++ b/src/elements/sing.c @@ -1,7 +1,7 @@ #include int update_SING(UPDATE_FUNC_ARGS) { - int r; + int r, rx, ry; int singularity = -parts[i].life; if (pv[y/CELL][x/CELL]0) pv[y/CELL-1][x/CELL-1] += 0.1f*(singularity-pv[y/CELL-1][x/CELL-1]); } - for (nx=-1; nx<2; nx++) - for (ny=-1; ny<2; ny++) - if (x+nx>=0 && y+ny>0 && - x+nx=0 && y+ry>0 && x+rx>8)>=NPART || !r) continue; - if (parts[r>>8].type!=PT_DMND&&33>=rand()/(RAND_MAX/100)+1) + if ((r&0xFF)!=PT_DMND&&33>=rand()/(RAND_MAX/100)+1) { - if (parts[r>>8].type==PT_SING && parts[r>>8].life >10) + if ((r&0xFF)==PT_SING && parts[r>>8].life >10) { if (parts[i].life+parts[r>>8].life > 255) continue; @@ -44,15 +43,16 @@ int update_SING(UPDATE_FUNC_ARGS) { { if (parts[r>>8].type!=PT_SING && 1>rand()%100) { - parts[r>>8].type = PT_SING; - parts[r>>8].life = rand()%50+60; + int np; + np = create_part(r>>8,x+rx,y+ry,PT_SING); + parts[np].life = rand()%50+60; } continue; } parts[i].life += 3; } parts[i].temp = restrict_flt(parts[r>>8].temp+parts[i].temp, MIN_TEMP, MAX_TEMP); - parts[r>>8].type=PT_NONE; + kill_part(r>>8); } } return 0; diff --git a/src/elements/spng.c b/src/elements/spng.c index 4f0675deb..d8eb1f1be 100644 --- a/src/elements/spng.c +++ b/src/elements/spng.c @@ -1,75 +1,75 @@ #include int update_SPNG(UPDATE_FUNC_ARGS) { - int r, trade; - if (pv[y/CELL][x/CELL]<=3&&pv[y/CELL][x/CELL]>=-3) + int r, trade, rx, ry, tmp; + if (pv[y/CELL][x/CELL]<=3&&pv[y/CELL][x/CELL]>=-3&&parts[i].temp<=374.0f) { - for (nx=-1; nx<2; nx++) - for (ny=-1; ny<2; ny++) - if (x+nx>=0 && y+ny>0 && x+nx=0 && y+ry>0 && x+rx>8)>=NPART || !r || parts[i].temp>374.0f) continue; - if (parts[r>>8].type==PT_WATR&&33>=rand()/(RAND_MAX/100)+1) + if ((r&0xFF)==PT_WATR&&33>=rand()/(RAND_MAX/100)+1) { parts[i].life++; - parts[r>>8].type=PT_NONE; + kill_part(r>>8); } } } else - for (nx=-1; nx<2; nx++) - for (ny=-1; ny<2; ny++) - if (x+nx>=0 && y+ny>0 && x+nx=0 && y+ry>0 && x+rx>8)>=NPART) continue; - 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]==WL_ALLOWAIR||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_ALLOWSOLID||bmap[(y+ny)/CELL][(x+nx)/CELL]==WL_ALLOWGAS)) + if ((bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_WALLELEC||bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_EWALL||bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_DESTROYALL||bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_WALL|| + bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_ALLOWAIR||bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_ALLOWSOLID||bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_ALLOWGAS)) continue; if ((!r)&&parts[i].life>=1)//if nothing then create water { - create_part(-1,x+nx,y+ny,PT_WATR); + create_part(-1,x+rx,y+ry,PT_WATR); parts[i].life--; } } for ( trade = 0; trade<9; trade ++) { - nx = rand()%5-2; - ny = rand()%5-2; - if (x+nx>=0 && y+ny>0 && x+nx=0 && y+ry>0 && x+rx>8)>=NPART || !r) continue; - if (parts[r>>8].type==PT_SPNG&&(parts[i].life>parts[r>>8].life)&&parts[i].life>0)//diffusion + if ((r&0xFF)==PT_SPNG&&(parts[i].life>parts[r>>8].life)&&parts[i].life>0)//diffusion { - int temp = parts[i].life - parts[r>>8].life; - if (temp ==1) + tmp = parts[i].life - parts[r>>8].life; + if (tmp ==1) { parts[r>>8].life ++; parts[i].life --; trade = 9; } - else if (temp>0) + else if (tmp>0) { - parts[r>>8].life += temp/2; - parts[i].life -= temp/2; + parts[r>>8].life += tmp/2; + parts[i].life -= tmp/2; trade = 9; } } } } - for (nx=-1; nx<2; nx++) - for (ny=-1; ny<2; ny++) - if (x+nx>=0 && y+ny>0 && x+nx=0 && y+ry>0 && x+rx>8)>=NPART || !r) continue; - if (parts[r>>8].type==PT_FIRE&&parts[i].life>0) + if ((r&0xFF)==PT_FIRE&&parts[i].life>0) { if (parts[i].life<=2) parts[i].life --; @@ -77,18 +77,18 @@ int update_SPNG(UPDATE_FUNC_ARGS) { } } if (parts[i].temp>=374) - for (nx=-1; nx<2; nx++) - for (ny=-1; ny<2; ny++) - if (x+nx>=0 && y+ny>0 && x+nx=0 && y+ry>0 && x+rx>8)>=NPART) continue; - 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)) + if ((bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_WALLELEC||bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_ALLOWLIQUID||bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_DESTROYALL||bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_WALL||bmap[(y+ry)/CELL][(x+rx)/CELL]==WL_ALLOWSOLID)) continue; if ((!r)&&parts[i].life>=1)//if nothing then create steam { - create_part(-1,x+nx,y+ny,PT_WTRV); + create_part(-1,x+rx,y+ry,PT_WTRV); parts[i].life--; parts[i].temp -= 40.0f; } diff --git a/src/elements/wifi.c b/src/elements/wifi.c index 6584a0086..0180b75ae 100644 --- a/src/elements/wifi.c +++ b/src/elements/wifi.c @@ -12,22 +12,10 @@ int update_WIFI(UPDATE_FUNC_ARGS) { continue; if (wireless[parts[i].tmp][0]) { - if ((r&0xFF)==PT_NSCN&&parts[r>>8].life==0 && wireless[parts[i].tmp][0]) + if (((r&0xFF)==PT_NSCN||(r&0xFF)==PT_PSCN||(r&0xFF)==PT_INWR)&&parts[r>>8].life==0 && wireless[parts[i].tmp][0]) { + parts[r>>8].ctype = r&0xFF; part_change_type(r>>8,x+rx,y+ry,PT_SPRK); - parts[r>>8].ctype = PT_NSCN; - parts[r>>8].life = 4; - } - else if ((r&0xFF)==PT_PSCN&&parts[r>>8].life==0 && wireless[parts[i].tmp][0]) - { - part_change_type(r>>8,x+rx,y+ry,PT_SPRK); - parts[r>>8].ctype = PT_PSCN; - parts[r>>8].life = 4; - } - else if ((r&0xFF)==PT_INWR&&parts[r>>8].life==0 && wireless[parts[i].tmp][0]) - { - part_change_type(r>>8,x+rx,y+ry,PT_SPRK); - parts[r>>8].ctype = PT_INWR; parts[r>>8].life = 4; } }