]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/nades.qc
Merge branch 'master' into Mario/turrets
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / nades.qc
1 #if defined(CSQC)
2         #include "../dpdefs/csprogsdefs.qh"
3         #include "../client/defs.qh"
4         #include "nades.qh"
5         #include "buffs.qh"
6         #include "../common/movetypes/movetypes.qh"
7         #include "../client/main.qh"
8         #include "../csqcmodellib/cl_model.qh"
9 #elif defined(MENUQC)
10 #elif defined(SVQC)
11         #include "../dpdefs/progsdefs.qh"
12     #include "constants.qh"
13     #include "../server/constants.qh"
14         #include "../common/turrets/sv_turrets.qh"
15 #endif
16
17
18 #ifdef SVQC
19 float healer_send(entity to, int sf)
20 {
21         WriteByte(MSG_ENTITY, ENT_CLIENT_HEALING_ORB);
22         WriteByte(MSG_ENTITY, sf);
23
24         if(sf & 1)
25         {
26                 WriteCoord(MSG_ENTITY, self.origin.x);
27                 WriteCoord(MSG_ENTITY, self.origin.y);
28                 WriteCoord(MSG_ENTITY, self.origin.z);
29
30                 WriteByte(MSG_ENTITY, self.healer_lifetime);
31                 //WriteByte(MSG_ENTITY, self.ltime - time + 1);
32                 WriteShort(MSG_ENTITY, self.healer_radius);
33                 // round time delta to a 1/10th of a second
34                 WriteByte(MSG_ENTITY, (self.ltime - time)*10.0+0.5);
35         }
36
37         return true;
38 }
39 #endif // SVQC
40
41 #ifdef CSQC
42 .float ltime;
43 void healer_draw()
44 {
45         float dt = time - self.move_time;
46         self.move_time = time;
47         if(dt <= 0)
48                 return;
49
50         self.alpha = (self.ltime - time) / self.healer_lifetime;
51         self.scale = min((1 - self.alpha)*self.healer_lifetime*4,1)*self.healer_radius;
52
53 }
54
55 void healer_setup()
56 {
57         setmodel(self, "models/ctf/shield.md3");
58
59         setorigin(self, self.origin);
60
61         float model_radius = self.maxs.x;
62         vector size = '1 1 1' * self.healer_radius / 2;
63         setsize(self,-size,size);
64         self.healer_radius = self.healer_radius/model_radius*0.6;
65
66         self.draw = healer_draw;
67         self.health = 255;
68         self.movetype = MOVETYPE_NONE;
69         self.solid = SOLID_NOT;
70         self.drawmask = MASK_NORMAL;
71         self.scale = 0.01;
72         self.avelocity = self.move_avelocity = '7 0 11';
73         self.colormod = '1 0 0';
74         self.renderflags |= RF_ADDITIVE;
75 }
76
77 void ent_healer()
78 {
79         int sf = ReadByte();
80
81         if(sf & TNSF_SETUP)
82         {
83                 self.origin_x = ReadCoord();
84                 self.origin_y = ReadCoord();
85                 self.origin_z = ReadCoord();
86                 setorigin(self, self.origin);
87
88                 self.healer_lifetime = ReadByte();
89                 self.healer_radius = ReadShort();
90                 self.ltime = time + ReadByte()/10.0;
91                 //self.ltime = time + self.healer_lifetime;
92
93                 healer_setup();
94         }
95 }
96 #endif // CSQC