1 #include "controlpoint.qh"
3 #include "teamradar.qh"
4 #include "../common/movetypes/movetypes.qh"
13 .vector cp_origin, cp_bob_origin;
22 .entity icon_realmodel;
24 void cpicon_precache()
27 return; // already precached
29 cpicon_precached = true;
34 if(time < self.move_time) { return; }
36 if(self.cp_bob_dmg_z > 0)
37 self.cp_bob_dmg_z = self.cp_bob_dmg_z - 3 * frametime;
39 self.cp_bob_dmg_z = 0;
40 self.cp_bob_origin_z = 4 * PI * (1 - cos(self.cp_bob_spd));
41 self.cp_bob_spd = self.cp_bob_spd + 1.875 * frametime;
42 self.colormod = '1 1 1' * (2 - bound(0, (self.pain_finished - time) / 10, 1));
44 if(!self.iscaptured) self.alpha = self.health / self.max_health;
48 if (self.punchangle_x > 0)
50 self.punchangle_x = self.punchangle_x - 60 * frametime;
51 if (self.punchangle_x < 0)
52 self.punchangle_x = 0;
54 else if (self.punchangle_x < 0)
56 self.punchangle_x = self.punchangle_x + 60 * frametime;
57 if (self.punchangle_x > 0)
58 self.punchangle_x = 0;
61 if (self.punchangle_y > 0)
63 self.punchangle_y = self.punchangle_y - 60 * frametime;
64 if (self.punchangle_y < 0)
65 self.punchangle_y = 0;
67 else if (self.punchangle_y < 0)
69 self.punchangle_y = self.punchangle_y + 60 * frametime;
70 if (self.punchangle_y > 0)
71 self.punchangle_y = 0;
74 if (self.punchangle_z > 0)
76 self.punchangle_z = self.punchangle_z - 60 * frametime;
77 if (self.punchangle_z < 0)
78 self.punchangle_z = 0;
80 else if (self.punchangle_z < 0)
82 self.punchangle_z = self.punchangle_z + 60 * frametime;
83 if (self.punchangle_z > 0)
84 self.punchangle_z = 0;
87 self.angles_x = self.punchangle_x;
88 self.angles_y = self.punchangle_y + self.move_angles_y;
89 self.angles_z = self.punchangle_z;
90 self.move_angles_y = self.move_angles_y + 45 * frametime;
93 setorigin(self, self.cp_origin + self.cp_bob_origin + self.cp_bob_dmg);
96 void cpicon_damage(float hp)
98 if(!self.iscaptured) { return; }
100 if(hp < self.max_health * 0.25)
101 setmodel(self, MDL_ONS_CP3);
102 else if(hp < self.max_health * 0.50)
103 setmodel(self, MDL_ONS_CP2);
104 else if(hp < self.max_health * 0.75)
105 setmodel(self, MDL_ONS_CP1);
106 else if(hp <= self.max_health || hp >= self.max_health)
107 setmodel(self, MDL_ONS_CP);
109 self.punchangle = (2 * randomvec() - '1 1 1') * 45;
111 self.cp_bob_dmg_z = (2 * random() - 1) * 15;
112 self.pain_finished = time + 1;
113 self.colormod = '2 2 2';
115 setsize(self, CPICON_MIN, CPICON_MAX);
118 void cpicon_construct()
120 self.netname = "Control Point Icon";
122 setmodel(self, MDL_ONS_CP);
123 setsize(self, CPICON_MIN, CPICON_MAX);
125 if(self.icon_realmodel == world)
127 self.icon_realmodel = spawn();
128 setmodel(self.icon_realmodel, MDL_Null);
129 setorigin(self.icon_realmodel, self.origin);
130 setsize(self.icon_realmodel, CPICON_MIN, CPICON_MAX);
131 self.icon_realmodel.movetype = MOVETYPE_NOCLIP;
132 self.icon_realmodel.solid = SOLID_NOT;
133 self.icon_realmodel.move_origin = self.icon_realmodel.origin;
136 if(self.iscaptured) { self.icon_realmodel.solid = SOLID_BBOX; }
138 self.move_movetype = MOVETYPE_NOCLIP;
139 self.solid = SOLID_NOT;
140 self.movetype = MOVETYPE_NOCLIP;
141 self.move_origin = self.origin;
142 self.move_time = time;
143 self.drawmask = MASK_NORMAL;
145 self.draw = cpicon_draw;
146 self.cp_origin = self.origin;
147 self.cp_bob_origin = '0 0 0.1';
152 void cpicon_changeteam()
156 self.glowmod = Team_ColorRGB(self.team - 1);
157 self.teamradar_color = Team_ColorRGB(self.team - 1);
158 self.colormap = 1024 + (self.team - 1) * 17;
162 self.colormap = 1024;
163 self.glowmod = '1 1 0';
164 self.teamradar_color = '1 1 0';
174 self.origin_x = ReadCoord();
175 self.origin_y = ReadCoord();
176 self.origin_z = ReadCoord();
177 setorigin(self, self.origin);
179 self.health = ReadByte();
180 self.max_health = ReadByte();
181 self.count = ReadByte();
182 self.team = ReadByte();
183 self.iscaptured = ReadByte();
186 self.count = (self.health - self.max_health) * frametime;
195 int _tmp = ReadByte();
196 if(_tmp != self.team)
204 if(_tmp != self.health)