diff options
Diffstat (limited to 'src/simulation/elements/NEUT.cpp')
| -rw-r--r-- | src/simulation/elements/NEUT.cpp | 161 |
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; } |
