]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/Main.qc
try fixing issues with cl_gunalign
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / Main.qc
index c47d1388f198af483684f3e874ce79d2e5ac3e09..7f6b9ea238a18f22db08529b738e6fb7ace80da5 100644 (file)
@@ -60,6 +60,10 @@ void CSQC_Init(void)
        
        check_unacceptable_compiler_bugs();
 
+#ifdef WATERMARK
+       print("^4CSQC Build information: ", WATERMARK(), "\n");
+#endif
+
        float i;
        CSQC_CheckEngine();
 
@@ -82,12 +86,15 @@ void CSQC_Init(void)
        // localcmd("alias order \"cmd order $*\""); enable if ctf-command thingy is used
        //registercmd("ctf_menu");
        registercmd("ons_map");
+       registercmd("hud_configure");
+       registercmd("hud_save");
        //registercmd("menu_action");
 
        registercmd("+button3");
        registercmd("-button3");
        registercmd("+button4");
        registercmd("-button4");
+       registercmd("+showscores");registercmd("-showscores");
        registercmd("+showaccuracy");registercmd("-showaccuracy");
 
 #ifndef CAMERATEST
@@ -106,7 +113,7 @@ void CSQC_Init(void)
        }
 #endif
        registercvar("hud_usecsqc", "1");
-       registercvar("hud_columns", "default", CVAR_SAVE);
+       registercvar("scoreboard_columns", "default", CVAR_SAVE);
 
        gametype = 0;
 
@@ -123,8 +130,6 @@ void CSQC_Init(void)
 
        GetTeam(COLOR_SPECTATOR, true); // add specs first
 
-       cvar_clientsettemp("_supports_weaponpriority", "1");
-
        RegisterWeapons();
 
        WaypointSprite_Load();
@@ -178,6 +183,7 @@ void CSQC_Init(void)
        minimapname = strzone(minimapname);
 
        WarpZone_Init();
+       hud_configure_prev = -1;
 }
 
 // CSQC_Shutdown : Called every time the CSQC code is shutdown (changing maps, quitting, etc)
@@ -207,9 +213,9 @@ void CSQC_Shutdown(void)
        if not(isdemo())
        {
                if not(calledhooks & HOOK_START)
-                       localcmd("\n_cl_hook_gamestart nop;");
+                       localcmd("\n_cl_hook_gamestart nop\n");
                if not(calledhooks & HOOK_END)
-                       localcmd("\ncl_hook_gameend;");
+                       localcmd("\ncl_hook_gameend\n");
        }
 }
 
@@ -335,7 +341,7 @@ void TrueAim_Init();
 void PostInit(void)
 {
        print(strcat("PostInit\n    maxclients = ", ftos(maxclients), "\n"));
-       localcmd(strcat("\nhud_columns_set ", cvar_string("hud_columns"), ";\n"));
+       localcmd(strcat("\nscoreboard_columns_set ", cvar_string("scoreboard_columns"), ";\n"));
 
        entity playerchecker;
        playerchecker = spawn();
@@ -364,7 +370,18 @@ float CSQC_ConsoleCommand(string strMessage)
        local string strCmd;
        strCmd = argv(0);
 
-       if(strCmd == "+button4") { // zoom
+       if(strCmd == "hud_configure") { // config hud
+               cvar_set("_hud_configure", ftos(!cvar("_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 == "+button4") { // zoom
                // return false, because the message shall be sent to the server anyway (for demos/speccing)
                if(ignore_plus_zoom)
                {
@@ -388,16 +405,16 @@ float CSQC_ConsoleCommand(string strMessage)
                button_attack2 = 0;
                return false;
        } else if(strCmd == "+showscores") {
-               sb_showscores = true;
+               scoreboard_showscores = true;
                return true;
        } else if(strCmd == "-showscores") {
-               sb_showscores = false;
+               scoreboard_showscores = false;
                return true;
        } else if(strCmd == "+showaccuracy") {
-               sb_showaccuracy = true;
+               scoreboard_showaccuracy = true;
                return true;
        } else if(strCmd == "-showaccuracy") {
-               sb_showaccuracy = false;
+               scoreboard_showaccuracy = false;
                return true;
        }
 
@@ -505,9 +522,8 @@ void GameCommand(string msg)
        {
                print("Usage: cl_cmd COMMAND..., where possible commands are:\n");
                print("  settemp cvar value\n");
-               print("  radar\n");
-               print("  hud_columns_set ...\n");
-               print("  hud_columns_help\n");
+               print("  scoreboard_columns_set ...\n");
+               print("  scoreboard_columns_help\n");
                GameCommand_Generic("help");
                return;
        }
@@ -523,13 +539,10 @@ void GameCommand(string msg)
        else if(cmd == "settemp") {
                cvar_clientsettemp(argv(1), argv(2));
        }
-       else if(cmd == "radar") {
-               ons_showmap = !ons_showmap;
-       }
-       else if(cmd == "hud_columns_set") {
+       else if(cmd == "scoreboard_columns_set") {
                Cmd_HUD_SetFields(argc);
        }
-       else if(cmd == "hud_columns_help") {
+       else if(cmd == "scoreboard_columns_help") {
                Cmd_HUD_Help(argc);
        }
 #ifdef BLURTEST
@@ -584,12 +597,16 @@ void GameCommand(string msg)
                localcmd("sv_cmd debug_shotorg\n");
        }
        else if(cmd == "sendcvar") {
-               s = cvar_string(argv(1));
-               if(argv(1) == "cl_weaponpriority")
+               // 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(argv(1), 0, 17) == "cl_weaponpriority" && strlen(argv(1)) == 18)
+               else if(substring(thiscvar, 0, 17) == "cl_weaponpriority" && strlen(thiscvar) == 18)
                        s = W_FixWeaponOrder(W_NumberWeaponOrder(s), 0);
-               localcmd("cmd sentcvar ", argv(1), " \"", s, "\"\n");
+               localcmd("cmd sentcvar ", thiscvar, " \"", s, "\"\n");
+               strunzone(thiscvar);
        }
        else if(cmd == "spawn") {
                s = argv(1);
@@ -615,15 +632,13 @@ void GameCommand(string msg)
 // bInputType = 0 is key pressed, 1 is key released, 2 is mouse input.
 // In the case of keyboard input, nPrimary is the ascii code, and nSecondary is 0.
 // In the case of mouse input, nPrimary is xdelta, nSecondary is ydelta.
-float hudconf_active;
 float CSQC_InputEvent(float bInputType, float nPrimary, float nSecondary)
 {
        local float bSkipKey;
        bSkipKey = false;
 
-       if(hudconf_active)
-               if (HUD_Panel_InputEvent(bInputType, nPrimary, nSecondary))
-                       return true;
+       if (HUD_Panel_InputEvent(bInputType, nPrimary, nSecondary))
+               return true;
 
        if (MapVote_InputEvent(bInputType, nPrimary, nSecondary))
                return true;
@@ -766,7 +781,7 @@ void Ent_ClientData()
 
        f = ReadByte();
 
-       sb_showscores_force = (f & 1);
+       scoreboard_showscores_force = (f & 1);
 
        if(f & 2)
        {
@@ -946,14 +961,11 @@ void Gamemode_Init()
                precache_pic("gfx/ons-cp-blue.tga");
                precache_pic("gfx/ons-frame.tga");
                precache_pic("gfx/ons-frame-team.tga");
-       } else if(gametype == GAME_KEYHUNT) {
-               precache_pic("gfx/sb_key_carrying");
-               precache_pic("gfx/sb_key_carrying_outline");
        }
 
        if not(isdemo())
        {
-               localcmd("\n_cl_hook_gamestart ", GametypeNameFromType(gametype), ";");
+               localcmd("\n_cl_hook_gamestart ", GametypeNameFromType(gametype), "\n");
                calledhooks |= HOOK_START;
        }
 }
@@ -1010,9 +1022,14 @@ void Ent_Init()
 
        nb_pb_period = ReadByte() / 32; //Accuracy of 1/32th
 
-       hook_shotorigin_x = ReadCoord();
-       hook_shotorigin_y = ReadCoord();
-       hook_shotorigin_z = ReadCoord();
+       hook_shotorigin[0] = decompressShotOrigin(ReadInt24_t());
+       hook_shotorigin[1] = decompressShotOrigin(ReadInt24_t());
+       hook_shotorigin[2] = decompressShotOrigin(ReadInt24_t());
+       hook_shotorigin[3] = decompressShotOrigin(ReadInt24_t());
+       electro_shotorigin[0] = decompressShotOrigin(ReadInt24_t());
+       electro_shotorigin[1] = decompressShotOrigin(ReadInt24_t());
+       electro_shotorigin[2] = decompressShotOrigin(ReadInt24_t());
+       electro_shotorigin[3] = decompressShotOrigin(ReadInt24_t());
 
        if(forcefog)
                strunzone(forcefog);
@@ -1212,13 +1229,13 @@ void Net_ReadPingPLReport()
 
 void Net_VoteDialog(float highlight) {
        if(highlight) {
-               vote_highlighted = ReadShort();
+               vote_highlighted = ReadByte();
                return;
        }
 
-       vote_yescount = ReadShort();
-       vote_nocount = ReadShort();
-       vote_needed = ReadShort();
+       vote_yescount = ReadByte();
+       vote_nocount = ReadByte();
+       vote_needed = ReadByte();
        vote_active = 1;
 }
 
@@ -1226,6 +1243,32 @@ void Net_VoteDialogReset() {
        vote_active = 0;
 }
 
+void Net_Notify() {
+       float type;
+       type = ReadByte();
+
+       if(type == CSQC_KILLNOTIFY)
+       {
+               HUD_KillNotify(ReadString(), ReadString(), ReadString(), ReadShort(), ReadByte());
+       }
+       else if(type == CSQC_CENTERPRINT)
+       {
+               HUD_Centerprint(ReadString(), ReadString(), ReadShort(), ReadByte());
+       }
+}
+
+void Net_WeaponComplain() {
+       complain_weapon = ReadByte();
+
+       if(complain_weapon_name)
+               strunzone(complain_weapon_name);
+       complain_weapon_name = strzone(ReadString());
+
+       complain_weapon_type = ReadByte();
+
+       complain_weapon_time = time;
+}
+
 // CSQC_Parse_TempEntity : Handles all temporary entity network data in the CSQC layer.
 // You must ALWAYS first acquire the temporary ID, which is sent as a byte.
 // Return value should be 1 if CSQC handled the temporary entity, otherwise return 0 to have the engine process the event.
@@ -1252,7 +1295,7 @@ float CSQC_Parse_TempEntity()
                        Net_ReadRace();
                        bHandled = true;
                        break;
-               case 13: // TE_BEAM
+               case TE_CSQC_BEAM:
                        Net_GrapplingHook();
                        bHandled = true;
                        break;
@@ -1292,6 +1335,14 @@ float CSQC_Parse_TempEntity()
                        announce_snd = strzone(ReadString());
                        bHandled = true;
                        break;
+               case TE_CSQC_NOTIFY:
+                       Net_Notify();
+                       bHandled = true;
+                       break;
+               case TE_CSQC_WEAPONCOMPLAIN:
+                       Net_WeaponComplain();
+                       bHandled = true;
+                       break;
                default:
                        // No special logic for this temporary entity; return 0 so the engine can handle it
                        bHandled = false;