]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Give CSQC its own gamecommand.qc file too -- Move consolecommands and gamecommands...
authorSamual <samual@xonotic.org>
Tue, 8 Nov 2011 16:41:47 +0000 (11:41 -0500)
committerSamual <samual@xonotic.org>
Tue, 8 Nov 2011 16:41:47 +0000 (11:41 -0500)
qcsrc/client/Main.qc
qcsrc/client/gamecommand.qc [new file with mode: 0644]
qcsrc/client/progs.src

index 326bae22b5118a7be4a9566ae83dda022167560a..a4f118371cfb586f4237fa0360ed662a8e9a4649 100644 (file)
@@ -3,28 +3,6 @@
 //include "main.qh"
 
 #define DP_CSQC_ENTITY_REMOVE_IS_B0RKED
-
-void cvar_clientsettemp(string cv, string val)
-{
-       entity e;
-       for(e = world; (e = find(e, classname, "saved_cvar_value")); )
-               if(e.netname == cv)
-                       goto saved;
-       e = spawn();
-       e.classname = "saved_cvar_value";
-       e.netname = strzone(cv);
-       e.message = strzone(cvar_string(cv));
-:saved
-       cvar_set(cv, val);
-}
-
-void cvar_clientsettemp_restore()
-{
-       entity e;
-       for(e = world; (e = find(e, classname, "saved_cvar_value")); )
-                       cvar_set(e.netname, e.message);
-}
-
 void menu_show_error()
 {
        drawstring('0 200 0', _("ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"), '8 8 0', '1 0 0', 1, 0);
@@ -82,28 +60,10 @@ void CSQC_Init(void)
                        break;
        maxclients = i;
 
-       registercmd("hud_configure");
-       registercmd("hud_save");
+       //registercmd("hud_configure");
+       //registercmd("hud_save");
        //registercmd("menu_action");
 
-       registercmd("+showscores");registercmd("-showscores");
-       registercmd("+showaccuracy");registercmd("-showaccuracy");
-
-#ifndef CAMERATEST
-       if(isdemo())
-       {
-#endif
-               registercmd("+forward");registercmd("-forward");
-               registercmd("+back");registercmd("-back");
-               registercmd("+moveup");registercmd("-moveup");
-               registercmd("+movedown");registercmd("-movedown");
-               registercmd("+moveright");registercmd("-moveright");
-               registercmd("+moveleft");registercmd("-moveleft");
-               registercmd("+roll_right");registercmd("-roll_right");
-               registercmd("+roll_left");registercmd("-roll_left");
-#ifndef CAMERATEST
-       }
-#endif
        registercvar("hud_usecsqc", "1");
        registercvar("scoreboard_columns", "default", CVAR_SAVE);
 
@@ -170,6 +130,7 @@ void CSQC_Init(void)
 }
 
 // CSQC_Shutdown : Called every time the CSQC code is shutdown (changing maps, quitting, etc)
+void cvar_clientsettemp_restore();
 void CSQC_Shutdown(void)
 {
 #ifdef USE_FTE
@@ -337,294 +298,7 @@ void PostInit(void)
        postinit = true;
 }
 
-// CSQC_ConsoleCommand : Used to parse commands in the console that have been registered with the "registercmd" function
-// Return value should be 1 if CSQC handled the command, otherwise return 0 to have the engine handle it.
 float button_zoom;
-void Cmd_HUD_SetFields(float);
-void Cmd_HUD_Help(float);
-float CSQC_ConsoleCommand(string strMessage)
-{
-       float argc;
-       // Tokenize String
-       argc = tokenize_console(strMessage);
-
-       // Acquire Command
-       string strCmd;
-       strCmd = argv(0);
-
-       if(strCmd == "hud_configure") { // config hud
-               cvar_set("_hud_configure", ftos(!autocvar__hud_configure));
-               return true;
-       } else if(strCmd == "hud_save") { // save hud config
-               if(argv(1) == "" || argv(2)) {
-                       print(_("Usage:\n"));
-                       print(_("hud_save configname   (saves to hud_skinname_configname.cfg)\n"));
-               }
-               else
-                       HUD_Panel_ExportCfg(argv(1));
-               return true;
-       } else if(strCmd == "+showscores") {
-               scoreboard_showscores = true;
-               return true;
-       } else if(strCmd == "-showscores") {
-               scoreboard_showscores = false;
-               return true;
-       } else if(strCmd == "+showaccuracy") {
-               scoreboard_showaccuracy = true;
-               return true;
-       } else if(strCmd == "-showaccuracy") {
-               scoreboard_showaccuracy = false;
-               return true;
-       }
-
-       if(camera_active)
-       if(strCmd == "+forward" || strCmd == "-back") {
-               ++camera_direction_x;
-               return true;
-       } else if(strCmd == "-forward" || strCmd == "+back") {
-               --camera_direction_x;
-               return true;
-       } else if(strCmd == "+moveright" || strCmd == "-moveleft") {
-               --camera_direction_y;
-               return true;
-       } else if(strCmd == "-moveright" || strCmd == "+moveleft") {
-               ++camera_direction_y;
-               return true;
-       } else if(strCmd == "+moveup" || strCmd == "-movedown") {
-               ++camera_direction_z;
-               return true;
-       } else if(strCmd == "-moveup" || strCmd == "+movedown") {
-               --camera_direction_z;
-               return true;
-       } else if(strCmd == "+roll_right" || strCmd == "-roll_left") {
-               ++camera_roll;
-               return true;
-       } else if(strCmd == "+roll_left" || strCmd == "-roll_right") {
-               --camera_roll;
-               return true;
-       }
-
-       return false;
-}
-
-.vector view_ofs;
-entity debug_shotorg;
-void ShotOrg_Draw()
-{
-       self.origin = view_origin + view_forward * self.view_ofs_x + view_right * self.view_ofs_y + view_up * self.view_ofs_z;
-       self.angles = view_angles;
-       self.angles_x = -self.angles_x;
-       if not(self.cnt)
-               self.drawmask = MASK_NORMAL;
-       else
-               self.drawmask = 0;
-}
-void ShotOrg_Draw2D()
-{
-       vector coord2d_topleft, coord2d_topright, coord2d;
-       string s;
-       vector fs;
-
-       s = vtos(self.view_ofs);
-       s = substring(s, 1, strlen(s) - 2);
-       if(tokenize_console(s) == 3)
-               s = strcat(argv(0), " ", argv(1), " ", argv(2));
-
-       coord2d_topleft = project_3d_to_2d(self.origin + view_up * 4 - view_right * 4);
-       coord2d_topright = project_3d_to_2d(self.origin + view_up * 4 + view_right * 4);
-
-       fs = '1 1 0' * ((coord2d_topright_x - coord2d_topleft_x) / stringwidth(s, FALSE, '8 8 0'));
-
-       coord2d = coord2d_topleft;
-       if(fs_x < 8)
-       {
-               coord2d_x += (coord2d_topright_x - coord2d_topleft_x) * (1 - 8 / fs_x) * 0.5;
-               fs = '8 8 0';
-       }
-       coord2d_y -= fs_y;
-       coord2d_z = 0;
-       drawstring(coord2d, s, fs, '1 1 1', 1, 0);
-}
-
-void ShotOrg_Spawn()
-{
-       debug_shotorg = spawn();
-       debug_shotorg.draw = ShotOrg_Draw;
-       debug_shotorg.draw2d = ShotOrg_Draw2D;
-       debug_shotorg.renderflags = RF_VIEWMODEL;
-       debug_shotorg.effects = EF_FULLBRIGHT;
-       precache_model("models/shotorg_adjuster.md3");
-       setmodel(debug_shotorg, "models/shotorg_adjuster.md3");
-       debug_shotorg.scale = 2;
-       debug_shotorg.view_ofs = '25 8 -8';
-}
-
-void DrawDebugModel()
-{
-       if(time - floor(time) > 0.5)
-       {
-               PolyDrawModel(self);
-               self.drawmask = 0;
-       }
-       else
-       {
-               self.renderflags = 0;
-               self.drawmask = MASK_NORMAL;
-       }
-}
-
-void GameCommand(string msg)
-{
-       string s;
-       float argc;
-       entity e;
-       argc = tokenize_console(msg);
-
-       if(argv(0) == "help" || argc == 0)
-       {
-               print(_("Usage: cl_cmd COMMAND..., where possible commands are:\n"));
-               print(_("  settemp cvar value\n"));
-               print(_("  scoreboard_columns_set ...\n"));
-               print(_("  scoreboard_columns_help\n"));
-               GameCommand_Generic("help");
-               return;
-       }
-
-       if(GameCommand_Generic(msg))
-               return;
-
-       string cmd;
-       cmd = argv(0);
-       if(cmd == "mv_download") {
-               Cmd_MapVote_MapDownload(argc);
-       }
-       else if(cmd == "hud_panel_radar_maximized")
-       {
-               if(argc == 1)
-                       hud_panel_radar_maximized = !hud_panel_radar_maximized;
-               else
-                       hud_panel_radar_maximized = (stof(argv(1)) != 0);
-       }
-       else if(cmd == "settemp") {
-               cvar_clientsettemp(argv(1), argv(2));
-       }
-       else if(cmd == "scoreboard_columns_set") {
-               Cmd_HUD_SetFields(argc);
-       }
-       else if(cmd == "scoreboard_columns_help") {
-               Cmd_HUD_Help(argc);
-       }
-#ifdef BLURTEST
-       else if(cmd == "blurtest") {
-               blurtest_time0 = time;
-               blurtest_time1 = time + stof(argv(1));
-               blurtest_radius = stof(argv(2));
-               blurtest_power = stof(argv(3));
-       }
-#endif
-       else if(cmd == "shotorg_move") {
-               if(!debug_shotorg)
-                       ShotOrg_Spawn();
-               else
-                       debug_shotorg.view_ofs = debug_shotorg.view_ofs + stov(argv(1));
-               localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
-       }
-       else if(cmd == "shotorg_movez") {
-               if(!debug_shotorg)
-                       ShotOrg_Spawn();
-               else
-                       debug_shotorg.view_ofs = debug_shotorg.view_ofs + stof(argv(1)) * (debug_shotorg.view_ofs * (1 / debug_shotorg.view_ofs_x)); // closer/farther, same xy pos
-               localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
-       }
-       else if(cmd == "shotorg_set") {
-               if(!debug_shotorg)
-                       ShotOrg_Spawn();
-               else
-                       debug_shotorg.view_ofs = stov(argv(1));
-               localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
-       }
-       else if(cmd == "shotorg_setz") {
-               if(!debug_shotorg)
-                       ShotOrg_Spawn();
-               else
-                       debug_shotorg.view_ofs = debug_shotorg.view_ofs * (stof(argv(1)) / debug_shotorg.view_ofs_x); // closer/farther, same xy pos
-               localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
-       }
-       else if(cmd == "shotorg_toggle_hide") {
-               if(debug_shotorg)
-               {
-                       debug_shotorg.cnt = !debug_shotorg.cnt;
-               }
-       }
-       else if(cmd == "shotorg_end") {
-               if(debug_shotorg)
-               {
-                       print(vtos(debug_shotorg.view_ofs), "\n");
-                       remove(debug_shotorg);
-                       debug_shotorg = world;
-               }
-               localcmd("sv_cmd debug_shotorg\n");
-       }
-       else if(cmd == "sendcvar") {
-               // W_FixWeaponOrder will trash argv, so save what we need.
-               string thiscvar;
-               thiscvar = strzone(argv(1));
-               s = cvar_string(thiscvar);
-               if(thiscvar == "cl_weaponpriority")
-                       s = W_FixWeaponOrder(W_NumberWeaponOrder(s), 1);
-               else if(substring(thiscvar, 0, 17) == "cl_weaponpriority" && strlen(thiscvar) == 18)
-                       s = W_FixWeaponOrder(W_NumberWeaponOrder(s), 0);
-               localcmd("cmd sentcvar ", thiscvar, " \"", s, "\"\n");
-               strunzone(thiscvar);
-       }
-       else if(cmd == "spawn") {
-               s = argv(1);
-               e = spawn();
-               precache_model(s);
-               setmodel(e, s);
-               setorigin(e, view_origin);
-               e.angles = view_angles;
-               e.draw = DrawDebugModel;
-               e.classname = "debugmodel";
-       }
-    else if(cmd == "vyes")
-    {
-        if(uid2name_dialog)
-        {
-            vote_active = 0; // force the panel to disappear right as we have selected the value (to prevent it from fading out in the normal vote panel pos)
-            vote_prev = 0;
-            localcmd("setreport cl_allow_uid2name 1\n");
-            vote_change = -9999;
-                       uid2name_dialog = 0;
-        }
-        else
-        {
-            localcmd("cmd vote yes\n");
-        }
-    }
-    else if(cmd == "vno")
-    {
-        if(uid2name_dialog)
-        {
-            vote_active = 0;
-            vote_prev = 0;
-            localcmd("setreport cl_allow_uid2name 0\n");
-            vote_change = -9999;
-                       uid2name_dialog = 0;
-        }
-        else
-        {
-            localcmd("cmd vote no\n");
-        }
-    }
-
-       else
-       {
-               print("Invalid command. For a list of supported commands, try cl_cmd help.\n");
-       }
-
-       return;
-}
 
 // CSQC_InputEvent : Used to perform actions based on any key pressed, key released and mouse on the client.
 // Return value should be 1 if CSQC handled the input, otherwise return 0 to have the input passed to the engine.
diff --git a/qcsrc/client/gamecommand.qc b/qcsrc/client/gamecommand.qc
new file mode 100644 (file)
index 0000000..6cfeaf6
--- /dev/null
@@ -0,0 +1,362 @@
+// --------------------------------------------------------------------------
+// BEGIN REQUIRED CSQC FUNCTIONS
+//include "main.qh"
+
+void cvar_clientsettemp(string cv, string val)
+{
+       entity e;
+       for(e = world; (e = find(e, classname, "saved_cvar_value")); )
+               if(e.netname == cv)
+                       goto saved;
+       e = spawn();
+       e.classname = "saved_cvar_value";
+       e.netname = strzone(cv);
+       e.message = strzone(cvar_string(cv));
+:saved
+       cvar_set(cv, val);
+}
+
+void cvar_clientsettemp_restore()
+{
+       entity e;
+       for(e = world; (e = find(e, classname, "saved_cvar_value")); )
+                       cvar_set(e.netname, e.message);
+}
+
+.vector view_ofs;
+entity debug_shotorg;
+void ShotOrg_Draw()
+{
+       self.origin = view_origin + view_forward * self.view_ofs_x + view_right * self.view_ofs_y + view_up * self.view_ofs_z;
+       self.angles = view_angles;
+       self.angles_x = -self.angles_x;
+       if not(self.cnt)
+               self.drawmask = MASK_NORMAL;
+       else
+               self.drawmask = 0;
+}
+void ShotOrg_Draw2D()
+{
+       vector coord2d_topleft, coord2d_topright, coord2d;
+       string s;
+       vector fs;
+
+       s = vtos(self.view_ofs);
+       s = substring(s, 1, strlen(s) - 2);
+       if(tokenize_console(s) == 3)
+               s = strcat(argv(0), " ", argv(1), " ", argv(2));
+
+       coord2d_topleft = project_3d_to_2d(self.origin + view_up * 4 - view_right * 4);
+       coord2d_topright = project_3d_to_2d(self.origin + view_up * 4 + view_right * 4);
+
+       fs = '1 1 0' * ((coord2d_topright_x - coord2d_topleft_x) / stringwidth(s, FALSE, '8 8 0'));
+
+       coord2d = coord2d_topleft;
+       if(fs_x < 8)
+       {
+               coord2d_x += (coord2d_topright_x - coord2d_topleft_x) * (1 - 8 / fs_x) * 0.5;
+               fs = '8 8 0';
+       }
+       coord2d_y -= fs_y;
+       coord2d_z = 0;
+       drawstring(coord2d, s, fs, '1 1 1', 1, 0);
+}
+
+void ShotOrg_Spawn()
+{
+       debug_shotorg = spawn();
+       debug_shotorg.draw = ShotOrg_Draw;
+       debug_shotorg.draw2d = ShotOrg_Draw2D;
+       debug_shotorg.renderflags = RF_VIEWMODEL;
+       debug_shotorg.effects = EF_FULLBRIGHT;
+       precache_model("models/shotorg_adjuster.md3");
+       setmodel(debug_shotorg, "models/shotorg_adjuster.md3");
+       debug_shotorg.scale = 2;
+       debug_shotorg.view_ofs = '25 8 -8';
+}
+
+void DrawDebugModel()
+{
+       if(time - floor(time) > 0.5)
+       {
+               PolyDrawModel(self);
+               self.drawmask = 0;
+       }
+       else
+       {
+               self.renderflags = 0;
+               self.drawmask = MASK_NORMAL;
+       }
+}
+void Cmd_HUD_SetFields(float);
+void Cmd_HUD_Help(float);
+void GameCommand(string msg)
+{
+       string s;
+       float argc;
+       entity e;
+       argc = tokenize_console(msg);
+
+       if(argv(0) == "help" || argc == 0)
+       {
+               print(_("Usage: cl_cmd COMMAND..., where possible commands are:\n"));
+               print(_("  settemp cvar value\n"));
+               print(_("  scoreboard_columns_set ...\n"));
+               print(_("  scoreboard_columns_help\n"));
+               GameCommand_Generic("help");
+               return;
+       }
+
+       if(GameCommand_Generic(msg))
+               return;
+
+       if(strCmd == "hud_configure") { // config hud
+               cvar_set("_hud_configure", ftos(!autocvar__hud_configure));
+               return true;
+       } else if(strCmd == "hud_save") { // save hud config
+               if(argv(1) == "" || argv(2)) {
+                       print(_("Usage:\n"));
+                       print(_("hud_save configname   (saves to hud_skinname_configname.cfg)\n"));
+               }
+               else
+                       HUD_Panel_ExportCfg(argv(1));
+               return true;
+
+       string cmd;
+       cmd = argv(0);
+       if(cmd == "mv_download") {
+               Cmd_MapVote_MapDownload(argc);
+       }
+       else if(cmd == "hud_panel_radar_maximized")
+       {
+               if(argc == 1)
+                       hud_panel_radar_maximized = !hud_panel_radar_maximized;
+               else
+                       hud_panel_radar_maximized = (stof(argv(1)) != 0);
+       }
+       else if(cmd == "settemp") {
+               cvar_clientsettemp(argv(1), argv(2));
+       }
+       else if(cmd == "scoreboard_columns_set") {
+               Cmd_HUD_SetFields(argc);
+       }
+       else if(cmd == "scoreboard_columns_help") {
+               Cmd_HUD_Help(argc);
+       }
+#ifdef BLURTEST
+       else if(cmd == "blurtest") {
+               blurtest_time0 = time;
+               blurtest_time1 = time + stof(argv(1));
+               blurtest_radius = stof(argv(2));
+               blurtest_power = stof(argv(3));
+       }
+#endif
+       else if(cmd == "shotorg_move") {
+               if(!debug_shotorg)
+                       ShotOrg_Spawn();
+               else
+                       debug_shotorg.view_ofs = debug_shotorg.view_ofs + stov(argv(1));
+               localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
+       }
+       else if(cmd == "shotorg_movez") {
+               if(!debug_shotorg)
+                       ShotOrg_Spawn();
+               else
+                       debug_shotorg.view_ofs = debug_shotorg.view_ofs + stof(argv(1)) * (debug_shotorg.view_ofs * (1 / debug_shotorg.view_ofs_x)); // closer/farther, same xy pos
+               localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
+       }
+       else if(cmd == "shotorg_set") {
+               if(!debug_shotorg)
+                       ShotOrg_Spawn();
+               else
+                       debug_shotorg.view_ofs = stov(argv(1));
+               localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
+       }
+       else if(cmd == "shotorg_setz") {
+               if(!debug_shotorg)
+                       ShotOrg_Spawn();
+               else
+                       debug_shotorg.view_ofs = debug_shotorg.view_ofs * (stof(argv(1)) / debug_shotorg.view_ofs_x); // closer/farther, same xy pos
+               localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n");
+       }
+       else if(cmd == "shotorg_toggle_hide") {
+               if(debug_shotorg)
+               {
+                       debug_shotorg.cnt = !debug_shotorg.cnt;
+               }
+       }
+       else if(cmd == "shotorg_end") {
+               if(debug_shotorg)
+               {
+                       print(vtos(debug_shotorg.view_ofs), "\n");
+                       remove(debug_shotorg);
+                       debug_shotorg = world;
+               }
+               localcmd("sv_cmd debug_shotorg\n");
+       }
+       else if(cmd == "sendcvar") {
+               // W_FixWeaponOrder will trash argv, so save what we need.
+               string thiscvar;
+               thiscvar = strzone(argv(1));
+               s = cvar_string(thiscvar);
+               if(thiscvar == "cl_weaponpriority")
+                       s = W_FixWeaponOrder(W_NumberWeaponOrder(s), 1);
+               else if(substring(thiscvar, 0, 17) == "cl_weaponpriority" && strlen(thiscvar) == 18)
+                       s = W_FixWeaponOrder(W_NumberWeaponOrder(s), 0);
+               localcmd("cmd sentcvar ", thiscvar, " \"", s, "\"\n");
+               strunzone(thiscvar);
+       }
+       else if(cmd == "spawn") {
+               s = argv(1);
+               e = spawn();
+               precache_model(s);
+               setmodel(e, s);
+               setorigin(e, view_origin);
+               e.angles = view_angles;
+               e.draw = DrawDebugModel;
+               e.classname = "debugmodel";
+       }
+    else if(cmd == "vyes")
+    {
+        if(uid2name_dialog)
+        {
+            vote_active = 0; // force the panel to disappear right as we have selected the value (to prevent it from fading out in the normal vote panel pos)
+            vote_prev = 0;
+            localcmd("setreport cl_allow_uid2name 1\n");
+            vote_change = -9999;
+                       uid2name_dialog = 0;
+        }
+        else
+        {
+            localcmd("cmd vote yes\n");
+        }
+    }
+    else if(cmd == "vno")
+    {
+        if(uid2name_dialog)
+        {
+            vote_active = 0;
+            vote_prev = 0;
+            localcmd("setreport cl_allow_uid2name 0\n");
+            vote_change = -9999;
+                       uid2name_dialog = 0;
+        }
+        else
+        {
+            localcmd("cmd vote no\n");
+        }
+    }
+
+       else
+       {
+               print("Invalid command. For a list of supported commands, try cl_cmd help.\n");
+       }
+
+       return;
+}
+
+
+// ===================================
+//  Macro system for console commands
+// ===================================
+
+#define CONSOLE_COMMANDS_NORMAL \
+       CONSOLE_COMMAND("+showscores", { scoreboard_showscores = TRUE; }) \
+       CONSOLE_COMMAND("-showscores", { scoreboard_showscores = FALSE; }) \
+       CONSOLE_COMMAND("+showaccuracy", { scoreboard_showaccuracy = TRUE; }) \
+       CONSOLE_COMMAND("-showaccuracy", { scoreboard_showaccuracy = FALSE; }) \
+       /* nothing */
+       
+#define CONSOLE_COMMANDS_MOVEMENT \
+       CONSOLE_COMMAND("+forward", { ++camera_direction_x; }) \
+       CONSOLE_COMMAND("-forward", { --camera_direction_x; }) \
+       CONSOLE_COMMAND("+back", { --camera_direction_x; }) \
+       CONSOLE_COMMAND("-back", { ++camera_direction_x; }) \
+       CONSOLE_COMMAND("+moveup", { ++camera_direction_z; }) \
+       CONSOLE_COMMAND("-moveup", { --camera_direction_z; }) \
+       CONSOLE_COMMAND("+movedown", { --camera_direction_z; }) \
+       CONSOLE_COMMAND("-movedown", { ++camera_direction_z; }) \
+       CONSOLE_COMMAND("+moveright", { --camera_direction_y; }) \
+       CONSOLE_COMMAND("-moveright", { ++camera_direction_y; }) \
+       CONSOLE_COMMAND("+moveleft", { ++camera_direction_y; }) \
+       CONSOLE_COMMAND("-moveleft", { --camera_direction_y; }) \
+       CONSOLE_COMMAND("+roll_right", { ++camera_roll; }) \
+       CONSOLE_COMMAND("-roll_right", { --camera_roll; }) \
+       CONSOLE_COMMAND("+roll_left", { --camera_roll; }) \
+       CONSOLE_COMMAND("-roll_left", { ++camera_roll; }) \
+       /* nothing */
+
+void ConsoleCommand_macro_init()
+{
+       // first init normal commands
+       #define CONSOLE_COMMAND(name,execution) \
+               { registercmd(name); }
+
+       CONSOLE_COMMANDS_NORMAL
+       #undef CONSOLE_COMMAND
+       
+       // then init movement commands
+       #ifndef CAMERATEST
+       if(isdemo())
+       {
+       #endif
+               #define CONSOLE_COMMAND(name,execution) \
+                       { registercmd(name); }
+
+               CONSOLE_COMMANDS_MOVEMENT
+               #undef CONSOLE_COMMAND
+       #ifndef CAMERATEST
+       }
+       #endif
+       
+       return;
+}
+
+float ConsoleCommand_macro_normal(float argc)
+{
+       #define CONSOLE_COMMAND(name,execution) \
+               { if(name == strtolower(argv(0))) { execution; return TRUE; } }
+               
+       CONSOLE_COMMANDS_NORMAL
+       #undef CONSOLE_COMMAND
+       
+       return FALSE;
+}
+
+float ConsoleCommand_macro_movement(float argc)
+{
+       if(camera_active)
+       {
+               #define CONSOLE_COMMAND(name,execution) \
+                       { if(name == strtolower(argv(0))) { execution; return TRUE; } }
+
+               CONSOLE_COMMANDS_MOVEMENT
+               #undef CONSOLE_COMMAND
+       }
+       
+       return FALSE;
+}
+
+
+// ======================================================
+//  Main Function Called By Engine (registered commands)
+// ======================================================
+// Used to parse commands in the console that have been registered with the "registercmd" function
+
+float CSQC_ConsoleCommand(string command)
+{
+       float argc = tokenize_console(command);
+
+       if(ConsoleCommand_macro_normal(argc))
+       {
+               return TRUE;
+       }
+       else if(ConsoleCommand_macro_movement(argc))
+       {
+               return TRUE;
+       }
+       
+       // Return value should be 1 if CSQC handled the command, otherwise return 0 to have the engine handle it.
+
+       return FALSE;
+}
\ No newline at end of file
index f650d04bda64703050ecd00610833db629dd7dcc..168b797b097789542ec5031f7307acf887226718 100644 (file)
@@ -75,6 +75,7 @@ movetypes.qc
 prandom.qc
 bgmscript.qc
 noise.qc
+gamecommand.qc
 
 ../common/util.qc
 ../common/gamecommand.qc