diff options
| author | Cracker64 <cracker642@gmail.com> | 2011-02-04 06:00:03 (GMT) |
|---|---|---|
| committer | Cracker64 <cracker642@gmail.com> | 2011-02-04 06:00:03 (GMT) |
| commit | 9064cabf288be8ecb2fbc1c15bb4071cf3df1c22 (patch) | |
| tree | e19413ebf90d2958069b4d108e61983fbe3638c3 /src | |
| parent | b6f1ba977cd1b33cf857816ede4dca883a989561 (diff) | |
| download | powder-9064cabf288be8ecb2fbc1c15bb4071cf3df1c22.zip powder-9064cabf288be8ecb2fbc1c15bb4071cf3df1c22.tar.gz | |
merge jacksonmj's and much better string parsing because of a function i found.
Diffstat (limited to 'src')
| -rw-r--r-- | src/air.c | 32 | ||||
| -rw-r--r-- | src/elements/fwrk.c | 20 | ||||
| -rw-r--r-- | src/elements/phot.c | 3 | ||||
| -rw-r--r-- | src/elements/sprk.c | 8 | ||||
| -rw-r--r-- | src/interface.c | 18 | ||||
| -rw-r--r-- | src/main.c | 50 | ||||
| -rw-r--r-- | src/powder.c | 22 |
7 files changed, 59 insertions, 94 deletions
@@ -86,8 +86,8 @@ void update_air(void) dp = 0.0f; dp += vx[y][x-1] - vx[y][x]; dp += vy[y-1][x] - vy[y][x]; - pv[y][x] *= PLOSS; - pv[y][x] += dp*TSTEPP; + pv[y][x] *= AIR_PLOSS; + pv[y][x] += dp*AIR_TSTEPP; } for (y=0; y<YRES/CELL-1; y++) @@ -96,10 +96,10 @@ void update_air(void) dx = dy = 0.0f; dx += pv[y][x] - pv[y][x+1]; dy += pv[y][x] - pv[y+1][x]; - vx[y][x] *= VLOSS; - vy[y][x] *= VLOSS; - vx[y][x] += dx*TSTEPV; - vy[y][x] += dy*TSTEPV; + vx[y][x] *= AIR_VLOSS; + vy[y][x] *= AIR_VLOSS; + vx[y][x] += dx*AIR_TSTEPV; + vy[y][x] += dy*AIR_TSTEPV; if (bmap[y][x]==WL_WALL || bmap[y][x+1]==WL_WALL || bmap[y][x]==WL_WALLELEC || bmap[y][x+1]==WL_WALLELEC || (bmap[y][x]==WL_EWALL && !emap[y][x]) || @@ -148,20 +148,20 @@ void update_air(void) if (i>=2 && i<XRES/CELL-3 && j>=2 && j<YRES/CELL-3) { - dx *= 1.0f - VADV; - dy *= 1.0f - VADV; + dx *= 1.0f - AIR_VADV; + dy *= 1.0f - AIR_VADV; - dx += VADV*(1.0f-tx)*(1.0f-ty)*vx[j][i]; - dy += VADV*(1.0f-tx)*(1.0f-ty)*vy[j][i]; + dx += AIR_VADV*(1.0f-tx)*(1.0f-ty)*vx[j][i]; + dy += AIR_VADV*(1.0f-tx)*(1.0f-ty)*vy[j][i]; - dx += VADV*tx*(1.0f-ty)*vx[j][i+1]; - dy += VADV*tx*(1.0f-ty)*vy[j][i+1]; + dx += AIR_VADV*tx*(1.0f-ty)*vx[j][i+1]; + dy += AIR_VADV*tx*(1.0f-ty)*vy[j][i+1]; - dx += VADV*(1.0f-tx)*ty*vx[j+1][i]; - dy += VADV*(1.0f-tx)*ty*vy[j+1][i]; + dx += AIR_VADV*(1.0f-tx)*ty*vx[j+1][i]; + dy += AIR_VADV*(1.0f-tx)*ty*vy[j+1][i]; - dx += VADV*tx*ty*vx[j+1][i+1]; - dy += VADV*tx*ty*vy[j+1][i+1]; + dx += AIR_VADV*tx*ty*vx[j+1][i+1]; + dy += AIR_VADV*tx*ty*vy[j+1][i+1]; } if (bmap[y][x] == WL_FAN) diff --git a/src/elements/fwrk.c b/src/elements/fwrk.c index def28e4..06390c5 100644 --- a/src/elements/fwrk.c +++ b/src/elements/fwrk.c @@ -7,9 +7,9 @@ int update_FWRK(UPDATE_FUNC_ARGS) { np = create_part(-1, x , y-1 , PT_FWRK); if (np!=-1) { - parts[r>>8].vy = rand()%8-22; - parts[r>>8].vx = rand()%20-rand()%20; - parts[r>>8].life=rand()%15+25; + parts[np].vy = rand()%8-22; + parts[np].vx = rand()%20-rand()%20; + parts[np].life=rand()%15+25; kill_part(i); return 1; } @@ -33,13 +33,13 @@ int update_FWRK(UPDATE_FUNC_ARGS) { pv[y/CELL][x/CELL] += 2.00f*CFDS; if (np!=-1) { - parts[r>>8].vy = -(rand()%10-1); - parts[r>>8].vx = ((rand()%2)*2-1)*rand()%(5+5)+(parts[i].vx)*2 ; - parts[r>>8].life= rand()%37+18; - parts[r>>8].tmp=q; - parts[r>>8].flags=w; - parts[r>>8].ctype=e; - parts[r>>8].temp= rand()%20+6000; + parts[np].vy = -(rand()%10-1); + parts[np].vx = ((rand()%2)*2-1)*rand()%(5+5)+(parts[i].vx)*2 ; + parts[np].life= rand()%37+18; + parts[np].tmp=q; + parts[np].flags=w; + parts[np].ctype=e; + parts[np].temp= rand()%20+6000; } } } diff --git a/src/elements/phot.c b/src/elements/phot.c index 11585f9..a6a5d07 100644 --- a/src/elements/phot.c +++ b/src/elements/phot.c @@ -6,7 +6,8 @@ int update_PHOT(UPDATE_FUNC_ARGS) { if (1>rand()%10) update_PYRO(UPDATE_FUNC_SUBCALL_ARGS); for (rx=-1; rx<2; rx++) for (ry=-1; ry<2; ry++) - if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry)) { + if (x+rx>=0 && y+ry>=0 && x+rx<XRES && y+ry<YRES && (rx || ry)) { + r = pmap[y+ry][x+rx]; if ((r>>8)>=NPART || !r) continue; if ((r&0xFF)==PT_ISOZ && 5>(rand()%2000)) diff --git a/src/elements/sprk.c b/src/elements/sprk.c index ddac968..f107b9a 100644 --- a/src/elements/sprk.c +++ b/src/elements/sprk.c @@ -25,6 +25,10 @@ int update_SPRK(UPDATE_FUNC_ARGS) { kill_part(i); return 1; } + else if (ct==PT_NTCT || ct==PT_PTCT) + { + update_NPTCT(UPDATE_FUNC_SUBCALL_ARGS); + } else if (ct==PT_ETRD&&parts[i].life==1) { nearp = nearest_part(i, PT_ETRD); @@ -97,12 +101,12 @@ int update_SPRK(UPDATE_FUNC_ARGS) { // ct = spark from material, rt = spark to material. Make conduct_sprk = 0 if conduction not allowed if (pavg == PT_INSL) conduct_sprk = 0; - if (!(ptypes[rt].properties&PROP_CONDUCTS||rt==PT_INST)) conduct_sprk = 0; + if (!(ptypes[rt].properties&PROP_CONDUCTS||rt==PT_INST||rt==PT_QRTZ)) conduct_sprk = 0; if (abs(rx)+abs(ry)>=4 &&ct!=PT_SWCH&&rt!=PT_SWCH) conduct_sprk = 0; - if (ct==PT_METL && (rt==PT_NTCT||rt==PT_PTCT||rt==PT_INWR||(rt==PT_SPRK&&(parts[r>>8].ctype==PT_NTCT||parts[r>>8].ctype==PT_PTCT)))) + if (ct==PT_METL && (rt==PT_NTCT||rt==PT_PTCT||rt==PT_INWR||(rt==PT_SPRK&&(parts[r>>8].ctype==PT_NTCT||parts[r>>8].ctype==PT_PTCT))) && pavg!=PT_INSL) { parts[r>>8].temp = 473.0f; if (rt==PT_NTCT||rt==PT_PTCT) diff --git a/src/interface.c b/src/interface.c index 346c923..31d885a 100644 --- a/src/interface.c +++ b/src/interface.c @@ -3994,32 +3994,20 @@ int console_parse_type(char *txt, int *element, char *err) int console_parse_coords(char *txt, int *x, int *y, char *err) { // TODO: use regex? - char *coordtxt; - char num[10] = ""; int nx = -1, ny = -1; - txt = mystrdup(txt); - coordtxt = strtok(txt, ","); - if (coordtxt) nx = atoi(coordtxt); - if (nx>=0 && nx<XRES) sprintf(num,"%d",nx); - if (!coordtxt || strcmp(coordtxt, num)!=0) + sscanf(txt,"%d,%d",&nx,&ny); + if (nx<0 && nx>=XRES) { strcpy(err,"Invalid coordinates"); - free(txt); return 0; } - strcpy(num,""); - coordtxt = strtok(NULL, ","); - if (coordtxt) ny = atoi(coordtxt); - if (ny>=0 && ny<YRES) sprintf(num,"%d",ny); - if (!coordtxt || strcmp(coordtxt, num)!=0) + if (ny<0 && ny>=YRES) { strcpy(err,"Invalid coordinates"); - free(txt); return 0; } *x = nx; *y = ny; - free(txt); return 1; } int console_parse_partref(char *txt, int *which, char *err) @@ -2631,17 +2631,14 @@ int x,y,nx,ny,i,j,k,m; int do_next = 1; char xcoord[10]; char ycoord[10]; -char *console2; -char *console3; -char *console4; -char *console5; +char console2[15]; +char console3[15]; +char console4[15]; +char console5[15]; //sprintf(console_error, "%s", console); if(console && strcmp(console, "")!=0 && strncmp(console, " ", 1)!=0) { - console2 = strtok(console, " "); - console3 = strtok(NULL, " "); - console4 = strtok(NULL, " "); - console5 = strtok(NULL, " "); + sscanf(console,"%s %s %s %s", console2, console3, console4, console5);//why didn't i know about this function?! if(strcmp(console2, "quit")==0) { return -1; @@ -2681,41 +2678,8 @@ char *console5; tokensize = strlen(tokens); x = 0; y = 0; - strcpy(xcoord,strtok(tokens,",")); - strcpy(ycoord,strtok(NULL," ")); - if(xcoord[1]=='+')//get additions - { - for(k = 2; k<strlen(xcoord);k++) - { - temp[k-2] = xcoord[k]; - } - x += atoi(temp); - } - else if(xcoord[1]=='-') - { - for(k = 2; k<strlen(xcoord);k++) - { - temp[k-2] = xcoord[k]; - } - x += -atoi(temp); - } - memset(temp, 0,sizeof(temp)); - if(ycoord[1]=='+') - { - for(k = 2; k<strlen(ycoord);k++) - { - temp[k-2] = ycoord[k]; - } - y += atoi(temp); - } - else if(ycoord[1]=='-') - { - for(k = 2; k<strlen(ycoord);k++) - { - temp[k-2] = ycoord[k]; - } - y += -atoi(temp); - } + sscanf(tokens,"x%d,y%d",&x,&y); + sscanf(tokens,"%s,%s",xcoord,ycoord); x += nx; y += ny; sprintf(xcoord,"%d",x); diff --git a/src/powder.c b/src/powder.c index 6897cb1..5a60d0d 100644 --- a/src/powder.c +++ b/src/powder.c @@ -1080,7 +1080,7 @@ inline int parts_avg(int ci, int ni,int t) { if (t==PT_INSL)//to keep electronics working { - int pmr = pmap[(int)((parts[ci].y + parts[ni].y)/2)][(int)((parts[ci].x + parts[ni].x)/2)]; + int pmr = pmap[((int)(parts[ci].y+0.5f) + (int)(parts[ni].y+0.5f))/2][((int)(parts[ci].x+0.5f) + (int)(parts[ni].x+0.5f))/2]; if ((pmr>>8) < NPART && pmr) return parts[pmr>>8].type; else @@ -1113,7 +1113,7 @@ int nearest_part(int ci, int t) { if (parts[i].type==t&&!parts[i].life&&i!=ci) { - ndistance = abs((cx-parts[i].x)+(cy-parts[i].y));// Faster but less accurate Older: sqrt(pow(cx-parts[i].x, 2)+pow(cy-parts[i].y, 2)); + ndistance = abs(cx-parts[i].x)+abs(cy-parts[i].y);// Faster but less accurate Older: sqrt(pow(cx-parts[i].x, 2)+pow(cy-parts[i].y, 2)); if (ndistance<distance) { distance = ndistance; @@ -1127,7 +1127,7 @@ int nearest_part(int ci, int t) void update_particles_i(pixel *vid, int start, int inc) { int i, j, x, y, t, nx, ny, r, surround_space, s, lt, rt, nt, nnx, nny, q, golnum, goldelete, z, neighbors; - float mv, dx, dy, ix, iy, lx, ly, nrx, nry, dp; + float mv, dx, dy, ix, iy, lx, ly, nrx, nry, dp, ctemph, ctempl; int fin_x, fin_y, clear_x, clear_y; float fin_xf, fin_yf, clear_xf, clear_yf; float nn, ct1, ct2, swappage; @@ -1290,9 +1290,9 @@ void update_particles_i(pixel *vid, int start, int inc) } if (ISGOL==1&&++CGOL>=GSPEED)//GSPEED is frames per generation { + int createdsomething = 0; CGOL=0; ISGOL=0; - int createdsomething = 0; for (nx=CELL; nx<XRES-CELL; nx++) for (ny=CELL; ny<YRES-CELL; ny++) { @@ -1522,8 +1522,16 @@ void update_particles_i(pixel *vid, int start, int inc) parts[surround_hconduct[j]].temp = pt; } + ctemph = ctempl = pt; + // change boiling point with pressure + if ((ptypes[t].state==ST_LIQUID && ptransitions[t].tht>-1 && ptransitions[t].tht<PT_NUM && ptypes[ptransitions[t].tht].state==ST_GAS) + || t==PT_LNTG || t==PT_SLTW) + ctemph -= 2.0f*pv[y/CELL][x/CELL]; + else if ((ptypes[t].state==ST_GAS && ptransitions[t].tlt>-1 && ptransitions[t].tlt<PT_NUM && ptypes[ptransitions[t].tlt].state==ST_LIQUID) + || t==PT_WTRV) + ctempl -= 2.0f*pv[y/CELL][x/CELL]; s = 1; - if (pt>ptransitions[t].thv&&ptransitions[t].tht>-1) { + if (ctemph>ptransitions[t].thv&&ptransitions[t].tht>-1) { // particle type change due to high temperature if (ptransitions[t].tht!=PT_NUM) t = ptransitions[t].tht; @@ -1544,7 +1552,7 @@ void update_particles_i(pixel *vid, int start, int inc) else t = PT_WTRV; } else s = 0; - } else if (pt<ptransitions[t].tlv&&ptransitions[t].tlt>-1) { + } else if (ctempl<ptransitions[t].tlv&&ptransitions[t].tlt>-1) { // particle type change due to low temperature if (ptransitions[t].tlt!=PT_NUM) t = ptransitions[t].tlt; @@ -1553,7 +1561,7 @@ void update_particles_i(pixel *vid, int start, int inc) else t = PT_DSTW; } else if (t==PT_LAVA) { - if (parts[i].ctype&&parts[i].ctype!=PT_LAVA) { + if (parts[i].ctype && parts[i].ctype<PT_NUM && parts[i].ctype!=PT_LAVA) { if (ptransitions[parts[i].ctype].tht==PT_LAVA&&pt>=ptransitions[parts[i].ctype].thv) s = 0; else if (parts[i].ctype==PT_THRM&&pt>=ptransitions[PT_BMTL].thv) s = 0; else if (pt>=973.0f) s = 0; // freezing point for lava with any other (not listed in ptransitions as turning into lava) ctype |
