summaryrefslogtreecommitdiff
path: root/src/elements/dest.c
diff options
context:
space:
mode:
authorjacksonmj <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)
commit2f46dca7c1d0016957dfd88831f453f06e080fef (patch)
treecab1f08654c1da126e70b4cd9d9f3196ff26d289 /src/elements/dest.c
parent107e77a1a13f3dbdbc9703247f52f41716cd8115 (diff)
downloadpowder-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.c97
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;
}