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