summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCracker64 <cracker642@gmail.com>2011-02-04 06:00:03 (GMT)
committer Cracker64 <cracker642@gmail.com>2011-02-04 06:00:03 (GMT)
commit9064cabf288be8ecb2fbc1c15bb4071cf3df1c22 (patch)
treee19413ebf90d2958069b4d108e61983fbe3638c3 /src
parentb6f1ba977cd1b33cf857816ede4dca883a989561 (diff)
downloadpowder-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.c32
-rw-r--r--src/elements/fwrk.c20
-rw-r--r--src/elements/phot.c3
-rw-r--r--src/elements/sprk.c8
-rw-r--r--src/interface.c18
-rw-r--r--src/main.c50
-rw-r--r--src/powder.c22
7 files changed, 59 insertions, 94 deletions
diff --git a/src/air.c b/src/air.c
index 33a4913..e9a8b9e 100644
--- a/src/air.c
+++ b/src/air.c
@@ -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)
diff --git a/src/main.c b/src/main.c
index 38669fc..3358a33 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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