More fixes.

This commit is contained in:
cracker64 2013-02-27 17:20:05 -05:00
parent 3d2e594150
commit 08d1a68ce0
14 changed files with 190 additions and 231 deletions

View File

@ -59,7 +59,7 @@ int Element_BCLN::update(UPDATE_FUNC_ARGS)
} }
if (parts[i].ctype<=0 || parts[i].ctype>=PT_NUM || !sim->elements[parts[i].ctype].Enabled || (parts[i].ctype==PT_LIFE && (parts[i].tmp<0 || parts[i].tmp>=NGOLALT))) if (parts[i].ctype<=0 || parts[i].ctype>=PT_NUM || !sim->elements[parts[i].ctype].Enabled || (parts[i].ctype==PT_LIFE && (parts[i].tmp<0 || parts[i].tmp>=NGOLALT)))
{ {
int r, rx, ry; int r, rx, ry, rt;
for (rx=-1; rx<2; rx++) for (rx=-1; rx<2; rx++)
for (ry=-1; ry<2; ry++) for (ry=-1; ry<2; ry++)
if (x+rx>=0 && y+ry>=0 && x+rx<XRES && y+ry<YRES) if (x+rx>=0 && y+ry>=0 && x+rx<XRES && y+ry<YRES)
@ -69,13 +69,14 @@ int Element_BCLN::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if ((r&0xFF)!=PT_CLNE && (r&0xFF)!=PT_PCLN && rt = r&0xFF;
(r&0xFF)!=PT_BCLN && (r&0xFF)!=PT_STKM && if (rt!=PT_CLNE && rt!=PT_PCLN &&
(r&0xFF)!=PT_PBCN && (r&0xFF)!=PT_STKM2 && rt!=PT_BCLN && rt!=PT_STKM &&
(r&0xFF)<PT_NUM) rt!=PT_PBCN && rt!=PT_STKM2 &&
rt<PT_NUM)
{ {
parts[i].ctype = r&0xFF; parts[i].ctype = rt;
if ((r&0xFF)==PT_LIFE || (r&0xFF)==PT_LAVA) if (rt==PT_LIFE || rt==PT_LAVA)
parts[i].tmp = parts[r>>8].ctype; parts[i].tmp = parts[r>>8].ctype;
} }
} }

View File

@ -51,7 +51,7 @@ int Element_CLNE::update(UPDATE_FUNC_ARGS)
{ {
if (parts[i].ctype<=0 || parts[i].ctype>=PT_NUM || !sim->elements[parts[i].ctype].Enabled || (parts[i].ctype==PT_LIFE && (parts[i].tmp<0 || parts[i].tmp>=NGOLALT))) if (parts[i].ctype<=0 || parts[i].ctype>=PT_NUM || !sim->elements[parts[i].ctype].Enabled || (parts[i].ctype==PT_LIFE && (parts[i].tmp<0 || parts[i].tmp>=NGOLALT)))
{ {
int r, rx, ry; int r, rx, ry, rt;
for (rx=-1; rx<2; rx++) for (rx=-1; rx<2; rx++)
for (ry=-1; ry<2; ry++) for (ry=-1; ry<2; ry++)
if (x+rx>=0 && y+ry>=0 && x+rx<XRES && y+ry<YRES) if (x+rx>=0 && y+ry>=0 && x+rx<XRES && y+ry<YRES)
@ -61,13 +61,14 @@ int Element_CLNE::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if ((r&0xFF)!=PT_CLNE && (r&0xFF)!=PT_PCLN && rt = r&0xFF;
(r&0xFF)!=PT_BCLN && (r&0xFF)!=PT_STKM && if (rt!=PT_CLNE && rt!=PT_PCLN &&
(r&0xFF)!=PT_PBCN && (r&0xFF)!=PT_STKM2 && rt!=PT_BCLN && rt!=PT_STKM &&
(r&0xFF)<PT_NUM) rt!=PT_PBCN && rt!=PT_STKM2 &&
rt<PT_NUM)
{ {
parts[i].ctype = r&0xFF; parts[i].ctype = rt;
if ((r&0xFF)==PT_LIFE || (r&0xFF)==PT_LAVA) if (rt==PT_LIFE || rt==PT_LAVA)
parts[i].tmp = parts[r>>8].ctype; parts[i].tmp = parts[r>>8].ctype;
} }
} }

View File

@ -66,7 +66,7 @@ int Element_DEUT::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r || (parts[i].life >=maxlife)) if (!r || (parts[i].life >=maxlife))
continue; continue;
if ((r&0xFF)==PT_DEUT&&33>=rand()/(RAND_MAX/100)+1) if ((r&0xFF)==PT_DEUT&& !(rand()%3))
{ {
if ((parts[i].life + parts[r>>8].life + 1) <= maxlife) if ((parts[i].life + parts[r>>8].life + 1) <= maxlife)
{ {

View File

@ -50,9 +50,12 @@ Element_GPMP::Element_GPMP()
int Element_GPMP::update(UPDATE_FUNC_ARGS) int Element_GPMP::update(UPDATE_FUNC_ARGS)
{ {
int r, rx, ry; int r, rx, ry;
if (parts[i].life!=10 && parts[i].life>0) if (parts[i].life!=10)
{
if (parts[i].life>0)
parts[i].life--; parts[i].life--;
else if (parts[i].life==10) }
else
{ {
if (parts[i].temp>=256.0+273.15) if (parts[i].temp>=256.0+273.15)
parts[i].temp=256.0+273.15; parts[i].temp=256.0+273.15;

View File

@ -50,9 +50,12 @@ Element_HSWC::Element_HSWC()
int Element_HSWC::update(UPDATE_FUNC_ARGS) int Element_HSWC::update(UPDATE_FUNC_ARGS)
{ {
int r, rx, ry; int r, rx, ry;
if (parts[i].life!=10 && parts[i].life>0) if (parts[i].life!=10)
{
if (parts[i].life>0)
parts[i].life--; parts[i].life--;
else if (parts[i].life==10) }
else
{ {
for (rx=-2; rx<3; rx++) for (rx=-2; rx<3; rx++)
for (ry=-2; ry<3; ry++) for (ry=-2; ry<3; ry++)

View File

@ -101,20 +101,17 @@ int Element_LIGH::update(UPDATE_FUNC_ARGS)
} }
if (rt!=PT_LIGH && rt!=PT_TESC) if (rt!=PT_LIGH && rt!=PT_TESC)
{ {
if (rt!=PT_CLNE&&rt!=PT_THDR&&rt!=PT_DMND&&rt!=PT_FIRE&&rt!=PT_NEUT&&rt!=PT_PHOT) if (rt!=PT_CLNE&&rt!=PT_THDR&&rt!=PT_DMND&&rt!=PT_FIRE)
{ {
if ((sim->elements[r&0xFF].Properties&PROP_CONDUCTS) && parts[r>>8].life==0) if ((sim->elements[r&0xFF].Properties&PROP_CONDUCTS) && parts[r>>8].life==0)
{ {
sim->create_part(r>>8,x+rx,y+ry,PT_SPRK); sim->create_part(r>>8,x+rx,y+ry,PT_SPRK);
} }
sim->pv[y/CELL][x/CELL] += powderful/400;
if (sim->elements[r&0xFF].HeatConduct) parts[r>>8].temp = restrict_flt(parts[r>>8].temp+powderful/1.5, MIN_TEMP, MAX_TEMP);
}
if (rt==PT_DEUT || rt==PT_PLUT) // start nuclear reactions if (rt==PT_DEUT || rt==PT_PLUT) // start nuclear reactions
{ {
parts[r>>8].temp = restrict_flt(parts[r>>8].temp+powderful, MIN_TEMP, MAX_TEMP); parts[r>>8].temp = restrict_flt(parts[r>>8].temp+powderful, MIN_TEMP, MAX_TEMP);
sim->pv[y/CELL][x/CELL] +=powderful/35; sim->pv[y/CELL][x/CELL] +=powderful/35;
if (rand()%3==0) if (!(rand()%3))
{ {
sim->part_change_type(r>>8,x+rx,y+ry,PT_NEUT); sim->part_change_type(r>>8,x+rx,y+ry,PT_NEUT);
parts[r>>8].life = rand()%480+480; parts[r>>8].life = rand()%480+480;
@ -122,18 +119,22 @@ int Element_LIGH::update(UPDATE_FUNC_ARGS)
parts[r>>8].vy=rand()%10-5; parts[r>>8].vy=rand()%10-5;
} }
} }
if (rt==PT_COAL || rt==PT_BCOL) // ignite coal else if (rt==PT_COAL || rt==PT_BCOL) // ignite coal
{ {
if (parts[r>>8].life>100) { if (parts[r>>8].life>100) {
parts[r>>8].life = 99; parts[r>>8].life = 99;
} }
} }
if (sim->elements[r&0xFF].HeatConduct) else if ((rt==PT_STKM && sim->player.elem!=PT_LIGH) || (rt==PT_STKM2 && sim->player2.elem!=PT_LIGH))
parts[r>>8].temp = restrict_flt(parts[r>>8].temp+powderful/10, MIN_TEMP, MAX_TEMP);
if ((rt==PT_STKM && sim->player.elem!=PT_LIGH) || (rt==PT_STKM2 && sim->player2.elem!=PT_LIGH))
{ {
parts[r>>8].life-=powderful/100; parts[r>>8].life-=powderful/100;
} }
sim->pv[y/CELL][x/CELL] += powderful/400;
if (sim->elements[r&0xFF].HeatConduct) parts[r>>8].temp = restrict_flt(parts[r>>8].temp+powderful/1.3, MIN_TEMP, MAX_TEMP);
}
else
parts[r>>8].temp = restrict_flt(parts[r>>8].temp+powderful/10, MIN_TEMP, MAX_TEMP);
} }
} }
if (parts[i].tmp2==3) if (parts[i].tmp2==3)
@ -141,28 +142,21 @@ int Element_LIGH::update(UPDATE_FUNC_ARGS)
parts[i].tmp2=0; parts[i].tmp2=0;
return 1; return 1;
} }
else if (parts[i].tmp2<=-1)
if (parts[i].tmp2==-1)
{ {
sim->kill_part(i); sim->kill_part(i);
return 1; return 1;
} }
if (parts[i].tmp2<=0 || parts[i].life<=1) else if (parts[i].tmp2<=0 || parts[i].life<=1)
{ {
if (parts[i].tmp2>0) if (parts[i].tmp2>0)
parts[i].tmp2=0; parts[i].tmp2=0;
parts[i].tmp2--; parts[i].tmp2--;
return 1; return 1;
} }
if (parts[i].tmp2<=-2)
{
sim->kill_part(i);
return 1;
}
angle2=-1; //Completely broken and laggy function, possible can be fixed later
/*pNear = LIGH_nearest_part(sim, i, parts[i].life*2.5);
pNear = LIGH_nearest_part(sim, i, parts[i].life*2.5);
if (pNear!=-1) if (pNear!=-1)
{ {
int t=parts[pNear].type; int t=parts[pNear].type;
@ -196,59 +190,21 @@ int Element_LIGH::update(UPDATE_FUNC_ARGS)
} }
} }
else pNear=-1; else pNear=-1;
} }*/
//if (parts[i].tmp2==1/* || near!=-1*/) //if (parts[i].tmp2==1/* || near!=-1*/)
//angle=0;//parts[i].tmp-30+rand()%60; //angle=0;//parts[i].tmp-30+rand()%60;
angle = parts[i].tmp-30+rand()%60; angle = (parts[i].tmp-30+rand()%60)%360;
if (angle<0)
angle+=360;
if (angle>=360)
angle-=360;
if (parts[i].tmp2==2 && pNear==-1)
{
angle2=angle+100-rand()%200;
if (angle2<0)
angle2+=360;
if (angle2>=360)
angle-=360;
}
multipler=parts[i].life*1.5+rand()%((int)(parts[i].life+1)); multipler=parts[i].life*1.5+rand()%((int)(parts[i].life+1));
rx=cos(angle*M_PI/180)*multipler; rx=cos(angle*M_PI/180)*multipler;
ry=-sin(angle*M_PI/180)*multipler; ry=-sin(angle*M_PI/180)*multipler;
create_line_par(sim, x, y, x+rx, y+ry, PT_LIGH, parts[i].temp, parts[i].life, angle, 0); create_line_par(sim, x, y, x+rx, y+ry, PT_LIGH, parts[i].temp, parts[i].life, angle, 0);
if (parts[i].tmp2==2)// && pNear==-1)
if (x+rx>=0 && y+ry>=0 && x+rx<XRES && y+ry<YRES && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; angle2= ((int)angle+100-rand()%200)%360;
if ((r&0xFF)==PT_LIGH)
{
parts[r>>8].tmp2=1+(rand()%200>parts[i].tmp2*parts[i].tmp2/10+60);
parts[r>>8].life=(int)(1.0*parts[i].life/1.5-rand()%2);
parts[r>>8].tmp=angle;
parts[r>>8].temp=parts[i].temp;
}
}
if (angle2!=-1)
{
multipler=parts[i].life*1.5+rand()%((int)(parts[i].life+1));
rx=cos(angle2*M_PI/180)*multipler; rx=cos(angle2*M_PI/180)*multipler;
ry=-sin(angle2*M_PI/180)*multipler; ry=-sin(angle2*M_PI/180)*multipler;
create_line_par(sim, x, y, x+rx, y+ry, PT_LIGH, parts[i].temp, parts[i].life, angle2, 0); create_line_par(sim, x, y, x+rx, y+ry, PT_LIGH, parts[i].temp, parts[i].life, angle2, 0);
if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry))
{
r = pmap[y+ry][x+rx];
if ((r&0xFF)==PT_LIGH)
{
parts[r>>8].tmp2=1+(rand()%200>parts[i].tmp2*parts[i].tmp2/10+40);
parts[r>>8].life=(int)(1.0*parts[i].life/1.5-rand()%2);
parts[r>>8].tmp=angle;
parts[r>>8].temp=parts[i].temp;
}
}
} }
parts[i].tmp2=-1; parts[i].tmp2=-1;
@ -297,17 +253,25 @@ int Element_LIGH::contact_part(Simulation * sim, int i, int tp)
return -1; return -1;
} }
//#TPT-Directive ElementHeader Element_LIGH static bool create_LIGH(Simulation * sim, int x, int y, int c, int temp, int life, int tmp, int tmp2) //#TPT-Directive ElementHeader Element_LIGH static bool create_LIGH(Simulation * sim, int x, int y, int c, int temp, int life, int tmp, int tmp2, bool last)
bool Element_LIGH::create_LIGH(Simulation * sim, int x, int y, int c, int temp, int life, int tmp, int tmp2) bool Element_LIGH::create_LIGH(Simulation * sim, int x, int y, int c, int temp, int life, int tmp, int tmp2, bool last)
{ {
int p = sim->create_part(-1, x, y,c); int p = sim->create_part(-1, x, y,c);
if (p != -1) if (p != -1)
{ {
sim->parts[p].life = life;
sim->parts[p].temp = temp; sim->parts[p].temp = temp;
sim->parts[p].tmp = tmp; sim->parts[p].tmp = tmp;
if (last)
{
sim->parts[p].tmp2=1+(rand()%200>tmp2*tmp2/10+60);
sim->parts[p].life=(int)(life/1.5-rand()%2);
}
else
{
sim->parts[p].life = life;
sim->parts[p].tmp2 = tmp2; sim->parts[p].tmp2 = tmp2;
} }
}
else if (x >= 0 && x < XRES && y >= 0 && y < YRES) else if (x >= 0 && x < XRES && y >= 0 && y < YRES)
{ {
int r = sim->pmap[y][x]; int r = sim->pmap[y][x];
@ -348,9 +312,9 @@ void Element_LIGH::create_line_par(Simulation * sim, int x1, int y1, int x2, int
{ {
bool ret; bool ret;
if (reverseXY) if (reverseXY)
ret = create_LIGH(sim, y, x, c, temp, life, tmp, tmp2); ret = create_LIGH(sim, y, x, c, temp, life, tmp, tmp2,x==x2);
else else
ret = create_LIGH(sim, x, y, c, temp, life, tmp, tmp2); ret = create_LIGH(sim, x, y, c, temp, life, tmp, tmp2,x==x2);
if (ret) if (ret)
return; return;
@ -368,9 +332,9 @@ void Element_LIGH::create_line_par(Simulation * sim, int x1, int y1, int x2, int
{ {
bool ret; bool ret;
if (reverseXY) if (reverseXY)
ret = create_LIGH(sim, y, x, c, temp, life, tmp, tmp2); ret = create_LIGH(sim, y, x, c, temp, life, tmp, tmp2,x==x2);
else else
ret = create_LIGH(sim, x, y, c, temp, life, tmp, tmp2); ret = create_LIGH(sim, x, y, c, temp, life, tmp, tmp2,x==x2);
if (ret) if (ret)
return; return;

View File

@ -62,7 +62,7 @@ int Element_MERC::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r || (parts[i].tmp >=maxtmp)) if (!r || (parts[i].tmp >=maxtmp))
continue; continue;
if ((r&0xFF)==PT_MERC&&33>=rand()/(RAND_MAX/100)+1) if ((r&0xFF)==PT_MERC&& !(rand()%3))
{ {
if ((parts[i].tmp + parts[r>>8].tmp + 1) <= maxtmp) if ((parts[i].tmp + parts[r>>8].tmp + 1) <= maxtmp)
{ {

View File

@ -53,7 +53,7 @@ int Element_NBLE::update(UPDATE_FUNC_ARGS)
if (parts[i].temp > 5273.15 && sim->pv[y/CELL][x/CELL] > 100.0f) if (parts[i].temp > 5273.15 && sim->pv[y/CELL][x/CELL] > 100.0f)
{ {
parts[i].tmp = 1; parts[i].tmp = 1;
if (rand()%5 < 1) if (!(rand()%5))
{ {
int j; int j;
float temp = parts[i].temp; float temp = parts[i].temp;

View File

@ -58,14 +58,15 @@ int Element_NEUT::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if ((r&0xFF)==PT_WATR || (r&0xFF)==PT_ICEI || (r&0xFF)==PT_SNOW) rt = r&0xFF;
if (rt==PT_WATR || rt==PT_ICEI || rt==PT_SNOW)
{ {
parts[i].vx *= 0.995; parts[i].vx *= 0.995;
parts[i].vy *= 0.995; parts[i].vy *= 0.995;
} }
if ((r&0xFF)==PT_PLUT && pressureFactor>(rand()%1000)) if (rt==PT_PLUT && pressureFactor>(rand()%1000))
{ {
if (33>rand()%100) if (!(rand()%3))
{ {
sim->create_part(r>>8, x+rx, y+ry, rand()%3 ? PT_LAVA : PT_URAN); sim->create_part(r>>8, x+rx, y+ry, rand()%3 ? PT_LAVA : PT_URAN);
parts[r>>8].temp = MAX_TEMP; parts[r>>8].temp = MAX_TEMP;
@ -84,13 +85,13 @@ int Element_NEUT::update(UPDATE_FUNC_ARGS)
Element_FIRE::update(UPDATE_FUNC_SUBCALL_ARGS); Element_FIRE::update(UPDATE_FUNC_SUBCALL_ARGS);
} }
#ifdef SDEUT #ifdef SDEUT
else if ((r&0xFF)==PT_DEUT && (pressureFactor+1+(parts[r>>8].life/100))>(rand()%1000)) else if (rt==PT_DEUT && (pressureFactor+1+(parts[r>>8].life/100))>(rand()%1000))
{ {
create_n_parts(sim, parts[r>>8].life, x+rx, y+ry, parts[i].vx, parts[i].vy, restrict_flt(parts[r>>8].temp + parts[r>>8].life*500, MIN_TEMP, MAX_TEMP), PT_NEUT); create_n_parts(sim, parts[r>>8].life, x+rx, y+ry, parts[i].vx, parts[i].vy, restrict_flt(parts[r>>8].temp + parts[r>>8].life*500, MIN_TEMP, MAX_TEMP), PT_NEUT);
sim->kill_part(r>>8); sim->kill_part(r>>8);
} }
#else #else
else if ((r&0xFF)==PT_DEUT && (pressureFactor+1)>(rand()%1000)) else if (rt==PT_DEUT && (pressureFactor+1)>(rand()%1000))
{ {
create_part(r>>8, x+rx, y+ry, PT_NEUT); create_part(r>>8, x+rx, y+ry, PT_NEUT);
parts[r>>8].vx = 0.25f*parts[r>>8].vx + parts[i].vx; parts[r>>8].vx = 0.25f*parts[r>>8].vx + parts[i].vx;
@ -105,36 +106,36 @@ int Element_NEUT::update(UPDATE_FUNC_ARGS)
sim.kill_part(r>>8); sim.kill_part(r>>8);
} }
#endif #endif
else if ((r&0xFF)==PT_GUNP && 15>(rand()%1000)) else if (rt==PT_GUNP && 3>(rand()%200))
sim->part_change_type(r>>8,x+rx,y+ry,PT_DUST); sim->part_change_type(r>>8,x+rx,y+ry,PT_DUST);
else if ((r&0xFF)==PT_DYST && 15>(rand()%1000)) else if (rt==PT_DYST && 3>(rand()%200))
sim->part_change_type(r>>8,x+rx,y+ry,PT_YEST); sim->part_change_type(r>>8,x+rx,y+ry,PT_YEST);
else if ((r&0xFF)==PT_YEST) else if (rt==PT_YEST)
sim->part_change_type(r>>8,x+rx,y+ry,PT_DYST); sim->part_change_type(r>>8,x+rx,y+ry,PT_DYST);
else if ((r&0xFF)==PT_WATR && 15>(rand()%100)) else if (rt==PT_WATR && 3>(rand()%20))
sim->part_change_type(r>>8,x+rx,y+ry,PT_DSTW); sim->part_change_type(r>>8,x+rx,y+ry,PT_DSTW);
else if ((r&0xFF)==PT_PLEX && 15>(rand()%1000)) else if (rt==PT_PLEX && 3>(rand()%200))
sim->part_change_type(r>>8,x+rx,y+ry,PT_GOO); sim->part_change_type(r>>8,x+rx,y+ry,PT_GOO);
else if ((r&0xFF)==PT_NITR && 15>(rand()%1000)) else if (rt==PT_NITR && 3>(rand()%200))
sim->part_change_type(r>>8,x+rx,y+ry,PT_DESL); sim->part_change_type(r>>8,x+rx,y+ry,PT_DESL);
else if ((r&0xFF)==PT_PLNT && 5>(rand()%100)) else if (rt==PT_PLNT && !(rand()%20))
sim->create_part(r>>8, x+rx, y+ry, PT_WOOD); sim->create_part(r>>8, x+rx, y+ry, PT_WOOD);
else if ((r&0xFF)==PT_DESL && 15>(rand()%1000)) else if (rt==PT_DESL && 3>(rand()%200))
sim->part_change_type(r>>8,x+rx,y+ry,PT_GAS); sim->part_change_type(r>>8,x+rx,y+ry,PT_GAS);
else if ((r&0xFF)==PT_COAL && 5>(rand()%100)) else if (rt==PT_COAL && !(rand()%20))
sim->create_part(r>>8, x+rx, y+ry, PT_WOOD); sim->create_part(r>>8, x+rx, y+ry, PT_WOOD);
else if ((r&0xFF)==PT_DUST && 5>(rand()%100)) else if (rt==PT_DUST && !(rand()%20))
sim->part_change_type(r>>8, x+rx, y+ry, PT_FWRK); sim->part_change_type(r>>8, x+rx, y+ry, PT_FWRK);
else if ((r&0xFF)==PT_FWRK && 5>(rand()%100)) else if (rt==PT_FWRK && !(rand()%20))
parts[r>>8].ctype = PT_DUST; parts[r>>8].ctype = PT_DUST;
else if ((r&0xFF)==PT_ACID && 5>(rand()%100)) else if (rt==PT_ACID && !(rand()%20))
sim->create_part(r>>8, x+rx, y+ry, PT_ISOZ); sim->create_part(r>>8, x+rx, y+ry, PT_ISOZ);
else if ((r&0xFF)==PT_TTAN && 5>(rand()%100)) else if (rt==PT_TTAN && !(rand()%20))
{ {
sim->kill_part(i); sim->kill_part(i);
return 1; return 1;
} }
else if ((r&0xFF)==PT_EXOT && 5>(rand()%100)) else if (rt==PT_EXOT && 5>(rand()%100))
parts[r>>8].life = 1500; parts[r>>8].life = 1500;
/*if(parts[r>>8].type>1 && parts[r>>8].type!=PT_NEUT && parts[r>>8].type-1!=PT_NEUT && parts[r>>8].type-1!=PT_STKM && /*if(parts[r>>8].type>1 && parts[r>>8].type!=PT_NEUT && parts[r>>8].type-1!=PT_NEUT && parts[r>>8].type-1!=PT_STKM &&
(elements[parts[r>>8].type-1].menusection==SC_LIQUID|| (elements[parts[r>>8].type-1].menusection==SC_LIQUID||

View File

@ -60,41 +60,43 @@ int Element_O2::update(UPDATE_FUNC_ARGS)
if ((r&0xFF)==PT_FIRE) if ((r&0xFF)==PT_FIRE)
{ {
parts[r>>8].temp+=(rand()/(RAND_MAX/100)); parts[r>>8].temp+=(rand()%100);
if(parts[r>>8].tmp&0x01) if(parts[r>>8].tmp&0x01)
parts[r>>8].temp=3473; parts[r>>8].temp=3473;
parts[r>>8].tmp |= 2; parts[r>>8].tmp |= 2;
}
if ((r&0xFF)==PT_FIRE || ((r&0xFF)==PT_PLSM && !(parts[r>>8].tmp&4)))
{
sim->create_part(i,x,y,PT_FIRE); sim->create_part(i,x,y,PT_FIRE);
parts[i].temp+=(rand()/(RAND_MAX/100)); parts[i].temp+=(rand()%100);
parts[i].tmp |= 2;
}
else if ((r&0xFF)==PT_PLSM && !(parts[r>>8].tmp&4))
{
sim->create_part(i,x,y,PT_FIRE);
parts[i].temp+=(rand()%100);
parts[i].tmp |= 2; parts[i].tmp |= 2;
} }
} }
if (parts[i].temp > 9973.15 && sim->pv[y/CELL][x/CELL] > 250.0f && abs(sim->gravx[((y/CELL)*(XRES/CELL))+(x/CELL)]) + abs(sim->gravy[((y/CELL)*(XRES/CELL))+(x/CELL)]) > 20) if (parts[i].temp > 9973.15 && sim->pv[y/CELL][x/CELL] > 250.0f && abs(sim->gravx[((y/CELL)*(XRES/CELL))+(x/CELL)]) + abs(sim->gravy[((y/CELL)*(XRES/CELL))+(x/CELL)]) > 20)
{ {
if (rand()%5 < 1) if (!(rand()%5))
{ {
int j; int j;
sim->create_part(i,x,y,PT_BRMT); sim->create_part(i,x,y,PT_BRMT);
j = sim->create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_NEUT); j = sim->create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_NEUT);
if (j != -1) if (j != -1)
parts[j].temp = 15000; parts[j].temp = MAX_TEMP;
j = sim->create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_PHOT); j = sim->create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_PHOT);
if (j != -1) if (j != -1)
parts[j].temp = 15000; parts[j].temp = MAX_TEMP;
j = sim->create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_PLSM); j = sim->create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_PLSM);
if (j != -1) if (j != -1)
{ {
parts[j].temp = 15000; parts[j].temp = MAX_TEMP;
parts[j].tmp |= 4; parts[j].tmp |= 4;
} }
parts[i].temp = MAX_TEMP;
parts[i].temp = 15000; sim->pv[y/CELL][x/CELL] = 256;
sim->pv[y/CELL][x/CELL] += 300;
} }
} }
return 0; return 0;

View File

@ -48,10 +48,8 @@ Element_PBCN::Element_PBCN()
//#TPT-Directive ElementHeader Element_PBCN static int update(UPDATE_FUNC_ARGS) //#TPT-Directive ElementHeader Element_PBCN static int update(UPDATE_FUNC_ARGS)
int Element_PBCN::update(UPDATE_FUNC_ARGS) int Element_PBCN::update(UPDATE_FUNC_ARGS)
{ {
int r, rx, ry; int r, rx, ry, rt;
if (parts[i].life>0 && parts[i].life!=10)
parts[i].life--;
if (!parts[i].tmp2 && sim->pv[y/CELL][x/CELL]>4.0f) if (!parts[i].tmp2 && sim->pv[y/CELL][x/CELL]>4.0f)
parts[i].tmp2 = rand()%40+80; parts[i].tmp2 = rand()%40+80;
if (parts[i].tmp2) if (parts[i].tmp2)
@ -75,20 +73,25 @@ int Element_PBCN::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if ((r&0xFF)!=PT_CLNE && (r&0xFF)!=PT_PCLN && rt = r&0xFF;
(r&0xFF)!=PT_BCLN && (r&0xFF)!=PT_SPRK && if (rt!=PT_CLNE && rt!=PT_PCLN &&
(r&0xFF)!=PT_NSCN && (r&0xFF)!=PT_PSCN && rt!=PT_BCLN && rt!=PT_SPRK &&
(r&0xFF)!=PT_STKM && (r&0xFF)!=PT_STKM2 && rt!=PT_NSCN && rt!=PT_PSCN &&
(r&0xFF)!=PT_PBCN && (r&0xFF)<PT_NUM) rt!=PT_STKM && rt!=PT_STKM2 &&
rt!=PT_PBCN && rt<PT_NUM)
{ {
parts[i].ctype = r&0xFF; parts[i].ctype = rt;
if ((r&0xFF)==PT_LIFE || (r&0xFF)==PT_LAVA) if (rt==PT_LIFE || rt==PT_LAVA)
parts[i].tmp = parts[r>>8].ctype; parts[i].tmp = parts[r>>8].ctype;
} }
} }
if (parts[i].life==10) if (parts[i].life!=10)
{
if (parts[i].life>0)
parts[i].life--;
}
else
{ {
for (rx=-2; rx<3; rx++) for (rx=-2; rx<3; rx++)
for (ry=-2; ry<3; ry++) for (ry=-2; ry<3; 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))
@ -105,16 +108,14 @@ int Element_PBCN::update(UPDATE_FUNC_ARGS)
} }
} }
} }
if (parts[i].ctype>0 && parts[i].ctype<PT_NUM && sim->elements[parts[i].ctype].Enabled && parts[i].life==10) { if (parts[i].ctype>0 && parts[i].ctype<PT_NUM && sim->elements[parts[i].ctype].Enabled && parts[i].life==10)
{
if (parts[i].ctype==PT_PHOT) {//create photons a different way if (parts[i].ctype==PT_PHOT) {//create photons a different way
for (rx=-1; rx<2; rx++) for (rx=-1; rx<2; rx++)
{
for (ry = -1; ry < 2; ry++) for (ry = -1; ry < 2; ry++)
{
if (rx || ry) if (rx || ry)
{ {
int r = sim->create_part(-1, x + rx, y + ry, int r = sim->create_part(-1, x + rx, y + ry,parts[i].ctype);
parts[i].ctype);
if (r != -1) if (r != -1)
{ {
parts[r].vx = rx * 3; parts[r].vx = rx * 3;
@ -127,19 +128,15 @@ int Element_PBCN::update(UPDATE_FUNC_ARGS)
} }
} }
} }
} else if (parts[i].ctype==PT_LIFE)//create life a different way
} for (rx=-1; rx<2; rx++)
else if (parts[i].ctype==PT_LIFE) {//create life a different way for (ry=-1; ry<2; ry++)
for (rx=-1; rx<2; rx++) {
for (ry=-1; ry<2; ry++) {
sim->create_part(-1, x+rx, y+ry, parts[i].ctype|(parts[i].tmp<<8)); sim->create_part(-1, x+rx, y+ry, parts[i].ctype|(parts[i].tmp<<8));
}
} else if (parts[i].ctype!=PT_LIGH || !(rand()%30))
}
else if (parts[i].ctype!=PT_LIGH || (rand()%30)==0)
{ {
int np = sim->create_part(-1, x+rand()%3-1, y+rand()%3-1, parts[i].ctype); int np = sim->create_part(-1, x+rand()%3-1, y+rand()%3-1, parts[i].ctype);
if (np>=0) if (np>-1)
{ {
if (parts[i].ctype==PT_LAVA && parts[i].tmp>0 && parts[i].tmp<PT_NUM && sim->elements[parts[i].tmp].HighTemperatureTransition==PT_LAVA) if (parts[i].ctype==PT_LAVA && parts[i].tmp>0 && parts[i].tmp<PT_NUM && sim->elements[parts[i].tmp].HighTemperatureTransition==PT_LAVA)
parts[np].ctype = parts[i].tmp; parts[np].ctype = parts[i].tmp;

View File

@ -49,7 +49,7 @@ Element_PCLN::Element_PCLN()
//#TPT-Directive ElementHeader Element_PCLN static int update(UPDATE_FUNC_ARGS) //#TPT-Directive ElementHeader Element_PCLN static int update(UPDATE_FUNC_ARGS)
int Element_PCLN::update(UPDATE_FUNC_ARGS) int Element_PCLN::update(UPDATE_FUNC_ARGS)
{ {
int r, rx, ry; int r, rx, ry, rt;
if (parts[i].life>0 && parts[i].life!=10) if (parts[i].life>0 && parts[i].life!=10)
parts[i].life--; parts[i].life--;
for (rx=-2; rx<3; rx++) for (rx=-2; rx<3; rx++)
@ -66,7 +66,7 @@ int Element_PCLN::update(UPDATE_FUNC_ARGS)
else if (parts[r>>8].ctype==PT_NSCN) else if (parts[r>>8].ctype==PT_NSCN)
parts[i].life = 9; parts[i].life = 9;
} }
if ((r&0xFF)==PT_PCLN) else if ((r&0xFF)==PT_PCLN)
{ {
if (parts[i].life==10&&parts[r>>8].life<10&&parts[r>>8].life>0) if (parts[i].life==10&&parts[r>>8].life<10&&parts[r>>8].life>0)
parts[i].life = 9; parts[i].life = 9;
@ -84,27 +84,26 @@ int Element_PCLN::update(UPDATE_FUNC_ARGS)
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if ((r&0xFF)!=PT_CLNE && (r&0xFF)!=PT_PCLN && rt = r&0xFF;
(r&0xFF)!=PT_BCLN && (r&0xFF)!=PT_SPRK && if (rt!=PT_CLNE && rt!=PT_PCLN &&
(r&0xFF)!=PT_NSCN && (r&0xFF)!=PT_PSCN && rt!=PT_BCLN && rt!=PT_SPRK &&
(r&0xFF)!=PT_STKM && (r&0xFF)!=PT_STKM2 && rt!=PT_NSCN && rt!=PT_PSCN &&
(r&0xFF)!=PT_PBCN && (r&0xFF)<PT_NUM) rt!=PT_STKM && rt!=PT_STKM2 &&
rt!=PT_PBCN && rt<PT_NUM)
{ {
parts[i].ctype = r&0xFF; parts[i].ctype = rt;
if ((r&0xFF)==PT_LIFE || (r&0xFF)==PT_LAVA) if (rt==PT_LIFE || rt==PT_LAVA)
parts[i].tmp = parts[r>>8].ctype; parts[i].tmp = parts[r>>8].ctype;
} }
} }
if (parts[i].ctype>0 && parts[i].ctype<PT_NUM && sim->elements[parts[i].ctype].Enabled && parts[i].life==10) { if (parts[i].ctype>0 && parts[i].ctype<PT_NUM && sim->elements[parts[i].ctype].Enabled && parts[i].life==10)
{
if (parts[i].ctype==PT_PHOT) {//create photons a different way if (parts[i].ctype==PT_PHOT) {//create photons a different way
for (rx=-1; rx<2; rx++) for (rx=-1; rx<2; rx++)
{
for (ry = -1; ry < 2; ry++) for (ry = -1; ry < 2; ry++)
{
if (rx || ry) if (rx || ry)
{ {
int r = sim->create_part(-1, x + rx, y + ry, int r = sim->create_part(-1, x + rx, y + ry, parts[i].ctype);
parts[i].ctype);
if (r != -1) if (r != -1)
{ {
parts[r].vx = rx * 3; parts[r].vx = rx * 3;
@ -117,15 +116,11 @@ int Element_PCLN::update(UPDATE_FUNC_ARGS)
} }
} }
} }
} else if (parts[i].ctype==PT_LIFE)//create life a different way
} for (rx=-1; rx<2; rx++)
else if (parts[i].ctype==PT_LIFE) {//create life a different way for (ry=-1; ry<2; ry++)
for (rx=-1; rx<2; rx++) {
for (ry=-1; ry<2; ry++) {
sim->create_part(-1, x+rx, y+ry, parts[i].ctype|(parts[i].tmp<<8)); sim->create_part(-1, x+rx, y+ry, parts[i].ctype|(parts[i].tmp<<8));
}
}
}
else if (parts[i].ctype!=PT_LIGH || (rand()%30)==0) else if (parts[i].ctype!=PT_LIGH || (rand()%30)==0)
{ {
int np = sim->create_part(-1, x+rand()%3-1, y+rand()%3-1, parts[i].ctype); int np = sim->create_part(-1, x+rand()%3-1, y+rand()%3-1, parts[i].ctype);

View File

@ -58,14 +58,14 @@ int Element_PHOT::update(UPDATE_FUNC_ARGS)
return 1; return 1;
} }
if (parts[i].temp > 506) if (parts[i].temp > 506)
if (1>rand()%10) Element_FIRE::update(UPDATE_FUNC_SUBCALL_ARGS); if (!(rand()%10)) Element_FIRE::update(UPDATE_FUNC_SUBCALL_ARGS);
for (rx=-1; rx<2; rx++) for (rx=-1; rx<2; rx++)
for (ry=-1; ry<2; ry++) 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]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if ((r&0xFF)==PT_ISOZ && 5>(rand()%2000)) if ((r&0xFF)==PT_ISOZ && !(rand()%400))
{ {
parts[i].vx *= 0.90; parts[i].vx *= 0.90;
parts[i].vy *= 0.90; parts[i].vy *= 0.90;
@ -76,7 +76,7 @@ int Element_PHOT::update(UPDATE_FUNC_ARGS)
parts[r>>8].vy = rr*sinf(rrr); parts[r>>8].vy = rr*sinf(rrr);
sim->pv[y/CELL][x/CELL] -= 15.0f * CFDS; sim->pv[y/CELL][x/CELL] -= 15.0f * CFDS;
} }
if ((r&0xFF)==PT_ISZS && 5>(rand()%2000)) if ((r&0xFF)==PT_ISZS && !(rand()%400))
{ {
parts[i].vx *= 0.90; parts[i].vx *= 0.90;
parts[i].vy *= 0.90; parts[i].vy *= 0.90;
@ -89,7 +89,7 @@ int Element_PHOT::update(UPDATE_FUNC_ARGS)
} }
} }
r = pmap[y][x]; r = pmap[y][x];
if((r&0xFF) == PT_QRTZ && r)// && parts[i].ctype==0x3FFFFFFF) if((r&0xFF) == PT_QRTZ)// && parts[i].ctype==0x3FFFFFFF)
{ {
float a = (rand()%360)*3.14159f/180.0f; float a = (rand()%360)*3.14159f/180.0f;
parts[i].vx = 3.0f*cosf(a); parts[i].vx = 3.0f*cosf(a);

View File

@ -216,22 +216,14 @@ int Element_PIPE::update(UPDATE_FUNC_ARGS)
{ {
if (parts[i].temp<272.15)//manual pipe colors if (parts[i].temp<272.15)//manual pipe colors
{ {
if (parts[i].temp>173.25&&parts[i].temp<273.15) if (parts[i].temp>173.25)
{
parts[i].ctype = 2; parts[i].ctype = 2;
parts[i].life = 0; else if (parts[i].temp>73.25)
}
if (parts[i].temp>73.25&&parts[i].temp<=173.15)
{
parts[i].ctype = 3; parts[i].ctype = 3;
parts[i].life = 0; else if (parts[i].temp>=0)
}
if (parts[i].temp>=0&&parts[i].temp<=73.15)
{
parts[i].ctype = 4; parts[i].ctype = 4;
parts[i].life = 0; parts[i].life = 0;
} }
}
else else
{ {
// make a border // make a border