]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/server/cl_impulse.qc
oops... huge bugs in the spawnfunc patch... it also changed them in strings, probably...
[divverent/nexuiz.git] / data / qcsrc / server / cl_impulse.qc
1 .vector personal_v_angle; // view angles to restore on impulse 77
2 .vector personal_velocity; // velocity to restore on impulse 77
3
4 void CopyBody(float keepvelocity);
5
6 // changes by LordHavoc on 03/30/04
7 // cleaned up dummy code
8 // dummies are now removed eventually after being gibbed (norespawn = TRUE)
9 // dummy impulse now checks sv_cheats to prevent players from overwhelming server with dummies
10 // dummies now use player code where possible
11
12 void player_anim (void);
13 void DummyThink(void)
14 {
15         self.think = DummyThink;
16         self.nextthink = time;
17         SV_PlayerPhysics();
18         PlayerPreThink();
19         //player_anim();
20         PlayerPostThink();
21 }
22
23 // from dpmod
24 void(entity e, vector v) printsurfaceinfo =
25 {
26         local float surfnum, numpoints, vnum;
27         local string s;
28         local vector n;
29         surfnum = getsurfacenearpoint(e, v);
30         if (surfnum >= 0)
31         {
32                 sprint(self, "texture: ");
33                 s = getsurfacetexture(e, surfnum);
34                 sprint(self, s);
35                 sprint(self, " normal: ");
36                 n = getsurfacenormal(e, surfnum);
37                 sprint(self, vtos(n));
38                 sprint(self, " ");
39                 numpoints = getsurfacenumpoints(e, surfnum);
40                 sprint(self, ftos(numpoints));
41                 sprint(self, " verts:");
42                 vnum = 0;
43                 while (vnum < numpoints)
44                 {
45                         sprint(self, " ");
46                         n = getsurfacepoint(e, surfnum, vnum);
47                         sprint(self, vtos(n));
48                         vnum = vnum + 1;
49                 }
50                 sprint(self, " point tested: ");
51                 sprint(self, vtos(v));
52                 sprint(self, " nearest point on surface: ");
53                 n = getsurfaceclippedpoint(e, surfnum, v);
54                 sprint(self, vtos(n));
55                 sprint(self, "\n");
56         }
57 };
58
59 void ImpulseCommands (void)
60 {
61         local float imp;
62         imp = self.impulse;
63         if (!imp || gameover)
64                 return;
65         self.impulse = 0;
66
67         if (timeoutStatus == 2) //don't allow any impulses while the game is paused
68                 return;
69
70         if (imp >= 1 && imp <= 12)
71         {
72                 // weapon switching impulses
73                 if(self.deadflag == DEAD_NO)
74                 {
75                         if (imp <= 9)
76                                 W_SwitchWeapon (imp);
77                         else if (imp == 10)
78                                 W_NextWeapon ();
79                         else if (imp == 12)
80                                 W_PreviousWeapon ();
81                         else if (imp == 11) // last weapon
82                                 W_SwitchWeapon (self.cnt);
83                 }
84                 else
85                         self.impulse = imp; // retry in next frame
86         }
87         // throw weapon
88         else if (imp == 17)
89         {
90                 if(self.deadflag == DEAD_NO)
91                 if (!g_minstagib)
92                         W_ThrowWeapon(W_CalculateProjectileVelocity(self.velocity, v_forward * 750), '0 0 0', TRUE);
93         }
94         // deploy waypoints
95         else if (imp >= 30 && imp <= 49)
96         {
97                 if(imp == 30)
98                 {
99                         WaypointSprite_DeployPersonal("waypoint", self.origin);
100                         self.personal_v_angle = self.v_angle;
101                         self.personal_velocity = self.velocity;
102                         sprint(self, "personal spawnfunc_waypoint spawned at location\n");
103                 }
104                 else if(imp == 31)
105                 {
106                         WaypointSprite_DeployPersonal("waypoint", self.cursor_trace_endpos);
107                         self.personal_v_angle = self.v_angle;
108                         self.personal_velocity = '0 0 0';
109                         sprint(self, "personal spawnfunc_waypoint spawned at crosshair\n");
110                 }
111                 else if(imp == 32 && vlen(self.death_origin))
112                 {
113                         WaypointSprite_DeployPersonal("waypoint", self.death_origin);
114                         self.personal_v_angle = self.v_angle;
115                         self.personal_velocity = '0 0 0';
116                         sprint(self, "personal spawnfunc_waypoint spawned at death location\n");
117                 }
118                 else if(imp == 33 && self.deadflag == DEAD_NO && teams_matter)
119                 {
120                         WaypointSprite_Attach("helpme", TRUE);
121                         sprint(self, "HELP ME attached\n");
122                 }
123                 else if(imp == 34)
124                 {
125                         WaypointSprite_DeployFixed("here", FALSE, self.origin);
126                         sprint(self, "HERE spawned at location\n");
127                 }
128                 else if(imp == 35)
129                 {
130                         WaypointSprite_DeployFixed("here", FALSE, self.cursor_trace_endpos);
131                         sprint(self, "HERE spawned at crosshair\n");
132                 }
133                 else if(imp == 36 && vlen(self.death_origin))
134                 {
135                         WaypointSprite_DeployFixed("here", FALSE, self.death_origin);
136                         sprint(self, "HERE spawned at death location\n");
137                 }
138                 else if(imp == 37)
139                 {
140                         WaypointSprite_DeployFixed("danger", FALSE, self.origin);
141                         sprint(self, "DANGER spawned at location\n");
142                 }
143                 else if(imp == 38)
144                 {
145                         WaypointSprite_DeployFixed("danger", FALSE, self.cursor_trace_endpos);
146                         sprint(self, "DANGER spawned at crosshair\n");
147                 }
148                 else if(imp == 39 && vlen(self.death_origin))
149                 {
150                         WaypointSprite_DeployFixed("danger", FALSE, self.death_origin);
151                         sprint(self, "DANGER spawned at death location\n");
152                 }
153                 else if(imp == 47)
154                 {
155                         WaypointSprite_ClearPersonal();
156                         sprint(self, "personal spawnfunc_waypoint cleared\n");
157                 }
158                 else if(imp == 48)
159                 {
160                         WaypointSprite_ClearOwned();
161                         sprint(self, "all waypoints cleared\n");
162                 }
163                 else if(imp == 49)
164                 {
165                         self.cvar_cl_hidewaypoints = !(self.cvar_cl_hidewaypoints);
166                         sprint(self, "fixed waypoints now ");
167                         if(self.cvar_cl_hidewaypoints)
168                                 sprint(self, "OFF\n");
169                         else
170                                 sprint(self, "ON\n");
171                 }
172         }
173         else
174         {
175                 if (sv_cheats)
176                 {
177                         if(imp == 19)
178                         {
179                                 makevectors(self.v_angle);
180                                 traceline(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * MAX_SHOT_DISTANCE, FALSE, self);
181                                 if (trace_fraction < 1)
182                                         printsurfaceinfo(trace_ent, trace_endpos);
183                         }
184                         else if(imp == 20)
185                         {
186                                 makevectors(self.v_angle);
187                                 traceline(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * 65536, FALSE, self);
188                                 sprint(self, strcat("distance: ", ftos(fabs(vlen(trace_endpos - (self.origin + self.view_ofs)))), "\n"));
189                         }
190                         else if(self.deadflag == DEAD_NO)
191                         {
192                                 if(imp == 77)
193                                 {
194                                         if(self.waypointsprite_deployed_personal)
195                                         {
196                                                 self.speedrunning = TRUE;
197                                                 tracebox(self.waypointsprite_deployed_personal.origin, self.mins, self.maxs, self.waypointsprite_deployed_personal.origin, MOVE_WORLDONLY, self);
198                                                 if(trace_startsolid)
199                                                 {
200                                                         sprint(self, "Cannot move there, cheater - only waypoints set using g_waypointsprite_personal work\n");
201                                                 }
202                                                 else
203                                                 {
204                                                         // Abort speedrun, teleport back
205                                                         setorigin(self, self.waypointsprite_deployed_personal.origin);
206                                                         self.oldvelocity = self.velocity = self.personal_velocity;
207                                                         self.angles = self.personal_v_angle;
208                                                         self.fixangle = TRUE;
209                                                         if(self.flagcarried)
210                                                         {
211                                                                 bprint("The ", self.flagcarried.netname, " was returned to base by its carrier\n");
212                                                                 ReturnFlag(self.flagcarried);
213                                                         }
214                                                 }
215                                                 self.ammo_rockets = 999;
216                                                 self.ammo_nails = 999;
217                                                 self.ammo_cells = 999;
218                                                 self.ammo_shells = 999;
219                                                 self.health = start_health;
220                                                 self.armorvalue = start_armorvalue;
221                                                 self.items |= itemsInMap & (IT_LASER | IT_SHOTGUN | IT_UZI | IT_GRENADE_LAUNCHER | IT_ELECTRO | IT_CRYLINK | IT_NEX | IT_HAGAR | IT_ROCKET_LAUNCHER);
222                                                 self.pauserotarmor_finished = time + cvar("g_balance_pause_armor_rot_spawn");
223                                                 self.pauserothealth_finished = time + cvar("g_balance_pause_health_rot_spawn");
224                                                 self.pauseregen_finished = time + cvar("g_balance_pause_health_regen_spawn");
225                                         }
226                                         else
227                                                 sprint(self, "No spawnfunc_waypoint set, cheater (use g_waypointsprite_personal to set one)\n");
228                                 }
229                                 else if(imp == 99)
230                                 {
231                                         self.items |= (IT_LASER | IT_UZI | IT_SHOTGUN | IT_GRENADE_LAUNCHER | IT_ELECTRO | IT_CRYLINK | IT_NEX | IT_HAGAR | IT_ROCKET_LAUNCHER);
232                                         self.ammo_shells = g_pickup_shells_max;
233                                         self.ammo_nails = g_pickup_nails_max;
234                                         self.ammo_rockets = g_pickup_rockets_max;
235                                         self.ammo_cells = g_pickup_cells_max;
236                                         self.health = g_pickup_healthsmall_max;
237                                         self.armorvalue = g_pickup_armorsmall_max;
238                                         self.pauserotarmor_finished = time + cvar("g_balance_pause_armor_rot_spawn");
239                                         self.pauserothealth_finished = time + cvar("g_balance_pause_health_rot_spawn");
240                                         self.pauseregen_finished = time + cvar("g_balance_pause_health_regen_spawn");
241                                         // precache weapon models/sounds
242                                         local float wep;
243                                         wep = WEP_FIRST;
244                                         while (wep <= WEP_LAST)
245                                         {
246                                                 weapon_action(wep, WR_PRECACHE);
247                                                 wep = wep + 1;
248                                         }
249                                 }
250                                 else if (imp == 13)
251                                 {
252                                         makevectors (self.v_angle);
253                                         self.velocity = self.velocity + v_forward * 300;
254                                         CopyBody(1);
255                                         self.velocity = self.velocity - v_forward * 300;
256                                 }
257                                 else if (imp == 14)
258                                         CopyBody(0);
259                         }
260                 }
261         }
262
263         if (cvar("g_waypointeditor"))
264         {
265                 local entity e;
266                 if (imp == 103) waypoint_schedulerelink(waypoint_spawn(self.origin, self.origin, 0));
267                 else if (imp == 104) {e = navigation_findnearestwaypoint(self, FALSE);if (e) waypoint_remove(e);}
268                 else if (imp == 105) waypoint_schedulerelinkall();
269                 else if (imp == 106) waypoint_saveall();
270         }
271
272         //TetrisImpulses(imp);
273 }