diff options
| author | jacksonmj <mj-pt@jacksonmj.co.uk> | 2011-10-11 16:11:20 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2011-10-13 16:33:20 (GMT) |
| commit | 2f46dca7c1d0016957dfd88831f453f06e080fef (patch) | |
| tree | cab1f08654c1da126e70b4cd9d9f3196ff26d289 /src/elements/dest.c | |
| parent | 107e77a1a13f3dbdbc9703247f52f41716cd8115 (diff) | |
| download | powder-2f46dca7c1d0016957dfd88831f453f06e080fef.zip powder-2f46dca7c1d0016957dfd88831f453f06e080fef.tar.gz | |
Some work on DEST, EMP, LIGH
Change indentation to tabs, respect temperature limit (if a hotter
reaction is required, should raise temp limit instead of ignoring it).
DEST: fix TYPE_SOLID check, and prevent it displacing DMND
EMP: randomise DLAY delay instead of heating it (since DLAY does not melt
and does not transfer heat)
Fix nearest_part so that t=-1 does not include dead particles
Diffstat (limited to 'src/elements/dest.c')
| -rw-r--r-- | src/elements/dest.c | 97 |
1 files changed, 46 insertions, 51 deletions
diff --git a/src/elements/dest.c b/src/elements/dest.c index fb2a9d7..a50dfaa 100644 --- a/src/elements/dest.c +++ b/src/elements/dest.c @@ -5,55 +5,50 @@ int update_DEST(UPDATE_FUNC_ARGS) { rx=rand()%5-2; ry=rand()%5-2; - r = pmap[y+ry][x+rx]; - if ((r>>8)>=NPART || !r) - return 0; - if ((r&0xFF)!=PT_DEST && (r&0xFF)!=PT_DMND) - { - if (parts[i].life<=0 || parts[i].life>37) - { - parts[i].life=30+rand()%20; - parts[i].temp+=20000; - pv[y/CELL][x/CELL]+=60.0f; - } - parts[i].temp+=10000; - if ((r&0xFF)==PT_PLUT || (r&0xFF)==PT_DEUT) - { - pv[y/CELL][x/CELL]+=20.0f; - parts[i].temp+=18000; - if (rand()%2==0) - { - part_change_type(r>>8, x+rx, y+ry, PT_NEUT); - float rad = (rand()%128+128)/127.0f; - float a = (rand()%360)*M_PI/180.0f; - parts[r>>8].vx = rad*cosf(a); - parts[r>>8].vy = rad*sinf(a); - parts[r>>8].temp+=40000; - pv[y/CELL][x/CELL]+=10.0f; - parts[i].life-=4; - } - } - if ((r&0xFF)==PT_INSL) - { - create_part(r>>8, x+rx, y+ry, PT_FIRE); - parts[r>>8].temp=10000; - } - else if (rand()%3==0) - { - kill_part(r>>8); - parts[i].life-=4*(ptypes[r&0xFF].properties==TYPE_SOLID?3:1); - if (parts[i].life<=0) - parts[i].life=1; - parts[i].temp+=10000; - } - else - { - parts[r>>8].temp+=10000; - } - int topv=pv[y/CELL][x/CELL]/9+parts[r>>8].temp/900; - if (topv>40.0f) - topv=40.0f; - pv[y/CELL][x/CELL]+=40.0f+topv; - } - return 0; + r = pmap[y+ry][x+rx]; + if (!r || (r&0xFF)==PT_DEST || (r&0xFF)==PT_DMND) + return 0; + + if (parts[i].life<=0 || parts[i].life>37) + { + parts[i].life=30+rand()%20; + parts[i].temp+=20000; + pv[y/CELL][x/CELL]+=60.0f; + } + parts[i].temp+=10000; + if ((r&0xFF)==PT_PLUT || (r&0xFF)==PT_DEUT) + { + pv[y/CELL][x/CELL]+=20.0f; + parts[i].temp+=18000; + if (rand()%2==0) + { + float orig_temp = parts[r>>8].temp; + create_part(r>>8, x+rx, y+ry, PT_NEUT); + parts[r>>8].temp = restrict_flt(orig_temp+40000.0f, MIN_TEMP, MAX_TEMP); + pv[y/CELL][x/CELL] += 10.0f; + parts[i].life-=4; + } + } + else if ((r&0xFF)==PT_INSL) + { + create_part(r>>8, x+rx, y+ry, PT_PLSM); + } + else if (rand()%3==0) + { + kill_part(r>>8); + parts[i].life -= 4*((ptypes[r&0xFF].properties&TYPE_SOLID)?3:1); + if (parts[i].life<=0) + parts[i].life=1; + parts[i].temp+=10000; + } + else + { + parts[r>>8].temp = restrict_flt(parts[r>>8].temp+10000.0f, MIN_TEMP, MAX_TEMP); + } + int topv=pv[y/CELL][x/CELL]/9+parts[r>>8].temp/900; + if (topv>40.0f) + topv=40.0f; + pv[y/CELL][x/CELL]+=40.0f+topv; + parts[i].temp = restrict_flt(parts[i].temp, MIN_TEMP, MAX_TEMP); + return 0; } |
