Narrowed loops for all elements in the first list.

Probabilities might be messed up a bit, I'm not sure.
This commit is contained in:
Saveliy Skresanov
2013-03-16 23:03:02 +07:00
parent d383d6d7e5
commit 43974d8537
20 changed files with 136 additions and 139 deletions

View File

@@ -53,14 +53,14 @@ int Element_ANAR::update(UPDATE_FUNC_ARGS)
//if (parts[i].temp >= 0.23) //if (parts[i].temp >= 0.23)
// parts[i].temp --; // parts[i].temp --;
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if ((r&0xFF)==PT_HFLM && !(rand()%22)) if ((r&0xFF)==PT_HFLM && !(rand()%7))
{ {
sim->part_change_type(i,x,y,PT_HFLM); sim->part_change_type(i,x,y,PT_HFLM);
parts[i].life = rand()%150+50; parts[i].life = rand()%150+50;

View File

@@ -57,29 +57,6 @@ int Element_BCOL::update(UPDATE_FUNC_ARGS)
parts[i].life--; parts[i].life--;
sim->create_part(-1, x+rand()%3-1, y+rand()%3-1, PT_FIRE); sim->create_part(-1, x+rand()%3-1, y+rand()%3-1, PT_FIRE);
} }
for (rx=-2; rx<3; rx++)
for (ry=-2; ry<3; ry++)
if (BOUNDS_CHECK && (rx || ry))
{
r = pmap[y+ry][x+rx];
if (!r)
continue;
if (((r&0xFF)==PT_FIRE || (r&0xFF)==PT_PLSM))
{
if (parts[i].life>100 && !(rand()%500)) {
parts[i].life = 99;
}
}
else if ((r&0xFF)==PT_LAVA)
{
if (parts[r>>8].ctype == PT_IRON && !(rand()%500)) {
parts[r>>8].ctype = PT_METL;
sim->kill_part(i);
return 1;
}
}
}
/*if(100-parts[i].life > parts[i].tmp2) /*if(100-parts[i].life > parts[i].tmp2)
parts[i].tmp2 = 100-parts[i].life; parts[i].tmp2 = 100-parts[i].life;
if(parts[i].tmp2 < 0) parts[i].tmp2 = 0; if(parts[i].tmp2 < 0) parts[i].tmp2 = 0;

View File

@@ -51,8 +51,8 @@ int Element_BOMB::update(UPDATE_FUNC_ARGS)
{ {
int r, rx, ry, nb; int r, rx, ry, nb;
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];

View File

@@ -84,19 +84,19 @@ int Element_CBNW::update(UPDATE_FUNC_ARGS)
} }
parts[i].tmp--; parts[i].tmp--;
} }
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if ((sim->elements[r&0xFF].Properties&TYPE_PART) && parts[i].tmp == 0 && !(rand()%250)) if ((sim->elements[r&0xFF].Properties&TYPE_PART) && parts[i].tmp == 0 && !(rand()%83))
{ {
//Start explode //Start explode
parts[i].tmp = rand()%25;//(rand()%100)+50; parts[i].tmp = rand()%25;//(rand()%100)+50;
} }
else if((sim->elements[r&0xFF].Properties&TYPE_SOLID) && (r&0xFF)!=PT_DMND && (r&0xFF)!=PT_GLAS && parts[i].tmp == 0 && (2-sim->pv[y/CELL][x/CELL])>(rand()%40000)) else if((sim->elements[r&0xFF].Properties&TYPE_SOLID) && (r&0xFF)!=PT_DMND && (r&0xFF)!=PT_GLAS && parts[i].tmp == 0 && (2-sim->pv[y/CELL][x/CELL])>(rand()%13333))
{ {
sim->part_change_type(i,x,y,PT_CO2); sim->part_change_type(i,x,y,PT_CO2);
parts[i].ctype = 5; parts[i].ctype = 5;
@@ -122,7 +122,7 @@ int Element_CBNW::update(UPDATE_FUNC_ARGS)
} }
else if ((r&0xFF)==PT_RBDM||(r&0xFF)==PT_LRBD) else if ((r&0xFF)==PT_RBDM||(r&0xFF)==PT_LRBD)
{ {
if ((sim->legacy_enable||parts[i].temp>(273.15f+12.0f)) && !(rand()%500)) if ((sim->legacy_enable||parts[i].temp>(273.15f+12.0f)) && !(rand()%166))
{ {
sim->part_change_type(i,x,y,PT_FIRE); sim->part_change_type(i,x,y,PT_FIRE);
parts[i].life = 4; parts[i].life = 4;
@@ -131,7 +131,7 @@ int Element_CBNW::update(UPDATE_FUNC_ARGS)
} }
else if ((r&0xFF)==PT_FIRE && parts[r>>8].ctype!=PT_WATR){ else if ((r&0xFF)==PT_FIRE && parts[r>>8].ctype!=PT_WATR){
sim->kill_part(r>>8); sim->kill_part(r>>8);
if(1>(rand()%150)){ if(1>(rand()%50)){
sim->kill_part(i); sim->kill_part(i);
return 1; return 1;
} }

View File

@@ -50,14 +50,14 @@ Element_CO2::Element_CO2()
int Element_CO2::update(UPDATE_FUNC_ARGS) int Element_CO2::update(UPDATE_FUNC_ARGS)
{ {
int r, rx, ry; int r, rx, ry;
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
{ {
if (parts[i].ctype==5 && !(rand()%83)) if (parts[i].ctype==5 && !(rand()%27))
{ {
if (sim->create_part(-1, x+rx, y+ry, PT_WATR)>=0) if (sim->create_part(-1, x+rx, y+ry, PT_WATR)>=0)
parts[i].ctype = 0; parts[i].ctype = 0;
@@ -66,12 +66,12 @@ int Element_CO2::update(UPDATE_FUNC_ARGS)
} }
if ((r&0xFF)==PT_FIRE){ if ((r&0xFF)==PT_FIRE){
sim->kill_part(r>>8); sim->kill_part(r>>8);
if(!(rand()%150)){ if(!(rand()%50)){
sim->kill_part(i); sim->kill_part(i);
return 1; return 1;
} }
} }
else if (((r&0xFF)==PT_WATR || (r&0xFF)==PT_DSTW) && !(rand()%250)) else if (((r&0xFF)==PT_WATR || (r&0xFF)==PT_DSTW) && !(rand()%83))
{ {
sim->part_change_type(r>>8, x+rx, y+ry, PT_CBNW); sim->part_change_type(r>>8, x+rx, y+ry, PT_CBNW);
if (parts[i].ctype==5) //conserve number of water particles - ctype=5 means this CO2 hasn't released the water particle from BUBW yet if (parts[i].ctype==5) //conserve number of water particles - ctype=5 means this CO2 hasn't released the water particle from BUBW yet

View File

@@ -65,28 +65,6 @@ int Element_COAL::update(UPDATE_FUNC_ARGS)
sim->create_part(i, x, y, PT_BCOL); sim->create_part(i, x, y, PT_BCOL);
return 1; return 1;
} }
for (rx=-2; rx<3; rx++)
for (ry=-2; ry<3; ry++)
if (BOUNDS_CHECK && (rx || ry))
{
r = pmap[y+ry][x+rx];
if (!r)
continue;
if (((r&0xFF)==PT_FIRE || (r&0xFF)==PT_PLSM))
{
if (parts[i].life>100 && !(rand()%500)) {
parts[i].life = 99;
}
}
else if ((r&0xFF)==PT_LAVA)
{
if (parts[r>>8].ctype == PT_IRON && !(rand()%500)) {
parts[r>>8].ctype = PT_METL;
sim->kill_part(i);
return 1;
}
}
}
/*if(100-parts[i].life > parts[i].tmp2) /*if(100-parts[i].life > parts[i].tmp2)
parts[i].tmp2 = 100-parts[i].life; parts[i].tmp2 = 100-parts[i].life;
if(parts[i].tmp2 < 0) parts[i].tmp2 = 0; if(parts[i].tmp2 < 0) parts[i].tmp2 = 0;

View File

@@ -53,8 +53,8 @@ int Element_DMG::update(UPDATE_FUNC_ARGS)
int rad = 25; int rad = 25;
float angle, fx, fy; float angle, fx, fy;
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];

View File

@@ -50,15 +50,15 @@ Element_DSTW::Element_DSTW()
int Element_DSTW::update(UPDATE_FUNC_ARGS) int Element_DSTW::update(UPDATE_FUNC_ARGS)
{ {
int r, rx, ry, rt; int r, rx, ry, rt;
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
switch (r&0xFF) switch (r&0xFF)
{ {
case PT_SALT: case PT_SALT:
if (!(rand()%250)) if (!(rand()%83))
{ {
sim->part_change_type(i,x,y,PT_SLTW); sim->part_change_type(i,x,y,PT_SLTW);
// on average, convert 3 DSTW to SLTW before SALT turns into SLTW // on average, convert 3 DSTW to SLTW before SALT turns into SLTW
@@ -67,20 +67,20 @@ int Element_DSTW::update(UPDATE_FUNC_ARGS)
} }
break; break;
case PT_SLTW: case PT_SLTW:
if (!(rand()%10000)) if (!(rand()%3333))
{ {
sim->part_change_type(i,x,y,PT_SLTW); sim->part_change_type(i,x,y,PT_SLTW);
break; break;
} }
case PT_WATR: case PT_WATR:
if (!(rand()%500)) if (!(rand()%166))
{ {
sim->part_change_type(i,x,y,PT_WATR); sim->part_change_type(i,x,y,PT_WATR);
} }
break; break;
case PT_RBDM: case PT_RBDM:
case PT_LRBD: case PT_LRBD:
if ((sim->legacy_enable||parts[i].temp>12.0f) && !(rand()%500)) if ((sim->legacy_enable||parts[i].temp>12.0f) && !(rand()%166))
{ {
sim->part_change_type(i,x,y,PT_FIRE); sim->part_change_type(i,x,y,PT_FIRE);
parts[i].life = 4; parts[i].life = 4;
@@ -88,7 +88,7 @@ int Element_DSTW::update(UPDATE_FUNC_ARGS)
break; break;
case PT_FIRE: case PT_FIRE:
sim->kill_part(r>>8); sim->kill_part(r>>8);
if(!(rand()%150)){ if(!(rand()%50)){
sim->kill_part(i); sim->kill_part(i);
return 1; return 1;
} }

View File

@@ -95,6 +95,42 @@ int Element_FIRE::update(UPDATE_FUNC_ARGS)
if (sim->bmap[(y+ry)/CELL][(x+rx)/CELL] && sim->bmap[(y+ry)/CELL][(x+rx)/CELL]!=WL_STREAM) if (sim->bmap[(y+ry)/CELL][(x+rx)/CELL] && sim->bmap[(y+ry)/CELL][(x+rx)/CELL]!=WL_STREAM)
continue; continue;
rt = r&0xFF; rt = r&0xFF;
//THRM burning
if (rt==PT_THRM && (t==PT_FIRE || t==PT_PLSM || t==PT_LAVA))
{
if (!(rand()%500)) {
sim->part_change_type(r>>8,x+rx,y+ry,PT_LAVA);
parts[r>>8].ctype = PT_BMTL;
parts[r>>8].temp = 3500.0f;
sim->pv[(y+ry)/CELL][(x+rx)/CELL] += 50.0f;
} else {
sim->part_change_type(r>>8,x+rx,y+ry,PT_LAVA);
parts[r>>8].life = 400;
parts[r>>8].ctype = PT_THRM;
parts[r>>8].temp = 3500.0f;
parts[r>>8].tmp = 20;
}
continue;
}
if ((rt==PT_COAL) || (rt==PT_BCOL))
{
if ((t==PT_FIRE || t==PT_PLSM))
{
if (parts[r>>8].life>100 && !(rand()%500)) {
parts[r>>8].life = 99;
}
}
else if (t==PT_LAVA)
{
if (parts[i].ctype == PT_IRON && !(rand()%500)) {
parts[i].ctype = PT_METL;
sim->kill_part(r>>8);
}
}
}
if ((surround_space || sim->elements[rt].Explosive) && if ((surround_space || sim->elements[rt].Explosive) &&
(t!=PT_SPRK || (rt!=PT_RBDM && rt!=PT_LRBD && rt!=PT_INSL)) && (t!=PT_SPRK || (rt!=PT_RBDM && rt!=PT_LRBD && rt!=PT_INSL)) &&
(t!=PT_PHOT || rt!=PT_INSL) && (t!=PT_PHOT || rt!=PT_INSL) &&
@@ -126,6 +162,43 @@ int Element_FIRE::updateLegacy(UPDATE_FUNC_ARGS) {
if (sim->bmap[(y+ry)/CELL][(x+rx)/CELL] && sim->bmap[(y+ry)/CELL][(x+rx)/CELL]!=WL_STREAM) if (sim->bmap[(y+ry)/CELL][(x+rx)/CELL] && sim->bmap[(y+ry)/CELL][(x+rx)/CELL]!=WL_STREAM)
continue; continue;
rt = r&0xFF; rt = r&0xFF;
//THRM burning
if (rt==PT_THRM && (t==PT_FIRE || t==PT_PLSM || t==PT_LAVA))
{
if (!(rand()%500)) {
sim->part_change_type(r>>8,x+rx,y+ry,PT_LAVA);
parts[r>>8].ctype = PT_BMTL;
parts[r>>8].temp = 3500.0f;
sim->pv[(y+ry)/CELL][(x+rx)/CELL] += 50.0f;
} else {
sim->part_change_type(r>>8,x+rx,y+ry,PT_LAVA);
parts[r>>8].life = 400;
parts[r>>8].ctype = PT_THRM;
parts[r>>8].temp = 3500.0f;
parts[r>>8].tmp = 20;
}
continue;
}
if ((rt==PT_COAL) || (rt==PT_BCOL))
{
if ((t==PT_FIRE || t==PT_PLSM))
{
if (parts[r>>8].life>100 && !(rand()%500)) {
parts[r>>8].life = 99;
}
}
else if (t==PT_LAVA)
{
if (parts[i].ctype == PT_IRON && !(rand()%500)) {
parts[i].ctype = PT_METL;
sim->kill_part(r>>8);
}
}
}
lpv = (int)sim->pv[(y+ry)/CELL][(x+rx)/CELL]; lpv = (int)sim->pv[(y+ry)/CELL][(x+rx)/CELL];
if (lpv < 1) lpv = 1; if (lpv < 1) lpv = 1;
if (t!=PT_SPRK && sim->elements[rt].Meltable && ((rt!=PT_RBDM && rt!=PT_LRBD) || t!=PT_SPRK) && ((t!=PT_FIRE&&t!=PT_PLSM) || (rt!=PT_METL && rt!=PT_IRON && rt!=PT_ETRD && rt!=PT_PSCN && rt!=PT_NSCN && rt!=PT_NTCT && rt!=PT_PTCT && rt!=PT_BMTL && rt!=PT_BRMT && rt!=PT_SALT && rt!=PT_INWR)) &&sim->elements[rt].Meltable*lpv>(rand()%1000)) if (t!=PT_SPRK && sim->elements[rt].Meltable && ((rt!=PT_RBDM && rt!=PT_LRBD) || t!=PT_SPRK) && ((t!=PT_FIRE&&t!=PT_PLSM) || (rt!=PT_METL && rt!=PT_IRON && rt!=PT_ETRD && rt!=PT_PSCN && rt!=PT_NSCN && rt!=PT_NTCT && rt!=PT_PTCT && rt!=PT_BMTL && rt!=PT_BRMT && rt!=PT_SALT && rt!=PT_INWR)) &&sim->elements[rt].Meltable*lpv>(rand()%1000))

View File

@@ -52,8 +52,8 @@ int Element_GBMB::update(UPDATE_FUNC_ARGS)
int rx,ry,r; int rx,ry,r;
if (parts[i].life<=0) if (parts[i].life<=0)
{ {
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
{ {
if (BOUNDS_CHECK) if (BOUNDS_CHECK)
{ {

View File

@@ -54,8 +54,8 @@ int Element_ICEI::update(UPDATE_FUNC_ARGS)
{ {
parts[i].temp = restrict_flt(parts[i].temp-1.0f, MIN_TEMP, MAX_TEMP); parts[i].temp = restrict_flt(parts[i].temp-1.0f, MIN_TEMP, MAX_TEMP);
} }
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
@@ -63,14 +63,14 @@ int Element_ICEI::update(UPDATE_FUNC_ARGS)
continue; continue;
if ((r&0xFF)==PT_SALT || (r&0xFF)==PT_SLTW) if ((r&0xFF)==PT_SALT || (r&0xFF)==PT_SLTW)
{ {
if (parts[i].temp > sim->elements[PT_SLTW].LowTemperature && !(rand()%1000)) if (parts[i].temp > sim->elements[PT_SLTW].LowTemperature && !(rand()%333))
{ {
sim->part_change_type(i,x,y,PT_SLTW); sim->part_change_type(i,x,y,PT_SLTW);
sim->part_change_type(r>>8,x+rx,y+ry,PT_SLTW); sim->part_change_type(r>>8,x+rx,y+ry,PT_SLTW);
return 0; return 0;
} }
} }
else if (((r&0xFF)==PT_FRZZ) && (parts[i].ctype=PT_FRZW) && !(rand()%1000)) else if (((r&0xFF)==PT_FRZZ) && (parts[i].ctype=PT_FRZW) && !(rand()%333))
sim->part_change_type(r>>8,x+rx,y+ry,PT_ICEI); sim->part_change_type(r>>8,x+rx,y+ry,PT_ICEI);
} }
return 0; return 0;

View File

@@ -50,15 +50,15 @@ Element_PLNT::Element_PLNT()
int Element_PLNT::update(UPDATE_FUNC_ARGS) int Element_PLNT::update(UPDATE_FUNC_ARGS)
{ {
int r, rx, ry, np; int r, rx, ry, np;
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
switch (r&0xFF) switch (r&0xFF)
{ {
case PT_WATR: case PT_WATR:
if (!(rand()%250)) if (!(rand()%83))
{ {
np = sim->create_part(r>>8,x+rx,y+ry,PT_PLNT); np = sim->create_part(r>>8,x+rx,y+ry,PT_PLNT);
if (np<0) continue; if (np<0) continue;
@@ -66,7 +66,7 @@ int Element_PLNT::update(UPDATE_FUNC_ARGS)
} }
break; break;
case PT_LAVA: case PT_LAVA:
if (!(rand()%250)) if (!(rand()%83))
{ {
sim->part_change_type(i,x,y,PT_FIRE); sim->part_change_type(i,x,y,PT_FIRE);
parts[i].life = 4; parts[i].life = 4;
@@ -74,14 +74,14 @@ int Element_PLNT::update(UPDATE_FUNC_ARGS)
break; break;
case PT_SMKE: case PT_SMKE:
case PT_CO2: case PT_CO2:
if (!(rand()%250)) if (!(rand()%83))
{ {
sim->kill_part(r>>8); sim->kill_part(r>>8);
parts[i].life = rand()%60 + 60; parts[i].life = rand()%60 + 60;
} }
break; break;
case PT_WOOD: case PT_WOOD:
if (surround_space && !(rand()%20) && (abs(rx+ry)<=2) && (sim->VINE_MODE || parts[i].tmp==1)) if (surround_space && !(rand()%7) && (abs(rx+ry)<=2) && (sim->VINE_MODE || parts[i].tmp==1))
{ {
int nnx = rand()%3 -1; int nnx = rand()%3 -1;
int nny = rand()%3 -1; int nny = rand()%3 -1;

View File

@@ -52,14 +52,14 @@ int Element_PQRT::update(UPDATE_FUNC_ARGS)
int r, tmp, trade, rx, ry, np; int r, tmp, trade, rx, ry, np;
// absorb SLTW // absorb SLTW
if (parts[i].ctype!=-1) if (parts[i].ctype!=-1)
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
else if ((r&0xFF)==PT_SLTW && !(rand()%2500)) else if ((r&0xFF)==PT_SLTW && !(rand()%833))
{ {
sim->kill_part(r>>8); sim->kill_part(r>>8);
parts[i].ctype ++; parts[i].ctype ++;

View File

@@ -50,24 +50,24 @@ Element_SLTW::Element_SLTW()
int Element_SLTW::update(UPDATE_FUNC_ARGS) int Element_SLTW::update(UPDATE_FUNC_ARGS)
{ {
int r, rx, ry; int r, rx, ry;
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
switch (r&0xFF) switch (r&0xFF)
{ {
case PT_SALT: case PT_SALT:
if (!(rand()%10000)) if (!(rand()%3333))
sim->part_change_type(r>>8,x+rx,y+ry,PT_SLTW); sim->part_change_type(r>>8,x+rx,y+ry,PT_SLTW);
break; break;
case PT_PLNT: case PT_PLNT:
if (!(rand()%200)) if (!(rand()%66))
sim->kill_part(r>>8); sim->kill_part(r>>8);
break; break;
case PT_RBDM: case PT_RBDM:
case PT_LRBD: case PT_LRBD:
if ((sim->legacy_enable||parts[i].temp>(273.15f+12.0f)) && !(rand()%500)) if ((sim->legacy_enable||parts[i].temp>(273.15f+12.0f)) && !(rand()%166))
{ {
sim->part_change_type(i,x,y,PT_FIRE); sim->part_change_type(i,x,y,PT_FIRE);
parts[i].life = 4; parts[i].life = 4;

View File

@@ -54,14 +54,14 @@ int Element_SNOW::update(UPDATE_FUNC_ARGS)
{ {
parts[i].temp = restrict_flt(parts[i].temp-1.0f, MIN_TEMP, MAX_TEMP); parts[i].temp = restrict_flt(parts[i].temp-1.0f, MIN_TEMP, MAX_TEMP);
} }
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if (((r&0xFF)==PT_SALT || (r&0xFF)==PT_SLTW) && !(rand()%1000)) if (((r&0xFF)==PT_SALT || (r&0xFF)==PT_SLTW) && !(rand()%333))
{ {
sim->part_change_type(i,x,y,PT_SLTW); sim->part_change_type(i,x,y,PT_SLTW);
sim->part_change_type(r>>8,x+rx,y+ry,PT_SLTW); sim->part_change_type(r>>8,x+rx,y+ry,PT_SLTW);

View File

@@ -42,39 +42,8 @@ Element_THRM::Element_THRM()
HighTemperature = ITH; HighTemperature = ITH;
HighTemperatureTransition = NT; HighTemperatureTransition = NT;
Update = &Element_THRM::update; Update = NULL;
} }
//#TPT-Directive ElementHeader Element_THRM static int update(UPDATE_FUNC_ARGS)
int Element_THRM::update(UPDATE_FUNC_ARGS)
{
int r, rx, ry;
for (rx=-2; rx<3; rx++)
for (ry=-2; ry<3; ry++)
if (BOUNDS_CHECK && (rx || ry))
{
r = pmap[y+ry][x+rx];
if (!r)
continue;
if (((r&0xFF)==PT_FIRE || (r&0xFF)==PT_PLSM || (r&0xFF)==PT_LAVA)) // TODO: could this go in update_PYRO?
{
if (!(rand()%500)) {
sim->part_change_type(i,x,y,PT_LAVA);
parts[i].ctype = PT_BMTL;
parts[i].temp = 3500.0f;
sim->pv[y/CELL][x/CELL] += 50.0f;
} else {
sim->part_change_type(i,x,y,PT_LAVA);
parts[i].life = 400;
parts[i].ctype = PT_THRM;
parts[i].temp = 3500.0f;
parts[i].tmp = 20;
}
}
}
return 0;
}
Element_THRM::~Element_THRM() {} Element_THRM::~Element_THRM() {}

View File

@@ -131,8 +131,8 @@ int Element_VIBR::update(UPDATE_FUNC_ARGS) {
} }
} }
//Neighbor check loop //Neighbor check loop
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
@@ -141,7 +141,7 @@ int Element_VIBR::update(UPDATE_FUNC_ARGS) {
if (!r) if (!r)
continue; continue;
//Melts into EXOT //Melts into EXOT
if ((r&0xFF) == PT_EXOT && !(rand()%250) && !parts[i].life) if ((r&0xFF) == PT_EXOT && !(rand()%83) && !parts[i].life)
{ {
sim->create_part(i, x, y, PT_EXOT); sim->create_part(i, x, y, PT_EXOT);
} }

View File

@@ -50,21 +50,21 @@ Element_WATR::Element_WATR()
int Element_WATR::update(UPDATE_FUNC_ARGS) int Element_WATR::update(UPDATE_FUNC_ARGS)
{ {
int r, rx, ry; int r, rx, ry;
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if ((r&0xFF)==PT_SALT && !(rand()%250)) if ((r&0xFF)==PT_SALT && !(rand()%83))
{ {
sim->part_change_type(i,x,y,PT_SLTW); sim->part_change_type(i,x,y,PT_SLTW);
// on average, convert 3 WATR to SLTW before SALT turns into SLTW // on average, convert 3 WATR to SLTW before SALT turns into SLTW
if (!(rand()%3)) if (!(rand()%3))
sim->part_change_type(r>>8,x+rx,y+ry,PT_SLTW); sim->part_change_type(r>>8,x+rx,y+ry,PT_SLTW);
} }
else if (((r&0xFF)==PT_RBDM||(r&0xFF)==PT_LRBD) && (sim->legacy_enable||parts[i].temp>(273.15f+12.0f)) && !(rand()%500)) else if (((r&0xFF)==PT_RBDM||(r&0xFF)==PT_LRBD) && (sim->legacy_enable||parts[i].temp>(273.15f+12.0f)) && !(rand()%166))
{ {
sim->part_change_type(i,x,y,PT_FIRE); sim->part_change_type(i,x,y,PT_FIRE);
parts[i].life = 4; parts[i].life = 4;
@@ -72,7 +72,7 @@ int Element_WATR::update(UPDATE_FUNC_ARGS)
} }
else if ((r&0xFF)==PT_FIRE && parts[r>>8].ctype!=PT_WATR){ else if ((r&0xFF)==PT_FIRE && parts[r>>8].ctype!=PT_WATR){
sim->kill_part(r>>8); sim->kill_part(r>>8);
if(!(rand()%150)){ if(!(rand()%50)){
sim->kill_part(i); sim->kill_part(i);
return 1; return 1;
} }

View File

@@ -50,14 +50,14 @@ Element_WTRV::Element_WTRV()
int Element_WTRV::update(UPDATE_FUNC_ARGS) int Element_WTRV::update(UPDATE_FUNC_ARGS)
{ {
int r, rx, ry; int r, rx, ry;
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if (((r&0xFF)==PT_RBDM||(r&0xFF)==PT_LRBD) && !sim->legacy_enable && parts[i].temp>(273.15f+12.0f) && !(rand()%500)) if (((r&0xFF)==PT_RBDM||(r&0xFF)==PT_LRBD) && !sim->legacy_enable && parts[i].temp>(273.15f+12.0f) && !(rand()%166))
{ {
sim->part_change_type(i,x,y,PT_FIRE); sim->part_change_type(i,x,y,PT_FIRE);
parts[i].life = 4; parts[i].life = 4;

View File

@@ -50,14 +50,14 @@ Element_YEST::Element_YEST()
int Element_YEST::update(UPDATE_FUNC_ARGS) int Element_YEST::update(UPDATE_FUNC_ARGS)
{ {
int r, rx, ry; int r, rx, ry;
for (rx=-2; rx<3; rx++) for (rx=-1; rx<2; rx++)
for (ry=-2; ry<3; ry++) for (ry=-1; ry<2; ry++)
if (BOUNDS_CHECK && (rx || ry)) if (BOUNDS_CHECK && (rx || ry))
{ {
r = pmap[y+ry][x+rx]; r = pmap[y+ry][x+rx];
if (!r) if (!r)
continue; continue;
if ((r&0xFF)==PT_DYST && !(rand()%30) && !sim->legacy_enable) if ((r&0xFF)==PT_DYST && !(rand()%10) && !sim->legacy_enable)
{ {
sim->part_change_type(i,x,y,PT_DYST); sim->part_change_type(i,x,y,PT_DYST);
} }