diff options
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; } |
