summaryrefslogtreecommitdiff
path: root/src/elements/dest.c
blob: fb2a9d76efc6461dac753529df920eb33970cf54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <element.h>

int update_DEST(UPDATE_FUNC_ARGS) {
	int r,rx,ry;
	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;
}