More fixes to fix fixes and new fixes to fix stuff.
This commit is contained in:
parent
5873d69586
commit
0d70547cf0
@ -56,7 +56,14 @@ int Element_CO2::update(UPDATE_FUNC_ARGS)
|
||||
{
|
||||
r = pmap[y+ry][x+rx];
|
||||
if (!r)
|
||||
{
|
||||
if (parts[i].ctype==5 && !(rand()%83))
|
||||
{
|
||||
if (sim->create_part(-1, x+rx, y+ry, PT_WATR)>=0)
|
||||
parts[i].ctype = 0;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if ((r&0xFF)==PT_FIRE){
|
||||
sim->kill_part(r>>8);
|
||||
if(!(rand()%150)){
|
||||
@ -79,11 +86,6 @@ int Element_CO2::update(UPDATE_FUNC_ARGS)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (parts[i].ctype==5 && !(rand()%83))
|
||||
{
|
||||
if (sim->create_part(-1, x+rx, y+ry, PT_WATR)>=0)
|
||||
parts[i].ctype = 0;
|
||||
}
|
||||
if (parts[i].temp > 9773.15 && sim->pv[y/CELL][x/CELL] > 200.0f)
|
||||
{
|
||||
if (!(rand()%5))
|
||||
|
@ -68,17 +68,23 @@ int Element_DLAY::update(UPDATE_FUNC_ARGS)
|
||||
}
|
||||
else if ((r&0xFF)==PT_DLAY)
|
||||
{
|
||||
if(!parts[i].life && parts[r>>8].life)
|
||||
if (!parts[i].life)
|
||||
{
|
||||
parts[i].life = parts[r>>8].life;
|
||||
if((r>>8)>i) //If the other particle hasn't been life updated
|
||||
parts[i].life--;
|
||||
if (parts[r>>8].life)
|
||||
{
|
||||
parts[i].life = parts[r>>8].life;
|
||||
if((r>>8)>i) //If the other particle hasn't been life updated
|
||||
parts[i].life--;
|
||||
}
|
||||
}
|
||||
else if(parts[i].life && !parts[r>>8].life)
|
||||
else
|
||||
{
|
||||
parts[r>>8].life = parts[i].life;
|
||||
if((r>>8)>i) //If the other particle hasn't been life updated
|
||||
parts[r>>8].life++;
|
||||
if (!parts[r>>8].life)
|
||||
{
|
||||
parts[r>>8].life = parts[i].life;
|
||||
if((r>>8)>i) //If the other particle hasn't been life updated
|
||||
parts[r>>8].life++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if((r&0xFF)==PT_NSCN && oldl==1)
|
||||
|
@ -76,15 +76,11 @@ int Element_DMG::update(UPDATE_FUNC_ARGS)
|
||||
angle = atan2((float)nxj, nxi);
|
||||
fx = cos(angle) * 7.0f;
|
||||
fy = sin(angle) * 7.0f;
|
||||
|
||||
parts[rr>>8].vx += fx;
|
||||
parts[rr>>8].vy += fy;
|
||||
|
||||
sim->vx[(y+nxj)/CELL][(x+nxi)/CELL] += fx;
|
||||
sim->vy[(y+nxj)/CELL][(x+nxi)/CELL] += fy;
|
||||
|
||||
sim->pv[(y+nxj)/CELL][(x+nxi)/CELL] += 1.0f;
|
||||
|
||||
t = rr&0xFF;
|
||||
if(t && sim->elements[t].HighPressureTransition>-1 && sim->elements[t].HighPressureTransition<PT_NUM)
|
||||
sim->part_change_type(rr>>8, x+nxi, y+nxj, sim->elements[t].HighPressureTransition);
|
||||
|
@ -55,35 +55,46 @@ int Element_DSTW::update(UPDATE_FUNC_ARGS)
|
||||
if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry))
|
||||
{
|
||||
r = pmap[y+ry][x+rx];
|
||||
if (!r)
|
||||
continue;
|
||||
rt = r&0xFF;
|
||||
if (rt==PT_SALT && !(rand()%250))
|
||||
switch (r&0xFF)
|
||||
{
|
||||
sim->part_change_type(i,x,y,PT_SLTW);
|
||||
// on average, convert 3 DSTW to SLTW before SALT turns into SLTW
|
||||
if (!(rand()%3))
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_SLTW);
|
||||
}
|
||||
if ((rt==PT_WATR||rt==PT_SLTW) && !(rand()%500))
|
||||
{
|
||||
sim->part_change_type(i,x,y,PT_WATR);
|
||||
}
|
||||
if (rt==PT_SLTW && !(rand()%10000))
|
||||
{
|
||||
sim->part_change_type(i,x,y,PT_SLTW);
|
||||
}
|
||||
if ((rt==PT_RBDM||rt==PT_LRBD) && (sim->legacy_enable||parts[i].temp>12.0f) && !(rand()%500))
|
||||
{
|
||||
sim->part_change_type(i,x,y,PT_FIRE);
|
||||
parts[i].life = 4;
|
||||
}
|
||||
if (rt==PT_FIRE){
|
||||
case PT_SALT:
|
||||
if (!(rand()%250))
|
||||
{
|
||||
sim->part_change_type(i,x,y,PT_SLTW);
|
||||
// on average, convert 3 DSTW to SLTW before SALT turns into SLTW
|
||||
if (!(rand()%3))
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_SLTW);
|
||||
}
|
||||
break;
|
||||
case PT_SLTW:
|
||||
if (!(rand()%10000))
|
||||
{
|
||||
sim->part_change_type(i,x,y,PT_SLTW);
|
||||
break;
|
||||
}
|
||||
case PT_WATR:
|
||||
if (!(rand()%500))
|
||||
{
|
||||
sim->part_change_type(i,x,y,PT_WATR);
|
||||
}
|
||||
break;
|
||||
case PT_RBDM:
|
||||
case PT_LRBD:
|
||||
if ((sim->legacy_enable||parts[i].temp>12.0f) && !(rand()%500))
|
||||
{
|
||||
sim->part_change_type(i,x,y,PT_FIRE);
|
||||
parts[i].life = 4;
|
||||
}
|
||||
break;
|
||||
case PT_FIRE:
|
||||
sim->kill_part(r>>8);
|
||||
if(!(rand()%150)){
|
||||
sim->kill_part(i);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
@ -66,12 +66,11 @@ int Element_ELEC::update(UPDATE_FUNC_ARGS)
|
||||
if (!r)
|
||||
continue;
|
||||
rt = r&0xFF;
|
||||
if (rt==PT_GLAS)
|
||||
switch (rt)
|
||||
{
|
||||
case PT_GLAS:
|
||||
for (rrx=-1; rrx<=1; rrx++)
|
||||
{
|
||||
for (rry=-1; rry<=1; rry++)
|
||||
{
|
||||
if (x+rx+rrx>=0 && y+ry+rry>=0 && x+rx+rrx<XRES && y+ry+rry<YRES) {
|
||||
nb = sim->create_part(-1, x+rx+rrx, y+ry+rry, PT_EMBR);
|
||||
if (nb!=-1) {
|
||||
@ -82,56 +81,43 @@ int Element_ELEC::update(UPDATE_FUNC_ARGS)
|
||||
parts[nb].vy = rand()%20-10;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//fire_r[y/CELL][x/CELL] += rand()%200; //D: Doesn't work with OpenGL, also shouldn't be here
|
||||
//fire_g[y/CELL][x/CELL] += rand()%200;
|
||||
//fire_b[y/CELL][x/CELL] += rand()%200;
|
||||
/* possible alternative, but doesn't work well at the moment because FIRE_ADD divides firea by 8, so the glow isn't strong enough
|
||||
create_part(i, x, y, PT_EMBR);
|
||||
parts[i].tmp = 2;
|
||||
parts[i].life = 2;
|
||||
parts[i].ctype = ((rand()%200)<<16) | ((rand()%200)<<8) | (rand()%200);
|
||||
*/
|
||||
sim->kill_part(i);
|
||||
return 1;
|
||||
}
|
||||
if (rt==PT_LCRY)
|
||||
{
|
||||
case PT_LCRY:
|
||||
parts[r>>8].tmp2 = 5+rand()%5;
|
||||
}
|
||||
if (rt==PT_WATR || rt==PT_DSTW || rt==PT_SLTW || rt==PT_CBNW)
|
||||
{
|
||||
break;
|
||||
case PT_WATR:
|
||||
case PT_DSTW:
|
||||
case PT_SLTW:
|
||||
case PT_CBNW:
|
||||
if(!(rand()%3))
|
||||
sim->create_part(r>>8, x+rx, y+ry, PT_O2);
|
||||
else
|
||||
sim->create_part(r>>8, x+rx, y+ry, PT_H2);
|
||||
return 1;
|
||||
}
|
||||
if (rt==PT_NEUT)
|
||||
{
|
||||
case PT_NEUT:
|
||||
sim->part_change_type(r>>8, x+rx, y+ry, PT_H2);
|
||||
parts[r>>8].life = 0;
|
||||
parts[r>>8].ctype = 0;
|
||||
}
|
||||
if (rt==PT_DEUT)
|
||||
{
|
||||
break;
|
||||
case PT_DEUT:
|
||||
if(parts[r>>8].life < 6000)
|
||||
parts[r>>8].life += 1;
|
||||
parts[r>>8].temp = 0;
|
||||
sim->kill_part(i);
|
||||
return 1;
|
||||
}
|
||||
if (rt==PT_EXOT)
|
||||
{
|
||||
case PT_EXOT:
|
||||
parts[r>>8].tmp2 += 5;
|
||||
parts[r>>8].life = 1000;
|
||||
}
|
||||
if ((sim->elements[rt].Properties & PROP_CONDUCTS) && (rt!=PT_NBLE||parts[i].temp<2273.15))
|
||||
{
|
||||
sim->create_part(-1, x+rx, y+ry, PT_SPRK);
|
||||
sim->kill_part(i);
|
||||
return 1;
|
||||
break;
|
||||
default:
|
||||
if ((sim->elements[rt].Properties & PROP_CONDUCTS) && (rt!=PT_NBLE||parts[i].temp<2273.15))
|
||||
{
|
||||
sim->create_part(-1, x+rx, y+ry, PT_SPRK);
|
||||
sim->kill_part(i);
|
||||
return 1;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
@ -48,8 +48,8 @@ Element_EMP::Element_EMP()
|
||||
|
||||
//#TPT-Directive ElementHeader Element_EMP static int update(UPDATE_FUNC_ARGS)
|
||||
int Element_EMP::update(UPDATE_FUNC_ARGS)
|
||||
{
|
||||
int r,rx,ry,t,n,nx,ny;
|
||||
{
|
||||
int r,rx,ry,t,n,nx,ny,ntype;
|
||||
if (parts[i].life)
|
||||
return 0;
|
||||
for (rx=-2; rx<3; rx++)
|
||||
@ -76,18 +76,17 @@ int Element_EMP::update(UPDATE_FUNC_ARGS)
|
||||
if (t==PT_SPRK || (t==PT_SWCH && parts[r].life!=0 && parts[r].life!=10) || (t==PT_WIRE && parts[r].ctype>0))
|
||||
{
|
||||
int is_elec=0;
|
||||
if ((parts[r].ctype==PT_PSCN || parts[r].ctype==PT_NSCN || parts[r].ctype==PT_PTCT ||
|
||||
parts[r].ctype==PT_NTCT || parts[r].ctype==PT_INST || parts[r].ctype==PT_SWCH) || t==PT_WIRE || t==PT_SWCH)
|
||||
if (parts[r].ctype==PT_PSCN || parts[r].ctype==PT_NSCN || parts[r].ctype==PT_PTCT ||
|
||||
parts[r].ctype==PT_NTCT || parts[r].ctype==PT_INST || parts[r].ctype==PT_SWCH || t==PT_WIRE || t==PT_SWCH)
|
||||
{
|
||||
is_elec=1;
|
||||
if (sim->elements[parts[r].type].HeatConduct && !(rand()%100))
|
||||
if (!(rand()%100))
|
||||
parts[r].temp = restrict_flt(parts[r].temp+3000.0f, MIN_TEMP, MAX_TEMP);
|
||||
if (!(rand()%80))
|
||||
sim->part_change_type(r, rx, ry, PT_BREC);
|
||||
else if (!(rand()%120))
|
||||
sim->part_change_type(r, rx, ry, PT_NTCT);
|
||||
}
|
||||
|
||||
for (nx=-2; nx<3; nx++)
|
||||
for (ny=-2; ny<3; ny++)
|
||||
if (rx+nx>=0 && ry+ny>=0 && rx+nx<XRES && ry+ny<YRES && (rx || ry))
|
||||
@ -95,52 +94,68 @@ int Element_EMP::update(UPDATE_FUNC_ARGS)
|
||||
n = pmap[ry+ny][rx+nx];
|
||||
if (!n)
|
||||
continue;
|
||||
nt = n&0xFF;
|
||||
ntype = n&0xFF;
|
||||
//Some elements should only be affected by wire/swch, or by a spark on inst/semiconductor
|
||||
//So not affected by spark on metl, watr etc
|
||||
if (is_elec)
|
||||
{
|
||||
if ((nt==PT_METL || nt==PT_BMTL) && !(rand()%280))
|
||||
switch (ntype)
|
||||
{
|
||||
parts[n>>8].temp = restrict_flt(parts[n>>8].temp+3000.0f, MIN_TEMP, MAX_TEMP);
|
||||
case PT_METL:
|
||||
if (!(rand()%280))
|
||||
parts[n>>8].temp = restrict_flt(parts[n>>8].temp+3000.0f, MIN_TEMP, MAX_TEMP);
|
||||
if (!(rand()%300))
|
||||
sim->part_change_type(n>>8, rx+nx, ry+ny, PT_BMTL);
|
||||
continue;
|
||||
case PT_BMTL:
|
||||
if (!(rand()%280))
|
||||
parts[n>>8].temp = restrict_flt(parts[n>>8].temp+3000.0f, MIN_TEMP, MAX_TEMP);
|
||||
if (!(rand()%160))
|
||||
{
|
||||
sim->part_change_type(n>>8, rx+nx, ry+ny, PT_BRMT);
|
||||
parts[n>>8].temp = restrict_flt(parts[n>>8].temp+1000.0f, MIN_TEMP, MAX_TEMP);
|
||||
}
|
||||
continue;
|
||||
case PT_WIFI:
|
||||
if (!(rand()%8))
|
||||
{
|
||||
//Randomise channel
|
||||
parts[n>>8].temp = rand()%MAX_TEMP;
|
||||
}
|
||||
if (!(rand()%16))
|
||||
{
|
||||
sim->create_part(n>>8, rx+nx, ry+ny, PT_BREC);
|
||||
parts[n>>8].temp = restrict_flt(parts[n>>8].temp+1000.0f, MIN_TEMP, MAX_TEMP);
|
||||
}
|
||||
continue;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (nt==PT_BMTL && !(rand()%160))
|
||||
{
|
||||
sim->part_change_type(n>>8, rx+nx, ry+ny, PT_BRMT);
|
||||
parts[n>>8].temp = restrict_flt(parts[n>>8].temp+1000.0f, MIN_TEMP, MAX_TEMP);
|
||||
}
|
||||
if (nt==PT_METL && !(rand()%300))
|
||||
{
|
||||
sim->part_change_type(n>>8, rx+nx, ry+ny, PT_BMTL);
|
||||
}
|
||||
if (nt==PT_WIFI && !(rand()%8))
|
||||
{
|
||||
//Randomise channel
|
||||
parts[n>>8].temp = rand()%MAX_TEMP;
|
||||
}
|
||||
if (nt==PT_WIFI && !(rand()%16))
|
||||
}
|
||||
switch (ntype)
|
||||
{
|
||||
case PT_SWCH:
|
||||
if (!(rand()%100))
|
||||
sim->part_change_type(n>>8, rx+nx, ry+ny, PT_BREC);
|
||||
if (!(rand()%100))
|
||||
parts[n>>8].temp = restrict_flt(parts[n>>8].temp+2000.0f, MIN_TEMP, MAX_TEMP);
|
||||
break;
|
||||
case PT_ARAY:
|
||||
if (!(rand()%60))
|
||||
{
|
||||
sim->create_part(n>>8, rx+nx, ry+ny, PT_BREC);
|
||||
parts[n>>8].temp = restrict_flt(parts[n>>8].temp+1000.0f, MIN_TEMP, MAX_TEMP);
|
||||
}
|
||||
}
|
||||
if (nt==PT_SWCH && !(rand()%100))
|
||||
{
|
||||
sim->part_change_type(n>>8, rx+nx, ry+ny, PT_BREC);
|
||||
}
|
||||
if (nt==PT_SWCH && !(rand()%100))
|
||||
{
|
||||
parts[n>>8].temp = restrict_flt(parts[n>>8].temp+2000.0f, MIN_TEMP, MAX_TEMP);
|
||||
}
|
||||
if (nt==PT_ARAY && !(rand()%60))
|
||||
{
|
||||
sim->create_part(n>>8, rx+nx, ry+ny, PT_BREC);
|
||||
parts[n>>8].temp = restrict_flt(parts[n>>8].temp+1000.0f, MIN_TEMP, MAX_TEMP);
|
||||
}
|
||||
if (nt==PT_DLAY && !(rand()%70))
|
||||
{
|
||||
//Randomise delay
|
||||
parts[n>>8].temp = (rand()%256) + 273.15f;
|
||||
break;
|
||||
case PT_DLAY:
|
||||
if (!(rand()%70))
|
||||
{
|
||||
//Randomise delay
|
||||
parts[n>>8].temp = (rand()%256) + 273.15f;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -63,8 +63,11 @@ int Element_EXOT::update(UPDATE_FUNC_ARGS) {
|
||||
parts[i].tmp2 += 100;
|
||||
}
|
||||
}
|
||||
else if (rt == PT_EXOT && parts[r>>8].life == 1500 && !(rand()%1000))
|
||||
parts[i].life = 1500;
|
||||
else if (rt == PT_EXOT)
|
||||
{
|
||||
if (parts[r>>8].life == 1500 && !(rand()%1000))
|
||||
parts[i].life = 1500;
|
||||
}
|
||||
else if (rt == PT_LAVA)
|
||||
{
|
||||
if (parts[r>>8].ctype == PT_TTAN && !(rand()%10))
|
||||
|
@ -50,31 +50,40 @@ Element_FIRE::Element_FIRE()
|
||||
int Element_FIRE::update(UPDATE_FUNC_ARGS)
|
||||
{
|
||||
int r, rx, ry, rt, t = parts[i].type;
|
||||
if (t==PT_PLSM && parts[i].ctype == PT_NBLE && parts[i].life <=1)
|
||||
switch (t)
|
||||
{
|
||||
sim->part_change_type(i,x,y,PT_NBLE);
|
||||
parts[i].life = 0;
|
||||
}
|
||||
else if (t==PT_FIRE && parts[i].life <=1)
|
||||
{
|
||||
if ((parts[i].tmp&0x3) == 3){
|
||||
sim->part_change_type(i,x,y,PT_DSTW);
|
||||
parts[i].life = 0;
|
||||
parts[i].ctype = PT_FIRE;
|
||||
}
|
||||
else if (parts[i].temp<625)
|
||||
case PT_PLSM:
|
||||
if (parts[i].life <=1)
|
||||
{
|
||||
sim->part_change_type(i,x,y,PT_SMKE);
|
||||
parts[i].life = rand()%20+250;
|
||||
if (parts[i].ctype == PT_NBLE)
|
||||
{
|
||||
sim->part_change_type(i,x,y,PT_NBLE);
|
||||
parts[i].life = 0;
|
||||
}
|
||||
else if ((parts[i].tmp&0x3) == 3){
|
||||
sim->part_change_type(i,x,y,PT_DSTW);
|
||||
parts[i].life = 0;
|
||||
parts[i].ctype = PT_FIRE;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (t==PT_PLSM && parts[i].life <=1)
|
||||
{
|
||||
if ((parts[i].tmp&0x3) == 3){
|
||||
sim->part_change_type(i,x,y,PT_DSTW);
|
||||
parts[i].life = 0;
|
||||
parts[i].ctype = PT_FIRE;
|
||||
break;
|
||||
case PT_FIRE:
|
||||
if (parts[i].life <=1)
|
||||
{
|
||||
if ((parts[i].tmp&0x3) == 3){
|
||||
sim->part_change_type(i,x,y,PT_DSTW);
|
||||
parts[i].life = 0;
|
||||
parts[i].ctype = PT_FIRE;
|
||||
}
|
||||
else if (parts[i].temp<625)
|
||||
{
|
||||
sim->part_change_type(i,x,y,PT_SMKE);
|
||||
parts[i].life = rand()%20+250;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
for (rx=-2; rx<3; rx++)
|
||||
for (ry=-2; ry<3; ry++)
|
||||
|
@ -49,7 +49,7 @@ Element_FRAY::Element_FRAY()
|
||||
//#TPT-Directive ElementHeader Element_FRAY static int update(UPDATE_FUNC_ARGS)
|
||||
int Element_FRAY::update(UPDATE_FUNC_ARGS)
|
||||
{
|
||||
int r, nxx, nyy, docontinue, len, nxi, nyi, rx, ry, nr, ry1, rx1;
|
||||
int r, nxx, nyy, len, nxi, nyi, rx, ry;
|
||||
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))
|
||||
@ -58,14 +58,13 @@ int Element_FRAY::update(UPDATE_FUNC_ARGS)
|
||||
if (!r)
|
||||
continue;
|
||||
if ((r&0xFF)==PT_SPRK) {
|
||||
for (docontinue = 1, nxx = 0, nyy = 0, nxi = rx*-1, nyi = ry*-1, len = 0; docontinue; nyy+=nyi, nxx+=nxi, len++) {
|
||||
for (nxx = 0, nyy = 0, nxi = rx*-1, nyi = ry*-1, len = 0; ; nyy+=nyi, nxx+=nxi, len++) {
|
||||
if (!(x+nxi+nxx<XRES && y+nyi+nyy<YRES && x+nxi+nxx >= 0 && y+nyi+nyy >= 0) || len>10) {
|
||||
break;
|
||||
}
|
||||
r = pmap[y+nyi+nyy][x+nxi+nxx];
|
||||
if (!r)
|
||||
r = sim->photons[y+nyi+nyy][x+nxi+nxx];
|
||||
|
||||
if (r && !(sim->elements[r&0xFF].Properties & TYPE_SOLID)){
|
||||
parts[r>>8].vx += nxi*((parts[i].temp-273.15)/10.0f);
|
||||
parts[r>>8].vy += nyi*((parts[i].temp-273.15)/10.0f);
|
||||
@ -77,4 +76,4 @@ int Element_FRAY::update(UPDATE_FUNC_ARGS)
|
||||
}
|
||||
|
||||
|
||||
Element_FRAY::~Element_FRAY() {}
|
||||
Element_FRAY::~Element_FRAY() {}
|
||||
|
@ -64,7 +64,6 @@ int Element_FRZZ::update(UPDATE_FUNC_ARGS)
|
||||
sim->kill_part(i);
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -55,7 +55,8 @@ int Element_FUSE::update(UPDATE_FUNC_ARGS)
|
||||
if (r>-1)
|
||||
parts[r].life = 50;
|
||||
return 1;
|
||||
} else if (parts[i].life < 40) {
|
||||
}
|
||||
else if (parts[i].life < 40) {
|
||||
parts[i].life--;
|
||||
if (!(rand()%100)) {
|
||||
r = sim->create_part(-1, x+rand()%3-1, y+rand()%3-1, PT_PLSM);
|
||||
|
@ -65,66 +65,80 @@ int Element_GEL::update(UPDATE_FUNC_ARGS)
|
||||
continue;
|
||||
rt = r&0xFF;
|
||||
//Desaturation
|
||||
if ((rt==PT_WATR || rt==PT_DSTW || rt==PT_FRZW) && parts[i].tmp<100 && 500>rand()%absorbChanceDenom)
|
||||
switch (rt)
|
||||
{
|
||||
parts[i].tmp++;
|
||||
sim->kill_part(r>>8);
|
||||
}
|
||||
else if ((rt==PT_PSTE) && parts[i].tmp<100 && 20>rand()%absorbChanceDenom)
|
||||
{
|
||||
parts[i].tmp++;
|
||||
sim->create_part(r>>8, x+rx, y+ry, PT_CLST);
|
||||
}
|
||||
else if ((rt==PT_SLTW) && parts[i].tmp<100 && 50>rand()%absorbChanceDenom)
|
||||
{
|
||||
parts[i].tmp++;
|
||||
if (rand()%4)
|
||||
case PT_WATR:
|
||||
case PT_DSTW:
|
||||
case PT_FRZW:
|
||||
if (parts[i].tmp<100 && 500>rand()%absorbChanceDenom)
|
||||
{
|
||||
parts[i].tmp++;
|
||||
sim->kill_part(r>>8);
|
||||
else
|
||||
sim->part_change_type(r>>8, x+rx, y+ry, PT_SALT);
|
||||
}
|
||||
else if ((rt==PT_CBNW) && parts[i].tmp<100 && 100>rand()%absorbChanceDenom)
|
||||
{
|
||||
parts[i].tmp++;
|
||||
sim->part_change_type(r>>8, x+rx, y+ry, PT_CO2);
|
||||
}
|
||||
|
||||
else if (rt==PT_SPNG && parts[i].tmp<100 && ((parts[r>>8].life+1)>parts[i].tmp))
|
||||
{
|
||||
parts[r>>8].life--;
|
||||
parts[i].tmp++;
|
||||
}
|
||||
//Concentration diffusion
|
||||
if (rt==PT_GEL && (parts[r>>8].tmp+1)<parts[i].tmp)
|
||||
{
|
||||
parts[r>>8].tmp++;
|
||||
parts[i].tmp--;
|
||||
}
|
||||
break;
|
||||
case PT_PSTE:
|
||||
if (parts[i].tmp<100 && 20>rand()%absorbChanceDenom)
|
||||
{
|
||||
parts[i].tmp++;
|
||||
sim->create_part(r>>8, x+rx, y+ry, PT_CLST);
|
||||
}
|
||||
break;
|
||||
case PT_SLTW:
|
||||
if (parts[i].tmp<100 && 50>rand()%absorbChanceDenom)
|
||||
{
|
||||
parts[i].tmp++;
|
||||
if (rand()%4)
|
||||
sim->kill_part(r>>8);
|
||||
else
|
||||
sim->part_change_type(r>>8, x+rx, y+ry, PT_SALT);
|
||||
}
|
||||
break;
|
||||
case PT_CBNW:
|
||||
if (parts[i].tmp<100 && 100>rand()%absorbChanceDenom)
|
||||
{
|
||||
parts[i].tmp++;
|
||||
sim->part_change_type(r>>8, x+rx, y+ry, PT_CO2);
|
||||
}
|
||||
break;
|
||||
case PT_SPNG:
|
||||
if (parts[i].tmp<100 && ((parts[r>>8].life+1)>parts[i].tmp))
|
||||
{
|
||||
parts[r>>8].life--;
|
||||
parts[i].tmp++;
|
||||
}
|
||||
else if ((parts[r>>8].life+1)<parts[i].tmp)//Concentration diffusion
|
||||
{
|
||||
parts[r>>8].life++;
|
||||
parts[i].tmp--;
|
||||
}
|
||||
break;
|
||||
case PT_GEL:
|
||||
if ((parts[r>>8].tmp+1)<parts[i].tmp)
|
||||
{
|
||||
parts[r>>8].tmp++;
|
||||
parts[i].tmp--;
|
||||
}
|
||||
gel = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
else if (rt==PT_SPNG && (parts[r>>8].life+1)<parts[i].tmp)
|
||||
{
|
||||
parts[r>>8].life++;
|
||||
parts[i].tmp--;
|
||||
}
|
||||
|
||||
float dx, dy;
|
||||
dx = parts[i].x - parts[r>>8].x;
|
||||
dy = parts[i].y - parts[r>>8].y;
|
||||
|
||||
//Stickness
|
||||
if ((dx*dx + dy*dy)>1.5 && (gel || !sim->elements[r&0xFF].Falldown || (fabs((float)rx)<2 && fabs((float)ry)<2)))
|
||||
if ((dx*dx + dy*dy)>1.5 && (gel || !sim->elements[rt].Falldown || (fabs((float)rx)<2 && fabs((float)ry)<2)))
|
||||
{
|
||||
float per, nd;
|
||||
nd = dx*dx + dy*dy - 0.5;
|
||||
|
||||
per = 5*(1 - parts[i].tmp/100)*(nd/(dx*dx + dy*dy + nd) - 0.5);
|
||||
if (sim->elements[r&0xFF].State==ST_LIQUID)
|
||||
if (sim->elements[rt].State==ST_LIQUID)
|
||||
per *= 0.1;
|
||||
|
||||
dx *= per; dy *= per;
|
||||
parts[i].vx += dx;
|
||||
parts[i].vy += dy;
|
||||
if ((sim->elements[r&0xFF].Properties&TYPE_PART) || rt==PT_GOO)
|
||||
if ((sim->elements[rt].Properties&TYPE_PART) || rt==PT_GOO)
|
||||
{
|
||||
parts[r>>8].vx -= dx;
|
||||
parts[r>>8].vy -= dy;
|
||||
|
@ -55,15 +55,14 @@ int Element_H2::update(UPDATE_FUNC_ARGS)
|
||||
if (x+rx>=0 && y+ry>=0 && x+rx<XRES && y+ry<YRES && (rx || ry))
|
||||
{
|
||||
r = pmap[y+ry][x+rx];
|
||||
rt = (r&0xFF);
|
||||
if (!r)
|
||||
continue;
|
||||
rt = (r&0xFF);
|
||||
if (sim->pv[y/CELL][x/CELL] > 8.0f && rt == PT_DESL) // This will not work. DESL turns to fire above 5.0 pressure
|
||||
{
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_WATR);
|
||||
sim->part_change_type(i,x,y,PT_OIL);
|
||||
}
|
||||
|
||||
if (sim->pv[y/CELL][x/CELL] > 45.0f)
|
||||
{
|
||||
if (parts[r>>8].temp > 2273.15)
|
||||
@ -73,18 +72,19 @@ int Element_H2::update(UPDATE_FUNC_ARGS)
|
||||
{
|
||||
if (rt==PT_FIRE)
|
||||
{
|
||||
parts[r>>8].temp=2473.15;
|
||||
if(parts[r>>8].tmp&0x02)
|
||||
parts[r>>8].temp=3473;
|
||||
parts[r>>8].temp=3473.0f;
|
||||
else
|
||||
parts[r>>8].temp=2473.15f;
|
||||
parts[r>>8].tmp |= 1;
|
||||
sim->create_part(i,x,y,PT_FIRE);
|
||||
parts[i].temp+=(rand()/(RAND_MAX/100));
|
||||
parts[i].temp+=(rand()%100);
|
||||
parts[i].tmp |= 1;
|
||||
}
|
||||
else if ((rt==PT_PLSM && !(parts[r>>8].tmp&4)) || (rt==PT_LAVA && parts[r>>8].ctype != PT_BMTL))
|
||||
{
|
||||
sim->create_part(i,x,y,PT_FIRE);
|
||||
parts[i].temp+=(rand()/(RAND_MAX/100));
|
||||
parts[i].temp+=(rand()%100);
|
||||
parts[i].tmp |= 1;
|
||||
}
|
||||
}
|
||||
@ -112,14 +112,12 @@ int Element_H2::update(UPDATE_FUNC_ARGS)
|
||||
parts[j].ctype = 0x7C0000;
|
||||
parts[j].temp = temp;
|
||||
}
|
||||
|
||||
j = sim->create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_PLSM);
|
||||
if (j>-1)
|
||||
{
|
||||
parts[j].temp = temp;
|
||||
parts[j].tmp |= 4;
|
||||
}
|
||||
|
||||
parts[i].temp = temp+750+rand()%500;
|
||||
sim->pv[y/CELL][x/CELL] += 30;
|
||||
}
|
||||
|
@ -61,16 +61,18 @@ int Element_ICEI::update(UPDATE_FUNC_ARGS)
|
||||
r = pmap[y+ry][x+rx];
|
||||
if (!r)
|
||||
continue;
|
||||
if (((r&0xFF)==PT_SALT || (r&0xFF)==PT_SLTW) && parts[i].temp > sim->elements[PT_SLTW].LowTemperature && !(rand()%1000))
|
||||
if ((r&0xFF)==PT_SALT || (r&0xFF)==PT_SLTW)
|
||||
{
|
||||
sim->part_change_type(i,x,y,PT_SLTW);
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_SLTW);
|
||||
goto done;
|
||||
if (parts[i].temp > sim->elements[PT_SLTW].LowTemperature && !(rand()%1000))
|
||||
{
|
||||
sim->part_change_type(i,x,y,PT_SLTW);
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_SLTW);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if (((r&0xFF)==PT_FRZZ) && (parts[i].ctype=PT_FRZW) && !(rand()%1000))
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_ICEI);
|
||||
}
|
||||
done:
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -76,7 +76,7 @@ int Element_IGNT::update(UPDATE_FUNC_ARGS)
|
||||
parts[nb].life = 30;
|
||||
parts[nb].vx = rand()%20-10;
|
||||
parts[nb].vy = rand()%20-10;
|
||||
parts[nb].temp = restrict_flt(400.0f+parts[i].temp-273.15, MIN_TEMP, MAX_TEMP);
|
||||
parts[nb].temp = restrict_flt(parts[i].temp-273.15f+400.0f, MIN_TEMP, MAX_TEMP);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -48,28 +48,40 @@ Element_IRON::Element_IRON()
|
||||
|
||||
//#TPT-Directive ElementHeader Element_IRON static int update(UPDATE_FUNC_ARGS)
|
||||
int Element_IRON::update(UPDATE_FUNC_ARGS)
|
||||
{
|
||||
int r, rx, ry, rt;
|
||||
{
|
||||
int r, rx, ry, rt;
|
||||
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))
|
||||
{
|
||||
r = pmap[y+ry][x+rx];
|
||||
if (!r)
|
||||
continue;
|
||||
rt = r&0xFF;
|
||||
if ((!(parts[i].life)) &&
|
||||
((rt == PT_SALT && !(rand()%47)) ||
|
||||
(rt == PT_SLTW && !(rand()%67)) ||
|
||||
(rt == PT_WATR && !(rand()%1200)) ||
|
||||
(rt == PT_O2 && !(rand()%250)) ||
|
||||
(rt == PT_LO2))
|
||||
)
|
||||
switch (r&0xFF)
|
||||
{
|
||||
sim->part_change_type(i,x,y,PT_BMTL);
|
||||
parts[i].tmp=(rand()/(RAND_MAX/10))+20;
|
||||
case PT_SALT:
|
||||
if (!(parts[i].life) && !(rand()%47))
|
||||
goto succ;
|
||||
break;
|
||||
case PT_SLTW:
|
||||
if (!(parts[i].life) && !(rand()%67))
|
||||
goto succ;
|
||||
break;
|
||||
case PT_WATR:
|
||||
if (!(parts[i].life) && !(rand()%1200))
|
||||
goto succ;
|
||||
break;
|
||||
case PT_O2:
|
||||
if (!(parts[i].life) && !(rand()%250))
|
||||
goto succ;
|
||||
break;
|
||||
case PT_LO2:
|
||||
goto succ;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
succ:
|
||||
sim->part_change_type(i,x,y,PT_BMTL);
|
||||
parts[i].tmp=(rand()%10)+20;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -53,13 +53,7 @@ int Element_LCRY::update(UPDATE_FUNC_ARGS)
|
||||
int r, rx, ry, check, setto;
|
||||
switch (parts[i].tmp)
|
||||
{
|
||||
case 0:
|
||||
check=3;
|
||||
setto=1;
|
||||
break;
|
||||
case 1:
|
||||
check=3;
|
||||
setto=1;
|
||||
if(parts[i].life<=0)
|
||||
parts[i].tmp = 0;
|
||||
else
|
||||
@ -69,14 +63,11 @@ int Element_LCRY::update(UPDATE_FUNC_ARGS)
|
||||
parts[i].life = 0;
|
||||
parts[i].tmp2 = parts[i].life;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
check=0;
|
||||
setto=2;
|
||||
case 0:
|
||||
check=3;
|
||||
setto=1;
|
||||
break;
|
||||
case 2:
|
||||
check=0;
|
||||
setto=2;
|
||||
if(parts[i].life>=10)
|
||||
parts[i].tmp = 3;
|
||||
else
|
||||
@ -86,8 +77,10 @@ int Element_LCRY::update(UPDATE_FUNC_ARGS)
|
||||
parts[i].life = 10;
|
||||
parts[i].tmp2 = parts[i].life;
|
||||
}
|
||||
case 3:
|
||||
check=0;
|
||||
setto=2;
|
||||
break;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
@ -99,43 +99,49 @@ int Element_LIGH::update(UPDATE_FUNC_ARGS)
|
||||
if (sim->elements[rt].Explosive)
|
||||
sim->pv[y/CELL][x/CELL] += 0.25f * CFDS;
|
||||
}
|
||||
if (rt!=PT_LIGH && rt!=PT_TESC)
|
||||
switch (rt)
|
||||
{
|
||||
if (rt!=PT_CLNE&&rt!=PT_THDR&&rt!=PT_DMND&&rt!=PT_FIRE)
|
||||
case PT_LIGH:
|
||||
case PT_TESC:
|
||||
continue;
|
||||
case PT_CLNE:
|
||||
case PT_THDR:
|
||||
case PT_DMND:
|
||||
case PT_FIRE:
|
||||
parts[r>>8].temp = restrict_flt(parts[r>>8].temp+powderful/10, MIN_TEMP, MAX_TEMP);
|
||||
continue;
|
||||
case PT_DEUT:
|
||||
case PT_PLUT:
|
||||
parts[r>>8].temp = restrict_flt(parts[r>>8].temp+powderful, MIN_TEMP, MAX_TEMP);
|
||||
sim->pv[y/CELL][x/CELL] +=powderful/35;
|
||||
if (!(rand()%3))
|
||||
{
|
||||
if ((sim->elements[r&0xFF].Properties&PROP_CONDUCTS) && parts[r>>8].life==0)
|
||||
{
|
||||
sim->create_part(r>>8,x+rx,y+ry,PT_SPRK);
|
||||
}
|
||||
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);
|
||||
sim->pv[y/CELL][x/CELL] +=powderful/35;
|
||||
if (!(rand()%3))
|
||||
{
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_NEUT);
|
||||
parts[r>>8].life = rand()%480+480;
|
||||
parts[r>>8].vx=rand()%10-5;
|
||||
parts[r>>8].vy=rand()%10-5;
|
||||
}
|
||||
}
|
||||
else if (rt==PT_COAL || rt==PT_BCOL) // ignite coal
|
||||
{
|
||||
if (parts[r>>8].life>100) {
|
||||
parts[r>>8].life = 99;
|
||||
}
|
||||
}
|
||||
else if ((rt==PT_STKM && sim->player.elem!=PT_LIGH) || (rt==PT_STKM2 && sim->player2.elem!=PT_LIGH))
|
||||
{
|
||||
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);
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_NEUT);
|
||||
parts[r>>8].life = rand()%480+480;
|
||||
parts[r>>8].vx=rand()%10-5;
|
||||
parts[r>>8].vy=rand()%10-5;
|
||||
}
|
||||
else
|
||||
parts[r>>8].temp = restrict_flt(parts[r>>8].temp+powderful/10, MIN_TEMP, MAX_TEMP);
|
||||
|
||||
break;
|
||||
case PT_COAL:
|
||||
case PT_BCOL:
|
||||
if (parts[r>>8].life>100)
|
||||
parts[r>>8].life = 99;
|
||||
break;
|
||||
case PT_STKM:
|
||||
if (sim->player.elem!=PT_LIGH)
|
||||
parts[r>>8].life-=powderful/100;
|
||||
break;
|
||||
case PT_STKM2:
|
||||
if (sim->player2.elem!=PT_LIGH)
|
||||
parts[r>>8].life-=powderful/100;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
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->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);
|
||||
}
|
||||
if (parts[i].tmp2==3)
|
||||
{
|
||||
@ -155,7 +161,7 @@ int Element_LIGH::update(UPDATE_FUNC_ARGS)
|
||||
return 1;
|
||||
}
|
||||
|
||||
//Completely broken and laggy function, possible can be fixed later
|
||||
//Completely broken and laggy function, possibly can be fixed later
|
||||
/*pNear = LIGH_nearest_part(sim, i, parts[i].life*2.5);
|
||||
if (pNear!=-1)
|
||||
{
|
||||
@ -278,6 +284,7 @@ bool Element_LIGH::create_LIGH(Simulation * sim, int x, int y, int c, int temp,
|
||||
if ((((r&0xFF)==PT_VOID || ((r&0xFF)==PT_PVOD && sim->parts[r>>8].life >= 10)) && (!sim->parts[r>>8].ctype || (sim->parts[r>>8].ctype==c)!=(sim->parts[r>>8].tmp&1))) || (r&0xFF)==PT_BHOL || (r&0xFF)==PT_NBHL) // VOID, PVOD, VACU, and BHOL eat LIGH here
|
||||
return true;
|
||||
}
|
||||
else return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -48,7 +48,6 @@ Element_NBLE::Element_NBLE()
|
||||
|
||||
//#TPT-Directive ElementHeader Element_NBLE static int update(UPDATE_FUNC_ARGS)
|
||||
int Element_NBLE::update(UPDATE_FUNC_ARGS)
|
||||
|
||||
{
|
||||
if (parts[i].temp > 5273.15 && sim->pv[y/CELL][x/CELL] > 100.0f)
|
||||
{
|
||||
@ -74,14 +73,12 @@ int Element_NBLE::update(UPDATE_FUNC_ARGS)
|
||||
parts[j].ctype = 0xF800000;
|
||||
parts[j].temp = temp;
|
||||
}
|
||||
|
||||
j = sim->create_part(-3,x+rand()%3-1,y+rand()%3-1,PT_PLSM);
|
||||
if (j != -1)
|
||||
{
|
||||
parts[j].temp = temp;
|
||||
parts[j].tmp |= 4;
|
||||
}
|
||||
|
||||
parts[i].temp = temp+1750+rand()%500;
|
||||
sim->pv[y/CELL][x/CELL] += 50;
|
||||
}
|
||||
|
@ -56,93 +56,114 @@ int Element_NEUT::update(UPDATE_FUNC_ARGS)
|
||||
if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry))
|
||||
{
|
||||
r = pmap[y+ry][x+rx];
|
||||
if (!r)
|
||||
continue;
|
||||
rt = r&0xFF;
|
||||
if (rt==PT_WATR || rt==PT_ICEI || rt==PT_SNOW)
|
||||
switch (r&0xFF)
|
||||
{
|
||||
case PT_WATR:
|
||||
if (3>(rand()%20))
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_DSTW);
|
||||
case PT_ICEI:
|
||||
case PT_SNOW:
|
||||
parts[i].vx *= 0.995;
|
||||
parts[i].vy *= 0.995;
|
||||
}
|
||||
if (rt==PT_PLUT && pressureFactor>(rand()%1000))
|
||||
{
|
||||
if (!(rand()%3))
|
||||
break;
|
||||
case PT_PLUT:
|
||||
if (pressureFactor>(rand()%1000))
|
||||
{
|
||||
sim->create_part(r>>8, x+rx, y+ry, rand()%3 ? PT_LAVA : PT_URAN);
|
||||
parts[r>>8].temp = MAX_TEMP;
|
||||
if (parts[r>>8].type==PT_LAVA) {
|
||||
parts[r>>8].tmp = 100;
|
||||
parts[r>>8].ctype = PT_PLUT;
|
||||
if (!(rand()%3))
|
||||
{
|
||||
sim->create_part(r>>8, x+rx, y+ry, rand()%3 ? PT_LAVA : PT_URAN);
|
||||
parts[r>>8].temp = MAX_TEMP;
|
||||
if (parts[r>>8].type==PT_LAVA) {
|
||||
parts[r>>8].tmp = 100;
|
||||
parts[r>>8].ctype = PT_PLUT;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sim->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].vy = 0.25f*parts[r>>8].vy + parts[i].vy;
|
||||
}
|
||||
sim->pv[y/CELL][x/CELL] += 10.0f * CFDS; //Used to be 2, some people said nukes weren't powerful enough
|
||||
Element_FIRE::update(UPDATE_FUNC_SUBCALL_ARGS);
|
||||
}
|
||||
else
|
||||
break;
|
||||
#ifdef SDEUT
|
||||
case PT_DEUT:
|
||||
if ((pressureFactor+1+(parts[r>>8].life/100))>(rand()%1000))
|
||||
{
|
||||
sim->create_part(r>>8, x+rx, y+ry, 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);
|
||||
}
|
||||
break;
|
||||
#else
|
||||
case PT_DEUT:
|
||||
if ((pressureFactor+1)>(rand()%1000))
|
||||
{
|
||||
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].vy = 0.25f*parts[r>>8].vy + parts[i].vy;
|
||||
}
|
||||
sim->pv[y/CELL][x/CELL] += 10.0f * CFDS; //Used to be 2, some people said nukes weren't powerful enough
|
||||
Element_FIRE::update(UPDATE_FUNC_SUBCALL_ARGS);
|
||||
}
|
||||
#ifdef SDEUT
|
||||
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);
|
||||
sim->kill_part(r>>8);
|
||||
}
|
||||
#else
|
||||
else if (rt==PT_DEUT && (pressureFactor+1)>(rand()%1000))
|
||||
{
|
||||
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].vy = 0.25f*parts[r>>8].vy + parts[i].vy;
|
||||
if (parts[r>>8].life>0)
|
||||
{
|
||||
parts[r>>8].life --;
|
||||
parts[r>>8].temp = restrict_flt(parts[r>>8].temp + parts[r>>8].life*17, MIN_TEMP, MAX_TEMP);
|
||||
pv[y/CELL][x/CELL] += 6.0f * CFDS;
|
||||
|
||||
}
|
||||
else
|
||||
sim.kill_part(r>>8);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
else if (rt==PT_GUNP && 3>(rand()%200))
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_DUST);
|
||||
else if (rt==PT_DYST && 3>(rand()%200))
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_YEST);
|
||||
else if (rt==PT_YEST)
|
||||
case PT_GUNP:
|
||||
if (3>(rand()%200))
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_DUST);
|
||||
break;
|
||||
case PT_DYST:
|
||||
if (3>(rand()%200))
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_YEST);
|
||||
break;
|
||||
case PT_YEST:
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_DYST);
|
||||
else if (rt==PT_WATR && 3>(rand()%20))
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_DSTW);
|
||||
else if (rt==PT_PLEX && 3>(rand()%200))
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_GOO);
|
||||
else if (rt==PT_NITR && 3>(rand()%200))
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_DESL);
|
||||
else if (rt==PT_PLNT && !(rand()%20))
|
||||
sim->create_part(r>>8, x+rx, y+ry, PT_WOOD);
|
||||
else if (rt==PT_DESL && 3>(rand()%200))
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_GAS);
|
||||
else if (rt==PT_COAL && !(rand()%20))
|
||||
sim->create_part(r>>8, x+rx, y+ry, PT_WOOD);
|
||||
else if (rt==PT_DUST && !(rand()%20))
|
||||
sim->part_change_type(r>>8, x+rx, y+ry, PT_FWRK);
|
||||
else if (rt==PT_FWRK && !(rand()%20))
|
||||
parts[r>>8].ctype = PT_DUST;
|
||||
else if (rt==PT_ACID && !(rand()%20))
|
||||
sim->create_part(r>>8, x+rx, y+ry, PT_ISOZ);
|
||||
else if (rt==PT_TTAN && !(rand()%20))
|
||||
{
|
||||
sim->kill_part(i);
|
||||
return 1;
|
||||
break;
|
||||
case PT_PLEX:
|
||||
if (3>(rand()%200))
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_GOO);
|
||||
break;
|
||||
case PT_NITR:
|
||||
if (3>(rand()%200))
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_DESL);
|
||||
break;
|
||||
case PT_PLNT:
|
||||
if (!(rand()%20))
|
||||
sim->create_part(r>>8, x+rx, y+ry, PT_WOOD);
|
||||
break;
|
||||
case PT_DESL:
|
||||
if (3>(rand()%200))
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_GAS);
|
||||
break;
|
||||
case PT_COAL:
|
||||
if (!(rand()%20))
|
||||
sim->create_part(r>>8, x+rx, y+ry, PT_WOOD);
|
||||
break;
|
||||
case PT_DUST:
|
||||
if (!(rand()%20))
|
||||
sim->part_change_type(r>>8, x+rx, y+ry, PT_FWRK);
|
||||
break;
|
||||
case PT_FWRK:
|
||||
if (!(rand()%20))
|
||||
parts[r>>8].ctype = PT_DUST;
|
||||
break;
|
||||
case PT_ACID:
|
||||
if (!(rand()%20))
|
||||
sim->create_part(r>>8, x+rx, y+ry, PT_ISOZ);
|
||||
break;
|
||||
case PT_TTAN:
|
||||
if (!(rand()%20))
|
||||
{
|
||||
sim->kill_part(i);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
case PT_EXOT:
|
||||
if (!(rand()%20))
|
||||
parts[r>>8].life = 1500;
|
||||
}
|
||||
else if (rt==PT_EXOT && 5>(rand()%100))
|
||||
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 &&
|
||||
(elements[parts[r>>8].type-1].menusection==SC_LIQUID||
|
||||
elements[parts[r>>8].type-1].menusection==SC_EXPLOSIVE||
|
||||
elements[parts[r>>8].type-1].menusection==SC_GAS||
|
||||
elements[parts[r>>8].type-1].menusection==SC_POWDERS) && 15>(rand()%1000))
|
||||
parts[r>>8].type--;*/
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -170,8 +170,7 @@ int Element_SPRK::update(UPDATE_FUNC_ARGS)
|
||||
continue;
|
||||
rt = r&0xFF;
|
||||
conduct_sprk = 1;
|
||||
|
||||
|
||||
// ct = spark from material, rt = spark to material. Make conduct_sprk = 0 if conduction not allowed
|
||||
pavg = sim->parts_avg(r>>8, i,PT_INSL);
|
||||
if ((rt==PT_SWCH||(rt==PT_SPRK&&parts[r>>8].ctype==PT_SWCH)) && pavg!=PT_INSL && parts[i].life<4) // make sparked SWCH turn off correctly
|
||||
{
|
||||
@ -200,80 +199,75 @@ int Element_SPRK::update(UPDATE_FUNC_ARGS)
|
||||
if (ct == PT_NSCN || ct == PT_PSCN || ct == PT_INST)
|
||||
Element_PPIP::flood_trigger(sim, x+rx, y+ry, ct);
|
||||
}
|
||||
|
||||
// ct = spark from material, rt = spark to material. Make conduct_sprk = 0 if conduction not allowed
|
||||
|
||||
if (pavg == PT_INSL) conduct_sprk = 0;
|
||||
if (!((sim->elements[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))) && pavg!=PT_INSL && parts[i].life<4)
|
||||
{
|
||||
parts[r>>8].temp = 473.0f;
|
||||
if (rt==PT_NTCT||rt==PT_PTCT)
|
||||
conduct_sprk = 0;
|
||||
continue;
|
||||
}
|
||||
if (pavg == PT_INSL) continue;
|
||||
if (!((sim->elements[rt].Properties&PROP_CONDUCTS)||rt==PT_INST||rt==PT_QRTZ)) continue;
|
||||
if (abs(rx)+abs(ry)>=4 &&ct!=PT_SWCH&&rt!=PT_SWCH)
|
||||
continue;
|
||||
//if (rt==ct && rt!=PT_INST) goto conduct;
|
||||
if (ct==PT_NTCT && !(rt==PT_PSCN || rt==PT_NTCT || (rt==PT_NSCN&&parts[i].temp>373.0f)))
|
||||
conduct_sprk = 0;
|
||||
continue;
|
||||
else if (ct==PT_PTCT && !(rt==PT_PSCN || rt==PT_PTCT || (rt==PT_NSCN&&parts[i].temp<373.0f)))
|
||||
conduct_sprk = 0;
|
||||
continue;
|
||||
else if (ct==PT_INWR && !(rt==PT_NSCN || rt==PT_INWR || rt==PT_PSCN))
|
||||
conduct_sprk = 0;
|
||||
continue;
|
||||
else if (ct==PT_NSCN && rt==PT_PSCN)
|
||||
conduct_sprk = 0;
|
||||
continue;
|
||||
else if (ct==PT_ETRD && !(rt==PT_METL||rt==PT_ETRD||rt==PT_BMTL||rt==PT_BRMT||rt==PT_LRBD||rt==PT_RBDM||rt==PT_PSCN||rt==PT_NSCN))
|
||||
conduct_sprk = 0;
|
||||
else if (ct==PT_INST && rt!=PT_NSCN) conduct_sprk = 0;
|
||||
continue;
|
||||
else if (ct==PT_INST && rt!=PT_NSCN) continue;
|
||||
else if (ct==PT_SWCH && (rt==PT_PSCN||rt==PT_NSCN||rt==PT_WATR||rt==PT_SLTW||rt==PT_NTCT||rt==PT_PTCT||rt==PT_INWR))
|
||||
conduct_sprk = 0;
|
||||
continue;
|
||||
else if (rt==PT_QRTZ && !((ct==PT_NSCN||ct==PT_METL||ct==PT_PSCN||ct==PT_QRTZ) && (parts[r>>8].temp<173.15||sim->pv[(y+ry)/CELL][(x+rx)/CELL]>8)))
|
||||
conduct_sprk = 0;
|
||||
continue;
|
||||
else if (rt==PT_NTCT && !(ct==PT_NSCN || ct==PT_NTCT || (ct==PT_PSCN&&parts[r>>8].temp>373.0f)))
|
||||
conduct_sprk = 0;
|
||||
continue;
|
||||
else if (rt==PT_PTCT && !(ct==PT_NSCN || ct==PT_PTCT || (ct==PT_PSCN&&parts[r>>8].temp<373.0f)))
|
||||
conduct_sprk = 0;
|
||||
continue;
|
||||
else if (rt==PT_INWR && !(ct==PT_NSCN || ct==PT_INWR || ct==PT_PSCN))
|
||||
conduct_sprk = 0;
|
||||
continue;
|
||||
else if (rt==PT_INST && ct!=PT_PSCN)
|
||||
conduct_sprk = 0;
|
||||
continue;
|
||||
else if (rt==PT_NBLE && parts[r>>8].tmp == 1)
|
||||
conduct_sprk = 0;
|
||||
|
||||
if (conduct_sprk) {
|
||||
if (rt==PT_WATR||rt==PT_SLTW) {
|
||||
if (parts[r>>8].life==0 && parts[i].life<3)
|
||||
{
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_SPRK);
|
||||
if (rt==PT_WATR) parts[r>>8].life = 6;
|
||||
else parts[r>>8].life = 5;
|
||||
parts[r>>8].ctype = rt;
|
||||
}
|
||||
}
|
||||
else if (rt==PT_INST) {
|
||||
if (parts[r>>8].life==0 && parts[i].life<4)
|
||||
{
|
||||
sim->FloodINST(x+rx,y+ry,PT_SPRK,PT_INST);//spark the wire
|
||||
}
|
||||
}
|
||||
else if (parts[r>>8].life==0 && parts[i].life<4) {
|
||||
parts[r>>8].life = 4;
|
||||
parts[r>>8].ctype = rt;
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_SPRK);
|
||||
if (parts[r>>8].temp+10.0f<673.0f&&!sim->legacy_enable&&(rt==PT_METL||rt==PT_BMTL||rt==PT_BRMT||rt==PT_PSCN||rt==PT_NSCN||rt==PT_ETRD||rt==PT_NBLE||rt==PT_IRON))
|
||||
parts[r>>8].temp = parts[r>>8].temp+10.0f;
|
||||
}
|
||||
else if (ct==PT_ETRD && parts[i].life==5)
|
||||
continue;
|
||||
conduct:
|
||||
if (rt==PT_WATR||rt==PT_SLTW) {
|
||||
if (parts[r>>8].life==0 && parts[i].life<3)
|
||||
{
|
||||
sim->part_change_type(i,x,y,ct);
|
||||
parts[i].ctype = PT_NONE;
|
||||
parts[i].life = 20;
|
||||
parts[r>>8].life = 4;
|
||||
parts[r>>8].ctype = rt;
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_SPRK);
|
||||
if (rt==PT_WATR) parts[r>>8].life = 6;
|
||||
else parts[r>>8].life = 5;
|
||||
parts[r>>8].ctype = rt;
|
||||
}
|
||||
}
|
||||
else if (rt==PT_INST) {
|
||||
if (parts[r>>8].life==0 && parts[i].life<4)
|
||||
{
|
||||
sim->FloodINST(x+rx,y+ry,PT_SPRK,PT_INST);//spark the wire
|
||||
}
|
||||
}
|
||||
else if (parts[r>>8].life==0 && parts[i].life<4) {
|
||||
parts[r>>8].life = 4;
|
||||
parts[r>>8].ctype = rt;
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_SPRK);
|
||||
if (parts[r>>8].temp+10.0f<673.0f&&!sim->legacy_enable&&(rt==PT_METL||rt==PT_BMTL||rt==PT_BRMT||rt==PT_PSCN||rt==PT_NSCN||rt==PT_ETRD||rt==PT_NBLE||rt==PT_IRON))
|
||||
parts[r>>8].temp = parts[r>>8].temp+10.0f;
|
||||
}
|
||||
else if (ct==PT_ETRD && parts[i].life==5)
|
||||
{
|
||||
sim->part_change_type(i,x,y,ct);
|
||||
parts[i].ctype = PT_NONE;
|
||||
parts[i].life = 20;
|
||||
parts[r>>8].life = 4;
|
||||
parts[r>>8].ctype = rt;
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_SPRK);
|
||||
}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ Element_THDR::Element_THDR()
|
||||
int Element_THDR::update(UPDATE_FUNC_ARGS)
|
||||
{
|
||||
int r, rx, ry, rt;
|
||||
bool kill;
|
||||
bool kill=false;
|
||||
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))
|
||||
@ -64,7 +64,7 @@ int Element_THDR::update(UPDATE_FUNC_ARGS)
|
||||
parts[r>>8].ctype = parts[r>>8].type;
|
||||
sim->part_change_type(r>>8,x+rx,y+ry,PT_SPRK);
|
||||
parts[r>>8].life = 4;
|
||||
kill = true;
|
||||
kill=true;
|
||||
}
|
||||
else if (rt!=PT_CLNE&&rt!=PT_THDR&&rt!=PT_SPRK&&rt!=PT_DMND&&rt!=PT_FIRE)
|
||||
{
|
||||
|
Reference in New Issue
Block a user