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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#include <element.h>
int update_EMP(UPDATE_FUNC_ARGS) {
int r,rx,ry,ok=0,t;
if (parts[i].life)
return 0;
for (rx=-2; rx<3; rx++)
for (ry=-2; ry<3; ry++)
if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry))
{
r = pmap[y+ry][x+rx];
if ((r>>8)>=NPART || !r)
continue;
if ((r&0xFF)==PT_SPRK)
{
ok=1;
break;
}
}
if (!ok)
return 0;
parts[i].life=220;
emp_decor+=7;
if (emp_decor>100)
emp_decor=100;
for (r=0; r<=parts_lastActiveIndex; r++)
{
t=parts[r].type;
rx=parts[r].x;
ry=parts[r].y;
if (t==PT_SPRK || (t==PT_SWCH && parts[r].life!=0 && parts[r].life!=10) || (t==PT_WIRE && parts[r].ctype>0))
{
int is_elec=0;
if ((parts[r].ctype==PT_PSCN || parts[r].ctype==PT_NSCN || parts[r].ctype==PT_PTCT ||
parts[r].ctype==PT_NTCT || parts[r].ctype==PT_INST || parts[r].ctype==PT_SWCH) || t==PT_WIRE || t==PT_SWCH)
{
is_elec=1;
if (rand()%100==0)
parts[r].temp+=3000;
if (rand()%80==0)
part_change_type(r, rx, ry, PT_BREC);
else if (rand()%120==0)
part_change_type(r, rx, ry, PT_NTCT);
}
int n,nx,ny;
for (nx=-2; nx<3; nx++)
for (ny=-2; ny<3; ny++)
if (rx+nx>=0 && ry+ny>0 && rx+nx<XRES && ry+ny<YRES && (rx || ry))
{
n = pmap[ry+ny][rx+nx];
if ((n>>8)>=NPART || !n)
continue;
/*if ((n&0xFF)==PT_BTRY && rand()%60==0)
{
part_change_type(n>>8, rx+nx, ry+ny, PT_PLSM);
parts[n>>8].life=rand()%100+70;
parts[n>>8].temp+=3000;
}*/
if (is_elec && ((n&0xFF)==PT_METL || (n&0xFF)==PT_BMTL) && rand()%280==0)
{
parts[n>>8].temp+=3000;
}
if (is_elec && (n&0xFF)==PT_BMTL && rand()%160==0)
{
part_change_type(n>>8, rx+nx, ry+ny, PT_BMTL);
parts[n>>8].temp+=1000;
}
if (is_elec && (n&0xFF)==PT_METL && rand()%300==0)
{
part_change_type(n>>8, rx+nx, ry+ny, PT_BMTL);
}
if ((t==PT_PSCN || t==PT_NSCN) && (n&0xFF)==PT_SWCH && rand()%100==0)
{
part_change_type(n>>8, rx+nx, ry+ny, PT_BREC);
}
if ((t==PT_PSCN || t==PT_NSCN) && (n&0xFF)==PT_SWCH && rand()%100==0)
{
parts[n>>8].temp+=2000;
}
if (is_elec && (n&0xFF)==PT_WIFI && rand()%8==0)
{
parts[n>>8].temp=rand()%10000;
}
if (is_elec && (n&0xFF)==PT_WIFI && rand()%16==0)
{
create_part(n>>8, rx+nx, ry+ny, PT_BREC);
parts[n>>8].temp+=1000;
}
if ((n&0xFF)==PT_ARAY && rand()%60==0)
{
create_part(n>>8, rx+nx, ry+ny, PT_BREC);
parts[n>>8].temp+=1000;
}
if (t==PT_DLAY && rand()%70==0)
{
parts[n>>8].temp+=2000;
}
}
}
}
return 0;
}
|