This commit is contained in:
Simon 2011-04-08 11:09:42 +01:00
parent 1bdf72be1a
commit 767d73c5fc
17 changed files with 1950 additions and 1960 deletions

View File

@ -79,11 +79,15 @@ int cpu_check(void);
// a b
// c d
struct matrix2d {float a,b,c,d;};
struct matrix2d {
float a,b,c,d;
};
typedef struct matrix2d matrix2d;
// column vector
struct vector2d {float x,y;};
struct vector2d {
float x,y;
};
typedef struct vector2d vector2d;
matrix2d m2d_multiply_m2d(matrix2d m1, matrix2d m2);

View File

@ -686,7 +686,7 @@ static part_transition ptransitions[PT_NUM] =
/* GOL */ {IPL, NT, IPH, NT, ITL, NT, ITH, NT},
/* GOL */ {IPL, NT, IPH, NT, ITL, NT, ITH, NT},
/* WIND */ {IPL, NT, IPH, NT, ITL, NT, ITH, NT},
/* H2 */ {IPL, NT, IPH, NT, ITL, NT, ITH, NT},
/* H2 */ {IPL, NT, IPH, NT, ITL, NT, ITH, NT},
};
#undef IPL
#undef IPH

348
src/air.c
View File

@ -34,180 +34,180 @@ void update_air(void)
int x, y, i, j;
float dp, dx, dy, f, tx, ty;
if (airMode != 4) { //airMode 4 is no air/pressure update
if (airMode != 4) { //airMode 4 is no air/pressure update
for (i=0; i<YRES/CELL; i++) //reduces pressure/velocity on the edges every frame
{
pv[i][0] = pv[i][0]*0.8f;
pv[i][1] = pv[i][1]*0.8f;
pv[i][2] = pv[i][2]*0.8f;
pv[i][XRES/CELL-2] = pv[i][XRES/CELL-2]*0.8f;
pv[i][XRES/CELL-1] = pv[i][XRES/CELL-1]*0.8f;
vx[i][0] = vx[i][1]*0.9f;
vx[i][1] = vx[i][2]*0.9f;
vx[i][XRES/CELL-2] = vx[i][XRES/CELL-3]*0.9f;
vx[i][XRES/CELL-1] = vx[i][XRES/CELL-2]*0.9f;
vy[i][0] = vy[i][1]*0.9f;
vy[i][1] = vy[i][2]*0.9f;
vy[i][XRES/CELL-2] = vy[i][XRES/CELL-3]*0.9f;
vy[i][XRES/CELL-1] = vy[i][XRES/CELL-2]*0.9f;
for (i=0; i<YRES/CELL; i++) //reduces pressure/velocity on the edges every frame
{
pv[i][0] = pv[i][0]*0.8f;
pv[i][1] = pv[i][1]*0.8f;
pv[i][2] = pv[i][2]*0.8f;
pv[i][XRES/CELL-2] = pv[i][XRES/CELL-2]*0.8f;
pv[i][XRES/CELL-1] = pv[i][XRES/CELL-1]*0.8f;
vx[i][0] = vx[i][1]*0.9f;
vx[i][1] = vx[i][2]*0.9f;
vx[i][XRES/CELL-2] = vx[i][XRES/CELL-3]*0.9f;
vx[i][XRES/CELL-1] = vx[i][XRES/CELL-2]*0.9f;
vy[i][0] = vy[i][1]*0.9f;
vy[i][1] = vy[i][2]*0.9f;
vy[i][XRES/CELL-2] = vy[i][XRES/CELL-3]*0.9f;
vy[i][XRES/CELL-1] = vy[i][XRES/CELL-2]*0.9f;
}
for (i=0; i<XRES/CELL; i++) //reduces pressure/velocity on the edges every frame
{
pv[0][i] = pv[0][i]*0.8f;
pv[1][i] = pv[1][i]*0.8f;
pv[2][i] = pv[2][i]*0.8f;
pv[YRES/CELL-2][i] = pv[YRES/CELL-2][i]*0.8f;
pv[YRES/CELL-1][i] = pv[YRES/CELL-1][i]*0.8f;
vx[0][i] = vx[1][i]*0.9f;
vx[1][i] = vx[2][i]*0.9f;
vx[YRES/CELL-2][i] = vx[YRES/CELL-3][i]*0.9f;
vx[YRES/CELL-1][i] = vx[YRES/CELL-2][i]*0.9f;
vy[0][i] = vy[1][i]*0.9f;
vy[1][i] = vy[2][i]*0.9f;
vy[YRES/CELL-2][i] = vy[YRES/CELL-3][i]*0.9f;
vy[YRES/CELL-1][i] = vy[YRES/CELL-2][i]*0.9f;
}
for (j=1; j<YRES/CELL; j++) //clear some velocities near walls
{
for (i=1; i<XRES/CELL; 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-1] = 0.0f;
vy[j][i] = 0.0f;
vy[j-1][i] = 0.0f;
}
}
}
for (y=1; y<YRES/CELL; y++) //pressure adjustments from velocity
for (x=1; x<XRES/CELL; x++)
{
dp = 0.0f;
dp += vx[y][x-1] - vx[y][x];
dp += vy[y-1][x] - vy[y][x];
pv[y][x] *= AIR_PLOSS;
pv[y][x] += dp*AIR_TSTEPP;
}
for (y=0; y<YRES/CELL-1; y++) //velocity adjustments from pressure
for (x=0; x<XRES/CELL-1; x++)
{
dx = dy = 0.0f;
dx += pv[y][x] - pv[y][x+1];
dy += pv[y][x] - pv[y+1][x];
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]) ||
(bmap[y][x+1]==WL_EWALL && !emap[y][x+1]))
vx[y][x] = 0;
if (bmap[y][x]==WL_WALL || bmap[y+1][x]==WL_WALL ||
bmap[y][x]==WL_WALLELEC || bmap[y+1][x]==WL_WALLELEC ||
(bmap[y][x]==WL_EWALL && !emap[y][x]) ||
(bmap[y+1][x]==WL_EWALL && !emap[y+1][x]))
vy[y][x] = 0;
}
for (y=0; y<YRES/CELL; y++) //update velocity and pressure
for (x=0; x<XRES/CELL; x++)
{
dx = 0.0f;
dy = 0.0f;
dp = 0.0f;
for (j=-1; j<2; j++)
for (i=-1; i<2; i++)
if (y+j>0 && y+j<YRES/CELL-1 &&
x+i>0 && x+i<XRES/CELL-1 &&
bmap[y+j][x+i]!=WL_WALL &&
bmap[y+j][x+i]!=WL_WALLELEC &&
(bmap[y+j][x+i]!=WL_EWALL || emap[y+j][x+i]))
{
f = kernel[i+1+(j+1)*3];
dx += vx[y+j][x+i]*f;
dy += vy[y+j][x+i]*f;
dp += pv[y+j][x+i]*f;
}
else
{
f = kernel[i+1+(j+1)*3];
dx += vx[y][x]*f;
dy += vy[y][x]*f;
dp += pv[y][x]*f;
}
tx = x - dx*0.7f;
ty = y - dy*0.7f;
i = (int)tx;
j = (int)ty;
tx -= i;
ty -= j;
if (i>=2 && i<XRES/CELL-3 &&
j>=2 && j<YRES/CELL-3)
{
dx *= 1.0f - AIR_VADV;
dy *= 1.0f - AIR_VADV;
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 += AIR_VADV*tx*(1.0f-ty)*vx[j][i+1];
dy += AIR_VADV*tx*(1.0f-ty)*vy[j][i+1];
dx += AIR_VADV*(1.0f-tx)*ty*vx[j+1][i];
dy += AIR_VADV*(1.0f-tx)*ty*vy[j+1][i];
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)
{
dx += fvx[y][x];
dy += fvy[y][x];
}
// pressure/velocity caps
if (dp > 256.0f) dp = 256.0f;
if (dp < -256.0f) dp = -256.0f;
if (dx > 256.0f) dx = 256.0f;
if (dx < -256.0f) dx = -256.0f;
if (dy > 256.0f) dy = 256.0f;
if (dy < -256.0f) dy = -256.0f;
switch (airMode)
{
default:
case 0: //Default
break;
case 1: //0 Pressure
dp = 0.0f;
break;
case 2: //0 Velocity
dx = 0.0f;
dy = 0.0f;
break;
case 3: //0 Air
dx = 0.0f;
dy = 0.0f;
dp = 0.0f;
break;
case 4: //No Update
break;
}
ovx[y][x] = dx;
ovy[y][x] = dy;
opv[y][x] = dp;
}
memcpy(vx, ovx, sizeof(vx));
memcpy(vy, ovy, sizeof(vy));
memcpy(pv, opv, sizeof(pv));
}
for (i=0; i<XRES/CELL; i++) //reduces pressure/velocity on the edges every frame
{
pv[0][i] = pv[0][i]*0.8f;
pv[1][i] = pv[1][i]*0.8f;
pv[2][i] = pv[2][i]*0.8f;
pv[YRES/CELL-2][i] = pv[YRES/CELL-2][i]*0.8f;
pv[YRES/CELL-1][i] = pv[YRES/CELL-1][i]*0.8f;
vx[0][i] = vx[1][i]*0.9f;
vx[1][i] = vx[2][i]*0.9f;
vx[YRES/CELL-2][i] = vx[YRES/CELL-3][i]*0.9f;
vx[YRES/CELL-1][i] = vx[YRES/CELL-2][i]*0.9f;
vy[0][i] = vy[1][i]*0.9f;
vy[1][i] = vy[2][i]*0.9f;
vy[YRES/CELL-2][i] = vy[YRES/CELL-3][i]*0.9f;
vy[YRES/CELL-1][i] = vy[YRES/CELL-2][i]*0.9f;
}
for (j=1; j<YRES/CELL; j++) //clear some velocities near walls
{
for (i=1; i<XRES/CELL; 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-1] = 0.0f;
vy[j][i] = 0.0f;
vy[j-1][i] = 0.0f;
}
}
}
for (y=1; y<YRES/CELL; y++) //pressure adjustments from velocity
for (x=1; x<XRES/CELL; x++)
{
dp = 0.0f;
dp += vx[y][x-1] - vx[y][x];
dp += vy[y-1][x] - vy[y][x];
pv[y][x] *= AIR_PLOSS;
pv[y][x] += dp*AIR_TSTEPP;
}
for (y=0; y<YRES/CELL-1; y++) //velocity adjustments from pressure
for (x=0; x<XRES/CELL-1; x++)
{
dx = dy = 0.0f;
dx += pv[y][x] - pv[y][x+1];
dy += pv[y][x] - pv[y+1][x];
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]) ||
(bmap[y][x+1]==WL_EWALL && !emap[y][x+1]))
vx[y][x] = 0;
if (bmap[y][x]==WL_WALL || bmap[y+1][x]==WL_WALL ||
bmap[y][x]==WL_WALLELEC || bmap[y+1][x]==WL_WALLELEC ||
(bmap[y][x]==WL_EWALL && !emap[y][x]) ||
(bmap[y+1][x]==WL_EWALL && !emap[y+1][x]))
vy[y][x] = 0;
}
for (y=0; y<YRES/CELL; y++) //update velocity and pressure
for (x=0; x<XRES/CELL; x++)
{
dx = 0.0f;
dy = 0.0f;
dp = 0.0f;
for (j=-1; j<2; j++)
for (i=-1; i<2; i++)
if (y+j>0 && y+j<YRES/CELL-1 &&
x+i>0 && x+i<XRES/CELL-1 &&
bmap[y+j][x+i]!=WL_WALL &&
bmap[y+j][x+i]!=WL_WALLELEC &&
(bmap[y+j][x+i]!=WL_EWALL || emap[y+j][x+i]))
{
f = kernel[i+1+(j+1)*3];
dx += vx[y+j][x+i]*f;
dy += vy[y+j][x+i]*f;
dp += pv[y+j][x+i]*f;
}
else
{
f = kernel[i+1+(j+1)*3];
dx += vx[y][x]*f;
dy += vy[y][x]*f;
dp += pv[y][x]*f;
}
tx = x - dx*0.7f;
ty = y - dy*0.7f;
i = (int)tx;
j = (int)ty;
tx -= i;
ty -= j;
if (i>=2 && i<XRES/CELL-3 &&
j>=2 && j<YRES/CELL-3)
{
dx *= 1.0f - AIR_VADV;
dy *= 1.0f - AIR_VADV;
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 += AIR_VADV*tx*(1.0f-ty)*vx[j][i+1];
dy += AIR_VADV*tx*(1.0f-ty)*vy[j][i+1];
dx += AIR_VADV*(1.0f-tx)*ty*vx[j+1][i];
dy += AIR_VADV*(1.0f-tx)*ty*vy[j+1][i];
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)
{
dx += fvx[y][x];
dy += fvy[y][x];
}
// pressure/velocity caps
if (dp > 256.0f) dp = 256.0f;
if (dp < -256.0f) dp = -256.0f;
if (dx > 256.0f) dx = 256.0f;
if (dx < -256.0f) dx = -256.0f;
if (dy > 256.0f) dy = 256.0f;
if (dy < -256.0f) dy = -256.0f;
switch (airMode)
{
default:
case 0: //Default
break;
case 1: //0 Pressure
dp = 0.0f;
break;
case 2: //0 Velocity
dx = 0.0f;
dy = 0.0f;
break;
case 3: //0 Air
dx = 0.0f;
dy = 0.0f;
dp = 0.0f;
break;
case 4: //No Update
break;
}
ovx[y][x] = dx;
ovy[y][x] = dy;
opv[y][x] = dp;
}
memcpy(vx, ovx, sizeof(vx));
memcpy(vy, ovy, sizeof(vy));
memcpy(pv, opv, sizeof(pv));
}
}

View File

@ -2,47 +2,47 @@
int update_O2(UPDATE_FUNC_ARGS)
{
int r,rx,ry;
for(rx=-2; rx<3; rx++)
for(ry=-2; ry<3; ry++)
int r,rx,ry;
for (rx=-2; rx<3; rx++)
for (ry=-2; ry<3; 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_FIRE)
{
parts[r>>8].life+=(rand()/(RAND_MAX/100))*2;
parts[r>>8].temp+=(rand()/(RAND_MAX/100));
parts[i].tmp++;
}
if ((r&0xFF)==PT_FIRE)
{
parts[r>>8].life+=(rand()/(RAND_MAX/100))*2;
parts[r>>8].temp+=(rand()/(RAND_MAX/100));
parts[i].tmp++;
}
}
}
if(pv[y/CELL][x/CELL] > 8.0f)
{
for(rx=-2; rx<3; rx++)
for(ry=-2; ry<3; 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_H2)
if(50<(rand()/(RAND_MAX/100))){
part_change_type(i,x,y,PT_WATR);
if (pv[y/CELL][x/CELL] > 8.0f)
{
for (rx=-2; rx<3; rx++)
for (ry=-2; ry<3; 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_H2)
if (50<(rand()/(RAND_MAX/100))) {
part_change_type(i,x,y,PT_WATR);
part_change_type(r>>8,x+rx,y+ry,PT_WATR);
}
}
}
}
}
if(parts[i].tmp>=50)
{
create_part(i,x,y,PT_FIRE);
parts[i].life+=(rand()/(RAND_MAX/100))+50;
parts[i].temp+=(rand()/(RAND_MAX/100));
}
return 0;
if (parts[i].tmp>=50)
{
create_part(i,x,y,PT_FIRE);
parts[i].life+=(rand()/(RAND_MAX/100))+50;
parts[i].temp+=(rand()/(RAND_MAX/100));
}
return 0;
}

View File

@ -44,7 +44,7 @@ int update_ARAY(UPDATE_FUNC_ARGS) {
}
else if ((r&0xFF)==PT_FILT) {//get color if passed through FILT
colored = parts[r>>8].ctype;
//this if prevents BRAY from stopping on certain materials
//this if prevents BRAY from stopping on certain materials
} else if ((r&0xFF)!=PT_INWR && (r&0xFF)!=PT_ARAY && (r&0xFF)!=PT_WIFI && !((r&0xFF)==PT_SWCH && parts[r>>8].life>=10)) {
if (nyy!=0 || nxx!=0) {
create_part(-1, x+nxi+nxx, y+nyi+nyy, PT_SPRK);
@ -59,7 +59,7 @@ int update_ARAY(UPDATE_FUNC_ARGS) {
if ((r&0xFF)==PT_BRAY) {
parts[r>>8].life = 1;
docontinue = 1;
//this if prevents red BRAY from stopping on certain materials
//this if prevents red BRAY from stopping on certain materials
} else if ((r&0xFF)==PT_INWR || (r&0xFF)==PT_ARAY || (r&0xFF)==PT_WIFI || (r&0xFF)==PT_FILT || ((r&0xFF)==PT_SWCH && parts[r>>8].life>=10)) {
docontinue = 1;
} else {

View File

@ -17,7 +17,7 @@ int update_GLOW(UPDATE_FUNC_ARGS) {
}
}
parts[i].ctype = pv[y/CELL][x/CELL]*16;
parts[i].tmp = abs((int)((vx[y/CELL][x/CELL]+vy[y/CELL][x/CELL])*16.0f)) + abs((int)((parts[i].vx+parts[i].vy)*64.0f));
//printf("%f %f\n", parts[i].vx, parts[i].vy);
if (parts[i].type==PT_NONE) {

View File

@ -2,20 +2,20 @@
int update_H2(UPDATE_FUNC_ARGS)
{
int r,rx,ry,rt;
for(rx=-2; rx<3; rx++)
for(ry=-2; ry<3; ry++)
int r,rx,ry,rt;
for (rx=-2; rx<3; rx++)
for (ry=-2; ry<3; ry++)
if (x+rx>=0 && y+ry>=0 && x+rx<XRES && y+ry<YRES && (rx || ry))
{
r = pmap[y+ry][x+rx];
rt = (r&0xFF);
rt = (r&0xFF);
if ((r>>8)>=NPART || !r)
continue;
if(pv[y/CELL][x/CELL] > 8.0f && rt == PT_DESL) // This will not work. DESL turns to fire above 5.0 pressure
{
part_change_type(r>>8,x+rx,y+ry,PT_WATR);
part_change_type(i,x,y,PT_OIL);
}
}
if (pv[y/CELL][x/CELL] > 8.0f && rt == PT_DESL) // This will not work. DESL turns to fire above 5.0 pressure
{
part_change_type(r>>8,x+rx,y+ry,PT_WATR);
part_change_type(i,x,y,PT_OIL);
}
}
return 0;
}

View File

@ -39,18 +39,18 @@ int update_PRTI(UPDATE_FUNC_ARGS) {
break;
}
}
if(fe){
if (fe) {
int orbd[4] = {0, 0, 0, 0}; //Orbital distances
int orbl[4] = {0, 0, 0, 0}; //Orbital locations
if(!parts[i].life) parts[i].life = rand();
if(!parts[i].ctype) parts[i].life = rand();
if (!parts[i].life) parts[i].life = rand();
if (!parts[i].ctype) parts[i].life = rand();
orbitalparts_get(parts[i].life, parts[i].ctype, orbd, orbl);
for(r = 0; r < 4; r++){
if(orbd[r]>1){
for (r = 0; r < 4; r++) {
if (orbd[r]>1) {
orbd[r] -= 12;
if(orbd[r]<1){
if (orbd[r]<1) {
orbd[r] = (rand()%128)+128;
orbl[r] = rand()%255;
} else {

View File

@ -62,16 +62,16 @@ int update_PRTO(UPDATE_FUNC_ARGS) {
}
}
}
if(fe){
if (fe) {
int orbd[4] = {0, 0, 0, 0}; //Orbital distances
int orbl[4] = {0, 0, 0, 0}; //Orbital locations
if(!parts[i].life) parts[i].life = rand();
if(!parts[i].ctype) parts[i].life = rand();
if (!parts[i].life) parts[i].life = rand();
if (!parts[i].ctype) parts[i].life = rand();
orbitalparts_get(parts[i].life, parts[i].ctype, orbd, orbl);
for(r = 0; r < 4; r++){
if(orbd[r]<254){
for (r = 0; r < 4; r++) {
if (orbd[r]<254) {
orbd[r] += 16;
if(orbd[r]>254){
if (orbd[r]>254) {
orbd[r] = 0;
orbl[r] = rand()%255;
}

View File

@ -3,7 +3,7 @@
int update_QRTZ(UPDATE_FUNC_ARGS) {
int r, tmp, trade, rx, ry, np, t;
t = parts[i].type;
if(t == PT_QRTZ)
if (t == PT_QRTZ)
{
parts[i].pavg[0] = parts[i].pavg[1];
parts[i].pavg[1] = pv[y/CELL][x/CELL];
@ -32,29 +32,29 @@ int update_QRTZ(UPDATE_FUNC_ARGS) {
{
rx = rand()%3-1;
ry = rand()%3-1;
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 && parts[i].ctype!=0)
{
r = pmap[y+ry][x+rx];
if ((r>>8)<NPART && !r && parts[i].ctype!=0)
np = create_part(-1,x+rx,y+ry,PT_QRTZ);
if (np>0)
{
np = create_part(-1,x+rx,y+ry,PT_QRTZ);
if (np>0)
parts[np].tmp = parts[i].tmp;
parts[i].ctype = 0;
if (5>rand()%10)
{
parts[np].tmp = parts[i].tmp;
parts[i].ctype = 0;
if(5>rand()%10)
{
parts[np].ctype=-1;//dead qrtz
}
else if(1>rand()%15)
{
parts[i].ctype=-1;
}
break;
parts[np].ctype=-1;//dead qrtz
}
else if (1>rand()%15)
{
parts[i].ctype=-1;
}
break;
}
}
}
}
}
for ( trade = 0; trade<9; trade ++)

View File

@ -22,26 +22,26 @@ int update_SING(UPDATE_FUNC_ARGS) {
if (y+CELL>0)
pv[y/CELL-1][x/CELL-1] += 0.1f*(singularity-pv[y/CELL-1][x/CELL-1]);
}
if(parts[i].life<1){
if (parts[i].life<1) {
//Pop!
for(rx=-2; rx<3; rx++){
for (rx=-2; rx<3; rx++) {
crx = (x/CELL)+rx;
for(ry=-2; ry<3; ry++){
for (ry=-2; ry<3; ry++) {
cry = (y/CELL)+ry;
if(cry > 0 && crx > 0 && crx < (XRES/CELL) && cry < (YRES/CELL)){
pv[cry][crx] += (float)parts[i].tmp;
if (cry > 0 && crx > 0 && crx < (XRES/CELL) && cry < (YRES/CELL)) {
pv[cry][crx] += (float)parts[i].tmp;
}
}
}
rad = (parts[i].tmp>255)?255:parts[i].tmp;
if(rad>=1){
if (rad>=1) {
rad = (int)(((float)rad)/8.0f);
}
if(rad>=1){
if (rad>=1) {
for (nxj=-(rad+1); nxj<=(rad+1); nxj++)
for (nxi=-(rad+1); nxi<=(rad+1); nxi++)
if ((pow(nxi,2))/(pow((rad+1),2))+(pow(nxj,2))/(pow((rad+1),2))<=1) {
if(rand()%2){
if (rand()%2) {
nb = create_part(-1, x+nxi, y+nxj, PT_PHOT);
} else {
nb = create_part(-1, x+nxi, y+nxj, PT_NEUT);

View File

@ -1632,7 +1632,7 @@ void draw_parts(pixel *vid)
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);
@ -1808,45 +1808,45 @@ void draw_parts(pixel *vid)
blendpixel(vid, nx, ny, cr, cg, cb, 255);
}
else if(t==PT_LOTE)//colors for life states
else if (t==PT_LOTE)//colors for life states
{
if(parts[i].tmp==2)
if (parts[i].tmp==2)
blendpixel(vid, nx, ny, 255, 128, 0, 255);
else if(parts[i].tmp==1)
else if (parts[i].tmp==1)
blendpixel(vid, nx, ny, 255, 255, 0, 255);
else
blendpixel(vid, nx, ny, 255, 0, 0, 255);
}
else if(t==PT_FRG2)//colors for life states
else if (t==PT_FRG2)//colors for life states
{
if(parts[i].tmp==2)
if (parts[i].tmp==2)
blendpixel(vid, nx, ny, 0, 100, 50, 255);
else
blendpixel(vid, nx, ny, 0, 255, 90, 255);
}
else if(t==PT_STAR)//colors for life states
else if (t==PT_STAR)//colors for life states
{
if(parts[i].tmp==4)
if (parts[i].tmp==4)
blendpixel(vid, nx, ny, 0, 0, 128, 255);
else if(parts[i].tmp==3)
else if (parts[i].tmp==3)
blendpixel(vid, nx, ny, 0, 0, 150, 255);
else if(parts[i].tmp==2)
else if (parts[i].tmp==2)
blendpixel(vid, nx, ny, 0, 0, 190, 255);
else if(parts[i].tmp==1)
else if (parts[i].tmp==1)
blendpixel(vid, nx, ny, 0, 0, 230, 255);
else
blendpixel(vid, nx, ny, 0, 0, 70, 255);
}
else if(t==PT_FROG)//colors for life states
else if (t==PT_FROG)//colors for life states
{
if(parts[i].tmp==2)
if (parts[i].tmp==2)
blendpixel(vid, nx, ny, 0, 100, 0, 255);
else
blendpixel(vid, nx, ny, 0, 255, 0, 255);
}
else if(t==PT_BRAN)//colors for life states
else if (t==PT_BRAN)//colors for life states
{
if(parts[i].tmp==1)
if (parts[i].tmp==1)
blendpixel(vid, nx, ny, 150, 150, 0, 255);
else
blendpixel(vid, nx, ny, 255, 255, 0, 255);
@ -1985,23 +1985,23 @@ void draw_parts(pixel *vid)
float drad = 0.0f;
float ddist = 0.0f;
orbitalparts_get(parts[i].life, parts[i].ctype, orbd, orbl);
for(r = 0; r < 4; r++){
for (r = 0; r < 4; r++) {
ddist = ((float)orbd[r])/16.0f;
drad = (M_PI * ((float)orbl[r]) / 180.0f)*1.41f;
nxo = ddist*cos(drad);
nyo = ddist*sin(drad);
if(ny+nyo>0 && ny+nyo<YRES && nx+nxo>0 && nx+nxo<XRES){
if (ny+nyo>0 && ny+nyo<YRES && nx+nxo>0 && nx+nxo<XRES) {
addpixel(vid, nx+nxo, ny+nyo, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors), 255-orbd[r]);
if(cmode == CM_FIRE && r == 1){
if (cmode == CM_FIRE && r == 1) {
fire_rv = fire_r[(ny+nyo)/CELL][(nx+nxo)/CELL];
fire_rv += 1;
if(fire_rv>255) fire_rv = 255;
if (fire_rv>255) 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
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))
{
@ -2024,23 +2024,23 @@ void draw_parts(pixel *vid)
float drad = 0.0f;
float ddist = 0.0f;
orbitalparts_get(parts[i].life, parts[i].ctype, orbd, orbl);
for(r = 0; r < 4; r++){
for (r = 0; r < 4; r++) {
ddist = ((float)orbd[r])/16.0f;
drad = (M_PI * ((float)orbl[r]) / 180.0f)*1.41f;
nxo = ddist*cos(drad);
nyo = ddist*sin(drad);
if(ny+nyo>0 && ny+nyo<YRES && nx+nxo>0 && nx+nxo<XRES){
if (ny+nyo>0 && ny+nyo<YRES && nx+nxo>0 && nx+nxo<XRES) {
addpixel(vid, nx+nxo, ny+nyo, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors), 255-orbd[r]);
if(cmode == CM_FIRE && r == 1){
if (cmode == CM_FIRE && r == 1) {
fire_bv = fire_b[(ny+nyo)/CELL][(nx+nxo)/CELL];
fire_bv += 1;
if(fire_bv>255) fire_bv = 255;
if (fire_bv>255) 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
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))
{
@ -2482,11 +2482,11 @@ void draw_parts(pixel *vid)
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)
{
@ -2711,7 +2711,7 @@ void draw_parts(pixel *vid)
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;
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);
@ -3039,7 +3039,7 @@ void draw_wavelengths(pixel *vid, int x, int y, int h, int wl)
int i,cr,cg,cb,j;
int tmp;
fillrect(vid,x-1,y-1,30+1,h+1,64,64,64,255); // coords -1 size +1 to work around bug in fillrect - TODO: fix fillrect
for (i=0;i<30;i++)
for (i=0; i<30; i++)
{
if ((wl>>i)&1)
{
@ -3059,7 +3059,7 @@ void draw_wavelengths(pixel *vid, int x, int y, int h, int wl)
cr *= tmp;
cg *= tmp;
cb *= tmp;
for (j=0;j<h;j++) blendpixel(vid,x+29-i,y+j,cr>255?255:cr,cg>255?255:cg,cb>255?255:cb,255);
for (j=0; j<h; j++) blendpixel(vid,x+29-i,y+j,cr>255?255:cr,cg>255?255:cg,cb>255?255:cb,255);
}
}
}
@ -3090,14 +3090,14 @@ void render_signs(pixel *vid_buf)
drawtext(vid_buf, x+3, y+3, buff, 255, 255, 255, 255);
}
if(sregexp(signs[i].text, "^{c:[0-9]*|.*}$")==0)
if (sregexp(signs[i].text, "^{c:[0-9]*|.*}$")==0)
{
int sldr, startm;
memset(buff, 0, sizeof(buff));
for(sldr=3; signs[i].text[sldr-1] != '|'; sldr++)
for (sldr=3; signs[i].text[sldr-1] != '|'; sldr++)
startm = sldr + 1;
sldr = startm;
while(signs[i].text[sldr] != '}')
while (signs[i].text[sldr] != '}')
{
buff[sldr - startm] = signs[i].text[sldr];
sldr++;
@ -3106,7 +3106,7 @@ void render_signs(pixel *vid_buf)
}
//Usual text
if(strcmp(signs[i].text, "{p}") && strcmp(signs[i].text, "{t}") && sregexp(signs[i].text, "^{c:[0-9]*|.*}$"))
if (strcmp(signs[i].text, "{p}") && strcmp(signs[i].text, "{t}") && sregexp(signs[i].text, "^{c:[0-9]*|.*}$"))
drawtext(vid_buf, x+3, y+3, signs[i].text, 255, 255, 255, 255);
x = signs[i].x;

View File

@ -709,7 +709,7 @@ void http_auth_headers(void *ctx, char *user, char *pass, char *session_id)
http_async_add_header(ctx, "X-Auth-Hash", tmp);
free(tmp);
}
if(session_id)
if (session_id)
{
http_async_add_header(ctx, "X-Auth-User-Id", user);
http_async_add_header(ctx, "X-Auth-Session-Key", session_id);
@ -1031,7 +1031,7 @@ retry:
http_async_add_header(ctx, "X-Auth-Hash", tmp);
free(tmp);
}
if(session_id)
if (session_id)
{
http_async_add_header(ctx, "X-Auth-User-Id", user);
http_async_add_header(ctx, "X-Auth-Session-Key", session_id);

View File

@ -89,16 +89,16 @@ void get_sign_pos(int i, int *x0, int *y0, int *w, int *h)
if (strcmp(signs[i].text, "{t}")==0)
*w = textwidth("Temp: 0000.00");
if(sregexp(signs[i].text, "^{c:[0-9]*|.*}$")==0)
if (sregexp(signs[i].text, "^{c:[0-9]*|.*}$")==0)
{
int sldr, startm;
char buff[256];
memset(buff, 0, sizeof(buff));
for(sldr=3; signs[i].text[sldr-1] != '|'; sldr++)
for (sldr=3; signs[i].text[sldr-1] != '|'; sldr++)
startm = sldr + 1;
sldr = startm;
while(signs[i].text[sldr] != '}')
while (signs[i].text[sldr] != '}')
{
buff[sldr - startm] = signs[i].text[sldr];
sldr++;
@ -462,7 +462,7 @@ void ui_checkbox_draw(pixel *vid_buf, ui_checkbox *ed)
void ui_checkbox_process(int mx, int my, int mb, int mbq, ui_checkbox *ed)
{
int w = 12;
if (mb && !mbq)
{
if (mx>=ed->x && mx<=ed->x+w && my>=ed->y && my<=ed->y+w)
@ -486,8 +486,8 @@ void ui_checkbox_process(int mx, int my, int mb, int mbq, ui_checkbox *ed)
void ui_copytext_draw(pixel *vid_buf, ui_copytext *ed)
{
int g = 180, i = 0;
if(!ed->state){
if(ed->hover){
if (!ed->state) {
if (ed->hover) {
i = 0;
} else {
i = 100;
@ -499,7 +499,7 @@ void ui_copytext_draw(pixel *vid_buf, ui_copytext *ed)
drawtext(vid_buf, (ed->x+(ed->width/2))-(textwidth("Copied!")/2), ed->y-12, "Copied!", 255, 255, 255, 255-i);
g = 190;
}
drawrect(vid_buf, ed->x, ed->y, ed->width, ed->height, g, 255, g, 255-i);
drawrect(vid_buf, ed->x+1, ed->y+1, ed->width-2, ed->height-2, g, 255, g, 100-i);
drawtext(vid_buf, ed->x+6, ed->y+5, ed->text, g, 255, g, 230-i);
@ -507,8 +507,8 @@ void ui_copytext_draw(pixel *vid_buf, ui_copytext *ed)
void ui_copytext_process(int mx, int my, int mb, int mbq, ui_copytext *ed)
{
if(my>=ed->y && my<=ed->y+ed->height && mx>=ed->x && mx<=ed->x+ed->width && !ed->state){
if(mb && !mbq){
if (my>=ed->y && my<=ed->y+ed->height && mx>=ed->x && mx<=ed->x+ed->width && !ed->state) {
if (mb && !mbq) {
clipboard_push_text(ed->text);
ed->state = 1;
}
@ -521,14 +521,14 @@ void ui_copytext_process(int mx, int my, int mb, int mbq, ui_copytext *ed)
void draw_svf_ui(pixel *vid_buf)// all the buttons at the bottom
{
int c;
//the open browser button
drawtext(vid_buf, 4, YRES+(MENUSIZE-14), "\x81", 255, 255, 255, 255);
drawtext(vid_buf, 4, YRES+(MENUSIZE-14), "\x81", 255, 255, 255, 255);
drawrect(vid_buf, 1, YRES+(MENUSIZE-16), 16, 14, 255, 255, 255, 255);
// the reload button
c = svf_open ? 255 : 128;
drawtext(vid_buf, 23, YRES+(MENUSIZE-14), "\x91", c, c, c, 255);
drawtext(vid_buf, 23, YRES+(MENUSIZE-14), "\x91", c, c, c, 255);
drawrect(vid_buf, 19, YRES+(MENUSIZE-16), 16, 14, c, c, c, 255);
// the save sim button
@ -790,12 +790,12 @@ void copytext_ui(pixel *vid_buf, char *top, char *txt, char *copytxt)
int buttonwidth = 0;
int buttonheight = 0;
ui_copytext ed;
buttonwidth = textwidth(copytxt)+12;
buttonheight = 10+8;
buttony = y0+50;
buttonx = x0+(xsize/2)-(buttonwidth/2);
ed.x = buttonx;
ed.y = buttony;
ed.width = buttonwidth;
@ -803,43 +803,43 @@ void copytext_ui(pixel *vid_buf, char *top, char *txt, char *copytxt)
ed.hover = 0;
ed.state = 0;
strcpy(ed.text, copytxt);
while (!sdl_poll())
{
b = SDL_GetMouseState(&mx, &my);
if (!b)
break;
}
while (!sdl_poll())
{
bq = b;
b = SDL_GetMouseState(&mx, &my);
mx /= sdl_scale;
my /= sdl_scale;
clearrect(vid_buf, x0-2, y0-2, xsize+4, ysize+4);
drawrect(vid_buf, x0, y0, xsize, ysize, 192, 192, 192, 255);
drawtext(vid_buf, x0+8, y0+8, top, 160, 160, 255, 255);
drawtext(vid_buf, x0+8, y0+26, txt, 255, 255, 255, 255);
ui_copytext_draw(vid_buf, &ed);
ui_copytext_process(mx, my, b, bq, &ed);
drawtext(vid_buf, x0+5, y0+ysize-11, "OK", 255, 255, 255, 255);
drawrect(vid_buf, x0, y0+ysize-16, xsize, 16, 192, 192, 192, 255);
sdl_blit(0, 0, (XRES+BARSIZE), YRES+MENUSIZE, vid_buf, (XRES+BARSIZE));
if (b && !bq && mx>=x0 && mx<x0+xsize && my>=y0+ysize-16 && my<=y0+ysize)
break;
if (sdl_key==SDLK_RETURN)
break;
if (sdl_key==SDLK_ESCAPE)
break;
}
while (!sdl_poll())
{
b = SDL_GetMouseState(&mx, &my);
@ -1382,7 +1382,7 @@ int save_name_ui(pixel *vid_buf)
ed2.cursor = strlen(svf_description);
ed2.multiline = 1;
strcpy(ed2.str, svf_description);
ctb.x = 0;
ctb.y = YRES+MENUSIZE-20;
ctb.width = textwidth(svf_id)+12;
@ -1390,7 +1390,7 @@ int save_name_ui(pixel *vid_buf)
ctb.hover = 0;
ctb.state = 0;
strcpy(ctb.text, svf_id);
cb.x = x0+10;
cb.y = y0+53+YRES/4;
@ -1399,7 +1399,7 @@ int save_name_ui(pixel *vid_buf)
fillrect(vid_buf, -1, -1, XRES+BARSIZE, YRES+MENUSIZE, 0, 0, 0, 192);
memcpy(old_vid, vid_buf, ((XRES+BARSIZE)*(YRES+MENUSIZE))*PIXELSIZE);
while (!sdl_poll())
{
bq = b;
@ -1428,7 +1428,7 @@ int save_name_ui(pixel *vid_buf)
drawrect(vid_buf, x0, y0+74+YRES/4, 192, 16, 192, 192, 192, 255);
draw_line(vid_buf, x0+192, y0, x0+192, y0+90+YRES/4, 150, 150, 150, XRES+BARSIZE);
if (svf_id[0])
{
//Save ID text and copybox
@ -1436,13 +1436,13 @@ int save_name_ui(pixel *vid_buf)
idtxtwidth += ctb.width;
ctb.x = textwidth("Current save ID: ")+(XRES+BARSIZE-idtxtwidth)/2;
drawtext(vid_buf, (XRES+BARSIZE-idtxtwidth)/2, YRES+MENUSIZE-15, "Current save ID: ", 255, 255, 255, 255);
ui_copytext_draw(vid_buf, &ctb);
ui_copytext_process(mx, my, b, bq, &ctb);
}
sdl_blit(0, 0, (XRES+BARSIZE), YRES+MENUSIZE, vid_buf, (XRES+BARSIZE));
memcpy(vid_buf, old_vid, ((XRES+BARSIZE)*(YRES+MENUSIZE))*PIXELSIZE);
ui_edit_process(mx, my, b, &ed);
@ -1823,7 +1823,7 @@ void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int b, int bq, int mx,
}
else //all other menus
{
if (fwidth > XRES-BARSIZE){ //fancy scrolling
if (fwidth > XRES-BARSIZE) { //fancy scrolling
float overflow = fwidth-(XRES-BARSIZE), location = ((float)XRES-BARSIZE)/((float)(mx-(XRES-BARSIZE)));
xoff = (int)(overflow / location);
}
@ -2930,7 +2930,7 @@ int open_ui(pixel *vid_buf, char *save_id, char *save_date)
ed.multiline = 1;
ed.cursor = 0;
strcpy(ed.str, "");
ctb.x = 100;
ctb.y = YRES+MENUSIZE-20;
ctb.width = textwidth(save_id)+12;
@ -3114,12 +3114,12 @@ int open_ui(pixel *vid_buf, char *save_id, char *save_date)
drawrect(vid_buf, XRES+BARSIZE-100, YRES+MENUSIZE-68, 50, 18, 255, 255, 255, 255);
drawtext(vid_buf, XRES+BARSIZE-90, YRES+MENUSIZE-63, "Submit", 255, 255, 255, 255);
}
//Save ID text and copybox
cix = textwidth("Save ID: ");
cix += ctb.width;
ctb.x = textwidth("Save ID: ")+(XRES+BARSIZE-cix)/2;
//ctb.x =
//ctb.x =
drawtext(vid_buf, (XRES+BARSIZE-cix)/2, YRES+MENUSIZE-15, "Save ID: ", 255, 255, 255, 255);
ui_copytext_draw(vid_buf, &ctb);
ui_copytext_process(mx, my, b, bq, &ctb);
@ -4054,16 +4054,16 @@ char *console_ui(pixel *vid_buf,char error[255],char console_more) {
memcpy(old_buf,vid_buf,(XRES+BARSIZE)*YRES*PIXELSIZE);
fillrect(old_buf, -1, -1, XRES, 220, 0, 0, 0, 190);
currentcommand2 = malloc(sizeof(command_history));
memset(currentcommand2, 0, sizeof(command_history));
currentcommand2->prev_command = last_command2;
currentcommand2->command = mystrdup(error);
last_command2 = currentcommand2;
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);//enable keyrepeat for console (is disabled on console close later)
cc = 0;
while(cc < 80){
while (cc < 80) {
fillrect(old_buf, -1, -1+cc, XRES+BARSIZE, 2, 0, 0, 0, 160-(cc*2));
cc++;
}
@ -4077,30 +4077,30 @@ char *console_ui(pixel *vid_buf,char error[255],char console_more) {
memcpy(vid_buf,old_buf,(XRES+BARSIZE)*YRES*PIXELSIZE);
draw_line(vid_buf, 0, 219, XRES+BARSIZE-1, 219, 228, 228, 228, XRES+BARSIZE);
#ifdef PYCONSOLE
if(pygood)
i=255;
else
i=0;
if(pyready)
drawtext(vid_buf, 15, 15, "Welcome to The Powder Toy console v.3 (by cracker64, python by Doxin)", 255, i, i, 255);
else
drawtext(vid_buf, 15, 15, "Welcome to The Powder Toy console v.3 (by cracker64, python disabled)", 255, i, i, 255);
if (pygood)
i=255;
else
i=0;
if (pyready)
drawtext(vid_buf, 15, 15, "Welcome to The Powder Toy console v.3 (by cracker64, python by Doxin)", 255, i, i, 255);
else
drawtext(vid_buf, 15, 15, "Welcome to The Powder Toy console v.3 (by cracker64, python disabled)", 255, i, i, 255);
#else
drawtext(vid_buf, 15, 15, "Welcome to The Powder Toy console v.3 (by cracker64, python disabled)", 255, 255, 255, 255);
#endif
cc = 0;
currentcommand = last_command;
while(cc < 10)
while (cc < 10)
{
if(currentcommand==NULL)
if (currentcommand==NULL)
break;
drawtext(vid_buf, 15, 175-(cc*12), currentcommand->command, 255, 255, 255, 255);
if(currentcommand->prev_command!=NULL)
if (currentcommand->prev_command!=NULL)
{
if(cc<9) {
if (cc<9) {
currentcommand = currentcommand->prev_command;
} else if(currentcommand->prev_command!=NULL) {
} else if (currentcommand->prev_command!=NULL) {
free(currentcommand->prev_command);
currentcommand->prev_command = NULL;
}
@ -4113,16 +4113,16 @@ char *console_ui(pixel *vid_buf,char error[255],char console_more) {
}
cc = 0;
currentcommand2 = last_command2;
while(cc < 10)
while (cc < 10)
{
if(currentcommand2==NULL)
if (currentcommand2==NULL)
break;
drawtext(vid_buf, 215, 175-(cc*12), currentcommand2->command, 255, 225, 225, 255);
if(currentcommand2->prev_command!=NULL)
if (currentcommand2->prev_command!=NULL)
{
if(cc<9) {
if (cc<9) {
currentcommand2 = currentcommand2->prev_command;
} else if(currentcommand2->prev_command!=NULL) {
} else if (currentcommand2->prev_command!=NULL) {
free(currentcommand2->prev_command);
currentcommand2->prev_command = NULL;
}
@ -4135,12 +4135,12 @@ char *console_ui(pixel *vid_buf,char error[255],char console_more) {
}
//if(error && ed.str[0]=='\0')
//drawtext(vid_buf, 20, 207, error, 255, 127, 127, 200);
if(console_more==0)
drawtext(vid_buf, 5, 207, ">", 255, 255, 255, 240);
else
drawtext(vid_buf, 5, 207, "...", 255, 255, 255, 240);
//drawtext(vid_buf, 20, 207, error, 255, 127, 127, 200);
if (console_more==0)
drawtext(vid_buf, 5, 207, ">", 255, 255, 255, 240);
else
drawtext(vid_buf, 5, 207, "...", 255, 255, 255, 240);
ui_edit_draw(vid_buf, &ed);
ui_edit_process(mx, my, b, &ed);
sdl_blit(0, 0, (XRES+BARSIZE), YRES+MENUSIZE, vid_buf, (XRES+BARSIZE));
@ -4162,22 +4162,22 @@ char *console_ui(pixel *vid_buf,char error[255],char console_more) {
SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL);
return NULL;
}
if(sdl_key==SDLK_UP || sdl_key==SDLK_DOWN)
if (sdl_key==SDLK_UP || sdl_key==SDLK_DOWN)
{
ci += sdl_key==SDLK_UP?1:-1;
if(ci<-1)
if (ci<-1)
ci = -1;
if(ci==-1)
if (ci==-1)
{
strcpy(ed.str, "");
ed.cursor = strlen(ed.str);
}
else
{
if(last_command!=NULL) {
if (last_command!=NULL) {
currentcommand = last_command;
for (cc = 0; cc<ci; cc++) {
if(currentcommand->prev_command==NULL)
if (currentcommand->prev_command==NULL)
ci = cc;
else
currentcommand = currentcommand->prev_command;

3036
src/main.c

File diff suppressed because it is too large Load Diff

View File

@ -128,7 +128,7 @@ int sregexp(const char *str, char *pattern)
{
int result;
regex_t patternc;
if(regcomp(&patternc, pattern, 0)!=0)
if (regcomp(&patternc, pattern, 0)!=0)
return 1;
result = regexec(&patternc, str, 0, NULL, 0);
regfree(&patternc);
@ -164,7 +164,7 @@ void load_presets(void)
remove("powder.def");
return;
}
if(sig[3]==0x66){
if (sig[3]==0x66) {
if (load_string(f, svf_user, 63))
goto fail;
if (load_string(f, svf_pass, 63))
@ -378,32 +378,32 @@ vector2d v2d_new(float x, float y)
void clipboard_push_text(char * text)
{
#ifdef MACOSX
PasteboardRef newclipboard;
if(PasteboardCreate(kPasteboardClipboard, &newclipboard)!=noErr) return;
if(PasteboardClear(newclipboard)!=noErr) return;
PasteboardRef newclipboard;
if (PasteboardCreate(kPasteboardClipboard, &newclipboard)!=noErr) return;
if (PasteboardClear(newclipboard)!=noErr) return;
PasteboardSynchronize(newclipboard);
CFDataRef data = CFDataCreate(kCFAllocatorDefault, text, strlen(text));
PasteboardPutItemFlavor(newclipboard, (PasteboardItemID)1, CFSTR("com.apple.traditional-mac-plain-text"), data, 0);
PasteboardPutItemFlavor(newclipboard, (PasteboardItemID)1, CFSTR("com.apple.traditional-mac-plain-text"), data, 0);
#elif defined WIN32
if(OpenClipboard(NULL))
if (OpenClipboard(NULL))
{
HGLOBAL cbuffer;
char * glbuffer;
EmptyClipboard();
cbuffer = GlobalAlloc(GMEM_DDESHARE, strlen(text)+1);
glbuffer = (char*)GlobalLock(cbuffer);
strcpy(glbuffer, text);
GlobalUnlock(cbuffer);
SetClipboardData(CF_TEXT, cbuffer);
CloseClipboard();
}
#else
#else
printf("Not implemented: put text on clipboard \"%s\"\n", text);
#endif
}
@ -429,55 +429,55 @@ int register_extension()
opencommand = malloc(strlen(currentfilename)+13);
sprintf(iconname, "%s,-102", currentfilename);
sprintf(opencommand, "\"%s\" open:\"%%1\"", currentfilename);
//Create extension entry
rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\.cps", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL);
if(rresult != ERROR_SUCCESS){
if (rresult != ERROR_SUCCESS) {
return 0;
}
rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)"PowderToySave", strlen("PowderToySave")+1);
if(rresult != ERROR_SUCCESS){
if (rresult != ERROR_SUCCESS) {
RegCloseKey(newkey);
return 0;
}
RegCloseKey(newkey);
//Create program entry
rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\PowderToySave", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL);
if(rresult != ERROR_SUCCESS){
if (rresult != ERROR_SUCCESS) {
return 0;
}
rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)"Powder Toy Save", strlen("Powder Toy Save")+1);
if(rresult != ERROR_SUCCESS){
if (rresult != ERROR_SUCCESS) {
RegCloseKey(newkey);
return 0;
}
RegCloseKey(newkey);
//Set DefaultIcon
rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\PowderToySave\\DefaultIcon", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL);
if(rresult != ERROR_SUCCESS){
if (rresult != ERROR_SUCCESS) {
return 0;
}
rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)iconname, strlen(iconname)+1);
if(rresult != ERROR_SUCCESS){
if (rresult != ERROR_SUCCESS) {
RegCloseKey(newkey);
return 0;
}
RegCloseKey(newkey);
//Set Launch command
rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\PowderToySave\\shell\\open\\command", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL);
if(rresult != ERROR_SUCCESS){
if (rresult != ERROR_SUCCESS) {
return 0;
}
rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)opencommand, strlen(opencommand)+1);
if(rresult != ERROR_SUCCESS){
if (rresult != ERROR_SUCCESS) {
RegCloseKey(newkey);
return 0;
}
RegCloseKey(newkey);
return 1;
#elif defined LIN32
return 0;

View File

@ -13,7 +13,7 @@ particle *parts;
particle *cb_parts;
int gravityMode = 0; // starts enabled in "vertical" mode...
int airMode = 0;
int airMode = 0;
unsigned char bmap[YRES/CELL][XRES/CELL];
@ -79,7 +79,7 @@ int eval_move(int pt, int nx, int ny, unsigned *rr)
if ((r&0xFF)==PT_VOID || (r&0xFF)==PT_BHOL)
return 1;
if(pt==PT_SPRK)//spark shouldn't move
if (pt==PT_SPRK)//spark shouldn't move
return 0;
if (pt==PT_PHOT&&(
@ -200,7 +200,7 @@ int try_move(int i, int x, int y, int nx, int ny)
}
return 1;
}
//else e=1 , we are trying to swap the particles, return 0 no swap/move, 1 is still overlap/move, because the swap takes place later
//else e=1 , we are trying to swap the particles, return 0 no swap/move, 1 is still overlap/move, because the swap takes place later
if ((r&0xFF)==PT_VOID) //this is where void eats particles
{
@ -702,8 +702,8 @@ inline int create_part(int p, int x, int y, int t)//the function for creating a
}
if (ptypes[t].properties&PROP_LIFE) {
int r;
for(r = 0; r<NGOL; r++)
if(t==goltype[r])
for (r = 0; r<NGOL; r++)
if (t==goltype[r])
parts[i].tmp = grule[r+1][9] - 1;
}
if (t==PT_DEUT)
@ -1313,7 +1313,7 @@ void update_particles_i(pixel *vid, int start, int inc)
for ( golnum=1; golnum<=NGOL; golnum++)
if (parts[r>>8].type==goltype[golnum-1])
{
if(parts[r>>8].tmp == grule[golnum][9]-1) {
if (parts[r>>8].tmp == grule[golnum][9]-1) {
gol[nx][ny] = golnum;
for ( nnx=-1; nnx<2; nnx++)
for ( nny=-1; nny<2; nny++)//it will count itself as its own neighbor, which is needed, but will have 1 extra for delete check
@ -1327,7 +1327,7 @@ void update_particles_i(pixel *vid, int start, int inc)
}
} else {
parts[r>>8].tmp --;
if(parts[r>>8].tmp<=0)
if (parts[r>>8].tmp<=0)
parts[r>>8].type = PT_NONE;//using kill_part makes it not work
}
}
@ -1337,25 +1337,25 @@ void update_particles_i(pixel *vid, int start, int inc)
{
r = pmap[ny][nx];
neighbors = gol2[nx][ny][0];
if(neighbors==0 || !(ptypes[r&0xFF].properties&PROP_LIFE || !(r&0xFF)) || (r>>8)>=NPART)
if (neighbors==0 || !(ptypes[r&0xFF].properties&PROP_LIFE || !(r&0xFF)) || (r>>8)>=NPART)
continue;
for ( golnum = 1; golnum<=NGOL; golnum++)
{
goldelete = neighbors;
if (gol[nx][ny]==0&&grule[golnum][goldelete]>=2&&gol2[nx][ny][golnum]>=(goldelete%2)+goldelete/2)
{
goldelete = neighbors;
if (gol[nx][ny]==0&&grule[golnum][goldelete]>=2&&gol2[nx][ny][golnum]>=(goldelete%2)+goldelete/2)
{
if (create_part(-1,nx,ny,goltype[golnum-1]))
createdsomething = 1;
}
else if (gol[nx][ny]==golnum&&(grule[golnum][goldelete-1]==0||grule[golnum][goldelete-1]==2))//subtract 1 because it counted itself
{
if(parts[r>>8].tmp==grule[golnum][9]-1)
parts[r>>8].tmp --;
}
if (r && parts[r>>8].tmp<=0)
parts[r>>8].type = PT_NONE;//using kill_part makes it not work
if (create_part(-1,nx,ny,goltype[golnum-1]))
createdsomething = 1;
}
for( z = 0;z<=NGOL;z++)
else if (gol[nx][ny]==golnum&&(grule[golnum][goldelete-1]==0||grule[golnum][goldelete-1]==2))//subtract 1 because it counted itself
{
if (parts[r>>8].tmp==grule[golnum][9]-1)
parts[r>>8].tmp --;
}
if (r && parts[r>>8].tmp<=0)
parts[r>>8].type = PT_NONE;//using kill_part makes it not work
}
for ( z = 0; z<=NGOL; z++)
gol2[nx][ny][z] = 0;//this improves performance A LOT compared to the memset, i was getting ~23 more fps with this.
}
if (createdsomething)
@ -1450,18 +1450,18 @@ void update_particles_i(pixel *vid, int start, int inc)
//Gravity mode by Moach
switch (gravityMode)
{
default:
case 0:
pGravX = 0.0f;
pGravY = ptypes[t].gravity;
break;
case 1:
pGravX = pGravY = 0.0f;
break;
case 2:
pGravD = 0.01f - hypotf((x - XCNTR), (y - YCNTR));
pGravX = ptypes[t].gravity * ((float)(x - XCNTR) / pGravD);
pGravY = ptypes[t].gravity * ((float)(y - YCNTR) / pGravD);
default:
case 0:
pGravX = 0.0f;
pGravY = ptypes[t].gravity;
break;
case 1:
pGravX = pGravY = 0.0f;
break;
case 2:
pGravD = 0.01f - hypotf((x - XCNTR), (y - YCNTR));
pGravX = ptypes[t].gravity * ((float)(x - XCNTR) / pGravD);
pGravY = ptypes[t].gravity * ((float)(y - YCNTR) / pGravD);
}
//velocity updates for the particle
parts[i].vx *= ptypes[t].loss;
@ -2704,9 +2704,9 @@ int flood_parts(int x, int y, int c, int cm, int bm)
// fill span
for (x=x1; x<=x2; x++)
{
if(cm==PT_INST&&co==PT_SPRK)
if (cm==PT_INST&&co==PT_SPRK)
{
if(create_part(-1,x, y, co)==-1)
if (create_part(-1,x, y, co)==-1)
return 0;
}
else if (!create_parts(x, y, 0, 0, co))
@ -2864,7 +2864,7 @@ int create_parts(int x, int y, int rx, int ry, int c)
for (i=-rx; i<=rx; i++)
if ((CURRENT_BRUSH==CIRCLE_BRUSH && (pow(i,2))/(pow(rx,2))+(pow(j,2))/(pow(ry,2))<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx))
{
if( x+i<0 || y+j<0 || x+i>=XRES || y+j>=YRES)
if ( x+i<0 || y+j<0 || x+i>=XRES || y+j>=YRES)
continue;
if (!REPLACE_MODE)
create_part(-2, x+i, y+j, c);
@ -2910,7 +2910,7 @@ int create_parts(int x, int y, int rx, int ry, int c)
for (i=-rx; i<=rx; i++)
if ((CURRENT_BRUSH==CIRCLE_BRUSH && (pow(i,2))/(pow(rx,2))+(pow(j,2))/(pow(ry,2))<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=ry*rx))
{
if( x+i<0 || y+j<0 || x+i>=XRES || y+j>=YRES)
if ( x+i<0 || y+j<0 || x+i>=XRES || y+j>=YRES)
continue;
if ((pmap[y+j][x+i]&0xFF)!=SLALT&&SLALT!=0)
continue;
@ -3026,7 +3026,7 @@ void *transform_save(void *odata, int *size, matrix2d transform, vector2d transl
cornerso[1] = v2d_new(w-1,0);
cornerso[2] = v2d_new(0,h-1);
cornerso[3] = v2d_new(w-1,h-1);
for (i=0;i<4;i++)
for (i=0; i<4; i++)
{
tmp = m2d_multiply_v2d(transform,cornerso[i]);
if (i==0) ctl = cbr = tmp; // top left, bottom right corner
@ -3073,8 +3073,8 @@ void *transform_save(void *odata, int *size, matrix2d transform, vector2d transl
partst[i].x = nx;
partst[i].y = ny;
}
for (y=0;y<YRES/CELL;y++)
for (x=0;x<XRES/CELL;x++)
for (y=0; y<YRES/CELL; y++)
for (x=0; x<XRES/CELL; x++)
{
pos = v2d_new(x*CELL+CELL*0.4f, y*CELL+CELL*0.4f);
pos = v2d_add(m2d_multiply_v2d(transform,pos),translate);
@ -3107,7 +3107,7 @@ inline void orbitalparts_get(int block1, int block2, int resblock1[], int resblo
resblock1[1] = (block1&0x0000FF00)>>8;
resblock1[2] = (block1&0x00FF0000)>>16;
resblock1[3] = (block1&0xFF000000)>>24;
resblock2[0] = (block2&0x000000FF);
resblock2[1] = (block2&0x0000FF00)>>8;
resblock2[2] = (block2&0x00FF0000)>>16;
@ -3122,17 +3122,17 @@ inline void orbitalparts_set(int *block1, int *block2, int resblock1[], int resb
{
int block1tmp = 0;
int block2tmp = 0;
block1tmp = (resblock1[0]&0xFF);
block1tmp |= (resblock1[1]&0xFF)<<8;
block1tmp |= (resblock1[2]&0xFF)<<16;
block1tmp |= (resblock1[3]&0xFF)<<24;
block2tmp = (resblock2[0]&0xFF);
block2tmp |= (resblock2[1]&0xFF)<<8;
block2tmp |= (resblock2[2]&0xFF)<<16;
block2tmp |= (resblock2[3]&0xFF)<<24;
*block1 = block1tmp;
*block2 = block2tmp;
}