Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
cl_cmd.qc
Go to the documentation of this file.
1#include "cl_cmd.qh"
2
3// ==============================================
4// CSQC client commands code, written by Samual
5// Last updated: December 28th, 2011
6// ==============================================
7
8#include <client/draw.qh>
9#include <client/hud/_mod.qh>
14#include <client/mapvoting.qh>
16#include <client/view.qh>
18#include <common/mapinfo.qh>
20
22{
23 if (time - floor(time) > 0.5)
24 {
25 PolyDrawModel(this);
26 this.drawmask = 0;
27 }
28 else
29 {
30 this.renderflags = 0;
31 this.drawmask = MASK_NORMAL;
32 }
33}
34
35
36// =======================
37// Command Sub-Functions
38// =======================
39
40void LocalCommand_blurtest(int request)
41{
42 TC(int, request);
43 // Simple command to work with postprocessing temporarily... possibly completely pointless, the glsl shader is used for a real feature now...
44 // Anyway, to enable it, just compile the client with -DBLURTEST and then you can use the command.
45
46 #ifdef BLURTEST
47 switch (request)
48 {
50 {
51 blurtest_time0 = time;
52 blurtest_time1 = time + stof(argv(1));
53 blurtest_radius = stof(argv(2));
54 blurtest_power = stof(argv(3));
55 LOG_INFO("Enabled blurtest");
56 return;
57 }
58
59 default:
61 {
62 LOG_HELP("Usage:^3 cl_cmd blurtest");
63 LOG_HELP(" No arguments required.");
64 return;
65 }
66 }
67 #else
68 if (request)
69 {
70 LOG_INFO("Blurtest is not enabled on this client.");
71 return;
72 }
73 #endif
74}
75
76void LocalCommand_boxparticles(int request, int argc)
77{
78 TC(int, request); TC(int, argc);
79 switch (request)
80 {
82 {
83 if (argc == 9)
84 {
85 int effect = _particleeffectnum(argv(1));
86 if (effect >= 0)
87 {
88 int index = stoi(argv(2));
89 entity own;
90 if (index <= 0)
91 own = entitybyindex(-index);
92 else
93 own = findfloat(NULL, entnum, index);
94 vector org_from = stov(argv(3));
95 vector org_to = stov(argv(4));
96 vector dir_from = stov(argv(5));
97 vector dir_to = stov(argv(6));
98 int countmultiplier = stoi(argv(7));
99 int flags = stoi(argv(8));
100 boxparticles(effect, own, org_from, org_to, dir_from, dir_to, countmultiplier, flags);
101 return;
102 }
103 }
104 }
105
106 default:
107 LOG_INFOF("Incorrect parameters for ^2%s^7", argv(0));
109 {
110 LOG_HELP(
111 "Usage:^3 cl_cmd boxparticles <effectname> <owner> <org_from> <org_to> <dir_from> <dir_to> <countmultiplier> <flags>\n"
112 " <effectname> is the name of a particle effect in effectinfo.txt\n"
113 " <owner> is the entity number of the owner (negative for csqc ent, positive for svqc ent)\n"
114 " <org_from> is the starting origin of the box\n"
115 " <org_to> is the ending origin of the box\n"
116 " <dir_from> is the minimum velocity\n"
117 " <dir_to> is the maximum velocity\n"
118 " <countmultiplier> defines a multiplier for the particle count (affects count only, not countabsolute or trailspacing)\n"
119 " <flags> can contain:\n"
120 " 1 to respect globals particles_alphamin, particles_alphamax (set right before via prvm_globalset client)\n"
121 " 2 to respect globals particles_colormin, particles_colormax (set right before via prvm_globalset client)\n"
122 " 4 to respect globals particles_fade (set right before via prvm_globalset client)\n"
123 " 128 to draw a trail, not a box"
124 );
125 return;
126 }
127 }
128}
129
131{
132 TC(int, request);
133 switch (request)
134 {
136 {
137 string path = ((argv(1) == "") ? "" : strcat(argv(1), "/"));
138 string filename = strcat(path, MapInfo_Map_bspname, "_scrshot_ent.txt");
139 int fh = fopen(filename, FILE_APPEND);
140
141 if (fh >= 0)
142 {
143 fputs(fh, "{\n");
144 fputs(fh, strcat("\"classname\" \"info_autoscreenshot\"\n"));
145 fputs(fh, strcat("\"origin\" \"", strcat(ftos(view_origin.x), " ", ftos(view_origin.y), " ", ftos(view_origin.z)), "\"\n"));
146 fputs(fh, strcat("\"angles\" \"", strcat(ftos(view_angles.x), " ", ftos(view_angles.y), " ", ftos(view_angles.z)), "\"\n"));
147 fputs(fh, "}\n");
148
149 LOG_INFO("Completed screenshot entity dump in ^2data/data/", path, MapInfo_Map_bspname, "_scrshot_ent.txt^7.");
150
151 fclose(fh);
152 }
153 else
154 {
155 LOG_INFO("^1Error: ^7Could not dump to file!");
156 }
157 return;
158 }
159
160 default:
162 {
163 LOG_HELP("Usage:^3 cl_cmd create_scrshot_ent [<path>]");
164 LOG_HELP(" Where <path> can be the subdirectory of data/data in which the file is saved.");
165 return;
166 }
167 }
168}
169
170void LocalCommand_debugmodel(int request, int argc)
171{
172 TC(int, request); TC(int, argc);
173 switch (request)
174 {
176 {
177 string modelname = argv(1);
178
179 if (modelname != "")
180 {
181 entity debugmodel_entity = new(debugmodel);
182 precache_model(modelname);
183 _setmodel(debugmodel_entity, modelname);
184 setorigin(debugmodel_entity, view_origin);
185 debugmodel_entity.angles = view_angles;
186 debugmodel_entity.draw = DrawDebugModel;
187 IL_PUSH(g_drawables, debugmodel_entity);
188 return;
189 }
190 // fall through
191 }
192
193 default:
195 {
196 LOG_HELP("Usage:^3 cl_cmd debugmodel <model>");
197 LOG_HELP(" Where <model> is a string of the model name to use for the debug model.");
198 return;
199 }
200 }
201}
202
203void LocalCommand_handlevote(int request, int argc)
204{
205 TC(int, request); TC(int, argc);
206 switch (request)
207 {
209 {
210 int vote_selection;
211 string vote_string;
212
213 if (InterpretBoolean(argv(1)))
214 {
215 vote_selection = 2;
216 vote_string = "yes";
217 }
218 else
219 {
220 vote_selection = 1;
221 vote_string = "no";
222 }
223
224 if (vote_selection)
225 {
226 if (uid2name_dialog) // handled by "uid2name" option
227 {
228 vote_active = 0;
229 vote_prev = 0;
230 vote_change = -9999;
231 localcmd(strcat("setreport cl_allow_uid2name ", ftos(vote_selection - 1), "\n"));
232 uid2name_dialog = 0;
233 }
234 else { localcmd(strcat("cmd vote ", vote_string, "\n")); }
235
236 return;
237 }
238 }
239
240 default:
241 LOG_INFOF("Incorrect parameters for ^2%s^7", argv(0));
243 {
244 LOG_HELP("Usage:^3 cl_cmd handlevote <vote>");
245 LOG_HELP(" Where <vote> is the selection for either the current poll or uid2name.");
246 return;
247 }
248 }
249}
250
251void LocalCommand_hud(int request, int argc)
252{
253 TC(int, request); TC(int, argc);
254 switch (request)
255 {
257 {
258 if(MUTATOR_CALLHOOK(HUD_Command, argc))
259 return;
260
261 switch (argv(1))
262 {
263 case "configure":
264 {
265 cvar_set("_hud_configure", ftos(!autocvar__hud_configure));
266 return;
267 }
268
269 case "quickmenu":
270 {
271 if (argv(2) == "help")
272 {
273 LOG_HELP(" quickmenu [[default | file | \"\"] <submenu> <filename>]");
274 LOG_HELP("Called without options (or with \"\") loads either the default quickmenu or a quickmenu file if hud_panel_quickmenu_file is set to a valid filename.");
275 LOG_HELP("A submenu name can be given to open the quickmenu directly in a submenu; it requires to specify 'default', 'file' or '\"\"' option.");
276 LOG_HELP("A file name can also be given to open a different quickmenu");
277 return;
278 }
279 string file = ((argv(4) == "") ? autocvar_hud_panel_quickmenu_file : argv(4));
280 if (QuickMenu_IsOpened())
282 else
283 QuickMenu_Open(argv(2), argv(3), file); // mode, submenu
284 return;
285 }
286
287 case "save":
288 {
289 if (argv(2))
290 {
292 return;
293 }
294 else
295 {
296 break; // go to usage, we're missing the paramater needed here.
297 }
298 }
299
300 case "scoreboard_columns_set":
301 {
303 return;
304 }
305
306 case "scoreboard_columns_help":
307 {
309 return;
310 }
311
312 case "radar":
313 {
314 if (argv(2))
316 else
318 return;
319 }
320
321 case "clickradar":
322 {
323 if(!isdemo())
325 return;
326 }
327 }
328 }
329
330 default:
331 LOG_INFOF("Incorrect parameters for ^2%s^7", argv(0));
333 {
334 LOG_HELP("Usage:^3 cl_cmd hud <action> [<configname> | <radartoggle> | <layout>]");
335 LOG_HELP(" Where <action> is the command to complete,");
336 LOG_HELP(" <configname> is the name to save to for 'save' action,");
337 LOG_HELP(" <radartoggle> is to maximize/minimize radar for 'radar' action,");
338 LOG_HELP(" and <layout> is how to organize the scoreboard columns for 'scoreboard_columns_set' action.");
339 LOG_HELP(" Full list of commands here: configure, quickmenu, minigame, save, scoreboard_columns_help, scoreboard_columns_set, radar.");
340 return;
341 }
342 }
343}
344
345void LocalCommand_localprint(int request, int argc)
346{
347 TC(int, request); TC(int, argc);
348 switch (request)
349 {
351 {
352 if (argv(1))
353 {
355 return;
356 }
357 }
358
359 default:
360 LOG_INFOF("Incorrect parameters for ^2%s^7", argv(0));
362 {
363 LOG_HELP("Usage:^3 cl_cmd localprint \"<message>\"");
364 LOG_HELP(" <message> is the centerprint message to send to yourself.");
365 return;
366 }
367 }
368}
369
370void LocalCommand_mv_download(int request, int argc)
371{
372 TC(int, request); TC(int, argc);
373 switch (request)
374 {
376 {
377 if (argv(1))
378 {
380 return;
381 }
382 }
383
384 default:
385 LOG_INFOF("Incorrect parameters for ^2%s^7", argv(0));
387 {
388 LOG_HELP("Usage:^3 cl_cmd mv_download <mapid>");
389 LOG_HELP(" Where <mapid> is the id number of the map to request an image of on the map vote selection menu.");
390 return;
391 }
392 }
393}
394
395void LocalCommand_sendcvar(int request, int argc)
396{
397 TC(int, request); TC(int, argc);
398 switch (request)
399 {
401 {
402 if (argv(1))
403 {
404 // W_FixWeaponOrder will trash argv, so save what we need.
405 string thiscvar = string_null; strcpy(thiscvar, argv(1));
406 string s = cvar_string(thiscvar);
407
408 if (thiscvar == "cl_weaponpriority")
410 else if (substring(thiscvar, 0, 17) == "cl_weaponpriority" && strlen(thiscvar) == 18)
412
413 localcmd("cmd sentcvar ", thiscvar, " \"", s, "\"\n");
414 strfree(thiscvar);
415 return;
416 }
417 }
418
419 default:
420 LOG_INFOF("Incorrect parameters for ^2%s^7", argv(0));
422 {
423 LOG_HELP("Usage:^3 cl_cmd sendcvar <cvar>");
424 LOG_HELP(" Where <cvar> is the cvar to send to the server.");
425 return;
426 }
427 }
428}
429
431{
432 switch(request)
433 {
435 {
436 LOG_HELP(_("Checkpoint times:"));
437 for (int i = 0; i <= 255; ++i)
438 {
441 }
442 return;
443 }
444 default:
446 {
447 LOG_HELP("Usage:^3 cl_cmd print_cptimes");
448 LOG_HELP(" No arguments required, will show current or last run checkpoint times.");
449 return;
450 }
451 }
452}
453
454/* use this when creating a new command, making sure to place it in alphabetical order... also,
455** ADD ALL NEW COMMANDS TO commands.cfg WITH PROPER ALIASES IN THE SAME FASHION!
456void LocalCommand_(int request)
457{
458 switch(request)
459 {
460 case CMD_REQUEST_COMMAND:
461 {
462
463 return;
464 }
465
466 default:
467 case CMD_REQUEST_USAGE:
468 {
469 LOG_HELP("Usage:^3 cl_cmd ");
470 LOG_HELP(" No arguments required.");
471 return;
472 }
473 }
474}
475*/
476
477
478// ==================================
479// Macro system for client commands
480// ==================================
481
482// Normally do not hard code aliases for these, instead create them in commands.cfg... also: keep in alphabetical order, please ;)
483CLIENT_COMMAND(blurtest, "Feature for testing blur postprocessing") { LocalCommand_blurtest(request); }
484CLIENT_COMMAND(boxparticles, "Spawn particles manually") { LocalCommand_boxparticles(request, arguments); }
485CLIENT_COMMAND(create_scrshot_ent, "Create an entity at this location for automatic screenshots") { LocalCommand_create_scrshot_ent(request); }
486CLIENT_COMMAND(debugmodel, "Spawn a debug model manually") { LocalCommand_debugmodel(request, arguments); }
487CLIENT_COMMAND(handlevote, "System to handle selecting a vote or option") { LocalCommand_handlevote(request, arguments); }
488CLIENT_COMMAND(hud, "Commands regarding/controlling the HUD system") { LocalCommand_hud(request, arguments); }
489CLIENT_COMMAND(localprint, "Create your own centerprint sent to yourself") { LocalCommand_localprint(request, arguments); }
490CLIENT_COMMAND(mv_download, "Retrieve mapshot picture from the server") { LocalCommand_mv_download(request, arguments); }
491CLIENT_COMMAND(print_cptimes, "Print the stored checkpoint times for current or last run") { LocalCommand_print_cptimes(request); }
492CLIENT_COMMAND(sendcvar, "Send a cvar to the server (like cl_weaponpriority)") { LocalCommand_sendcvar(request, arguments); }
493
495{
496 FOREACH(CLIENT_COMMANDS, true, LOG_HELPF(" ^2%s^7: %s", it.m_name, it.m_description));
497}
498
499bool LocalCommand_macro_command(int argc, string command)
500{
501 string c = strtolower(argv(0));
502 FOREACH(CLIENT_COMMANDS, it.m_name == c, {
503 it.m_invokecmd(it, CMD_REQUEST_COMMAND, NULL, argc, command);
504 return true;
505 });
506 return false;
507}
508
510{
511 string c = strtolower(argv(1));
512 FOREACH(CLIENT_COMMANDS, it.m_name == c, {
513 it.m_invokecmd(it, CMD_REQUEST_USAGE, NULL, argc, "");
514 return true;
515 });
516 return false;
517}
518
520{
521 FOREACH(CLIENT_COMMANDS, true, CMD_Write_Alias("qc_cmd_cl", it.m_name, it.m_description));
522}
523
524
525// =========================================
526// Main Function Called By Engine (cl_cmd)
527// =========================================
528// If this function exists, client code handles gamecommand instead of the engine code.
529
530void GameCommand(string command)
531{
532 int argc = tokenize_console(command);
533
534 // Guide for working with argc arguments by example:
535 // argc: 1 - 2 - 3 - 4
536 // argv: 0 - 1 - 2 - 3
537 // cmd vote - master - login - password
538 string s = strtolower(argv(0));
539 if (s == "help")
540 {
541 if (argc == 1)
542 {
543 LOG_HELP("Client console commands:");
545
546 LOG_HELP("\nGeneric commands shared by all programs:");
548
549 LOG_HELP("\nUsage:^3 cl_cmd <command>^7, where possible commands are listed above.");
550 LOG_HELP("For help about a specific command, type cl_cmd help <command>");
551
552 return;
553 }
554 else if (GenericCommand_macro_usage(argc)) // Instead of trying to call a command, we're going to see detailed information about it
555 {
556 return;
557 }
558 else if (LocalCommand_macro_usage(argc)) // now try for normal commands too
559 {
560 return;
561 }
562 }
563 // continue as usual and scan for normal commands
564 if (GenericCommand(command) // handled by common/command/generic.qc
565 || LocalCommand_macro_command(argc, command) // handled by one of the above LocalCommand_* functions
566 || MUTATOR_CALLHOOK(CSQC_ConsoleCommand, s, argc, command) // handled by a mutator
567 ) return;
568
569 // nothing above caught the command, must be invalid
570 LOG_INFO(((command != "") ? strcat("Unknown client command \"", command, "\"") : "No command provided"), ". For a list of supported commands, try cl_cmd help.");
571}
572
573
574// ===================================
575// Macro system for console commands
576// ===================================
577
578// These functions are here specifically to add special + - commands to the game, and are not really normal commands.
579// Please add client commands to the function above this, as this is only for special reasons.
580// NOTE: showaccuracy is kept as legacy command
581#define CONSOLE_COMMANDS_NORMAL() \
582 CONSOLE_COMMAND("+showaccuracy", { }) \
583 CONSOLE_COMMAND("-showaccuracy", { }) \
584 /* nothing */
585
586#define CONSOLE_COMMANDS_MOVEMENT() \
587 CONSOLE_COMMAND("+forward", { ++camera_direction.x; }) \
588 CONSOLE_COMMAND("-forward", { --camera_direction.x; }) \
589 CONSOLE_COMMAND("+back", { --camera_direction.x; }) \
590 CONSOLE_COMMAND("-back", { ++camera_direction.x; }) \
591 CONSOLE_COMMAND("+moveup", { ++camera_direction.z; }) \
592 CONSOLE_COMMAND("-moveup", { --camera_direction.z; }) \
593 CONSOLE_COMMAND("+movedown", { --camera_direction.z; }) \
594 CONSOLE_COMMAND("-movedown", { ++camera_direction.z; }) \
595 CONSOLE_COMMAND("+moveright", { --camera_direction.y; }) \
596 CONSOLE_COMMAND("-moveright", { ++camera_direction.y; }) \
597 CONSOLE_COMMAND("+moveleft", { ++camera_direction.y; }) \
598 CONSOLE_COMMAND("-moveleft", { --camera_direction.y; }) \
599 CONSOLE_COMMAND("+roll_right", { ++camera_roll; }) \
600 CONSOLE_COMMAND("-roll_right", { --camera_roll; }) \
601 CONSOLE_COMMAND("+roll_left", { --camera_roll; }) \
602 CONSOLE_COMMAND("-roll_left", { ++camera_roll; }) \
603 /* nothing */
604
606{
607 // first init normal commands
608 #define CONSOLE_COMMAND(name, execution) \
609 { registercommand(name); }
610
612 #undef CONSOLE_COMMAND
613
614 // then init movement commands
615 #ifndef CAMERATEST
616 if (isdemo())
617 {
618 #endif
619 #define CONSOLE_COMMAND(name, execution) \
620 registercommand(name);
621
623 #undef CONSOLE_COMMAND
624 #ifndef CAMERATEST
625}
626 #endif
627}
628
629bool ConsoleCommand_macro_normal(string s, int argc)
630{
631 #define CONSOLE_COMMAND(name, execution) \
632 { if (name == s) { { execution } return true; } }
633
635 #undef CONSOLE_COMMAND
636
637 return false;
638}
639
640bool ConsoleCommand_macro_movement(string s, int argc)
641{
642 if (camera_active)
643 {
644 #define CONSOLE_COMMAND(name, execution) \
645 { if (name == s) { { execution } return true; } }
646
648 #undef CONSOLE_COMMAND
649 }
650
651 return false;
652}
653
654
655// ======================================================
656// Main Function Called By Engine (registered commands)
657// ======================================================
658// Used to parse commands in the console that have been registered with the "registercommand" function
659
660bool CSQC_ConsoleCommand(string command)
661{
662 int argc = tokenize_console(command);
663 string s = strtolower(argv(0));
664 // Return value should be true if CSQC handled the command, otherwise return false to have the engine handle it.
665 return ConsoleCommand_macro_normal(s, argc)
667 ;
668}
#define MUTATOR_CALLHOOK(id,...)
Definition base.qh:143
ERASEABLE float InterpretBoolean(string input)
Definition bool.qh:13
void centerprint_AddStandard(string strMessage)
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
void LocalCommand_debugmodel(int request, int argc)
Definition cl_cmd.qc:170
void LocalCommand_mv_download(int request, int argc)
Definition cl_cmd.qc:370
bool LocalCommand_macro_usage(int argc)
Definition cl_cmd.qc:509
void LocalCommand_handlevote(int request, int argc)
Definition cl_cmd.qc:203
void LocalCommand_localprint(int request, int argc)
Definition cl_cmd.qc:345
bool ConsoleCommand_macro_normal(string s, int argc)
Definition cl_cmd.qc:629
bool LocalCommand_macro_command(int argc, string command)
Definition cl_cmd.qc:499
void LocalCommand_boxparticles(int request, int argc)
Definition cl_cmd.qc:76
#define CONSOLE_COMMANDS_NORMAL()
Definition cl_cmd.qc:581
void DrawDebugModel(entity this)
Definition cl_cmd.qc:21
void LocalCommand_blurtest(int request)
Definition cl_cmd.qc:40
bool ConsoleCommand_macro_movement(string s, int argc)
Definition cl_cmd.qc:640
void LocalCommand_print_cptimes(int request)
Definition cl_cmd.qc:430
void ConsoleCommand_macro_init()
Definition cl_cmd.qc:605
void LocalCommand_macro_help()
Definition cl_cmd.qc:494
void GameCommand(string command)
Definition cl_cmd.qc:530
void LocalCommand_hud(int request, int argc)
Definition cl_cmd.qc:251
void LocalCommand_create_scrshot_ent(int request)
Definition cl_cmd.qc:130
#define CONSOLE_COMMANDS_MOVEMENT()
Definition cl_cmd.qc:586
void LocalCommand_macro_write_aliases(int fh)
Definition cl_cmd.qc:519
void LocalCommand_sendcvar(int request, int argc)
Definition cl_cmd.qc:395
void Cmd_Scoreboard_Help()
void Cmd_Scoreboard_SetFields(int argc)
#define CLIENT_COMMAND(id, description)
Definition cl_cmd.qh:16
void PolyDrawModel(entity e)
Definition draw.qc:182
float uid2name_dialog
Definition vote.qh:10
IntrusiveList g_drawables
Definition main.qh:91
vector view_origin
Definition main.qh:109
float renderflags
Definition main.qh:111
int hud
Definition main.qh:173
float camera_active
Definition main.qh:153
void Cmd_MapVote_MapDownload(int argc)
Definition mapvoting.qc:645
const int CMD_REQUEST_COMMAND
Definition command.qh:3
const int CMD_REQUEST_USAGE
Definition command.qh:4
string strtolower(string s)
float flags
float drawmask
const float MASK_NORMAL
vector view_angles
float time
float entnum
const float FILE_APPEND
#define strlen
#define tokenize_console
float GenericCommand_macro_usage(int argc)
Definition generic.qc:582
void GenericCommand_macro_help()
Definition generic.qc:567
float GenericCommand(string command)
Definition generic.qc:603
#define CMD_Write_Alias(execute, command, description)
Definition generic.qh:34
bool hud_panel_radar_mouse
Definition hud.qh:71
int vote_active
Definition hud.qh:98
bool hud_panel_radar_maximized
Definition hud.qh:70
float vote_change
Definition hud.qh:101
bool QuickMenu_IsOpened()
Definition quickmenu.qc:291
int vote_prev
Definition hud.qh:99
void HUD_Panel_ExportCfg(string cfgname)
Definition hud_config.qc:10
bool autocvar__hud_configure
Definition hud_config.qh:3
#define stoi(s)
Definition int.qh:4
ERASEABLE entity IL_PUSH(IntrusiveList this, entity it)
Push to tail.
#define FOREACH(list, cond, body)
Definition iter.qh:19
#define CSQC_ConsoleCommand
Definition _all.inc:309
#define TC(T, sym)
Definition _all.inc:82
#define LOG_HELP(...)
Definition log.qh:85
#define LOG_INFO(...)
Definition log.qh:65
#define LOG_HELPF(...)
Definition log.qh:86
#define LOG_INFOF(...)
Definition log.qh:66
string MapInfo_Map_bspname
Definition mapinfo.qh:6
void localcmd(string command,...)
void cvar_set(string name, string value)
float isdemo()
void fclose(float fhandle)
float stof(string val,...)
void fputs(float fhandle, string s)
string substring(string s, float start, float length)
float fopen(string filename, float mode)
vector stov(string s)
const string cvar_string(string name)
string ftos(float f)
float floor(float f)
string argv(float n)
entity findfloat(entity start,.float field, float match)
string string_null
Definition nil.qh:9
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))
#define NULL
Definition post.qh:14
bool QuickMenu_Open(string mode, string submenu, string file)
Definition quickmenu.qc:107
void QuickMenu_Close()
Definition quickmenu.qc:263
string autocvar_hud_panel_quickmenu_file
Definition quickmenu.qh:7
string race_checkpoint_splits[256]
Definition racetimer.qh:14
void HUD_Radar_Show_Maximized(bool doshow, bool clickable)
Definition radar.qc:31
vector
Definition self.qh:92
int vote_selection
Definition vote.qh:53
#define strfree(this)
Definition string.qh:59
#define strcpy(this, s)
Definition string.qh:52
string W_NumberWeaponOrder(string order)
Definition all.qc:120
string W_FixWeaponOrder(string order, float complete)
Definition all.qc:95