summaryrefslogtreecommitdiff
path: root/src/simulation/elements/NEUT.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/simulation/elements/NEUT.cpp')
-rw-r--r--src/simulation/elements/NEUT.cpp161
1 files changed, 91 insertions, 70 deletions
diff --git a/src/simulation/elements/NEUT.cpp b/src/simulation/elements/NEUT.cpp
index 31c990b..5f23014 100644
--- a/src/simulation/elements/NEUT.cpp
+++ b/src/simulation/elements/NEUT.cpp
@@ -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);
- 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;
+ 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->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);
- }
+ break;
#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)
+ 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;
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;
}