]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/campaign.qc
Merge branch 'master' into Mario/speed_var
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / campaign.qc
index 76e2cdeb8480069230118925719d77d9e105ae5b..1a01868fb3b1cc660d0e2720dac392dfdafef648 100644 (file)
@@ -21,11 +21,6 @@ string campaign_index_var;
 
 float CampaignBailout(string s)
 {
-#if 0
-       cvar = cvar_normal;
-       cvar_string = cvar_string_normal;
-       cvar_set = cvar_set_normal;
-#endif
        cvar_set("g_campaign", "0");
        LOG_INFO("^4campaign initialization failed: ", s);
        if(autocvar__campaign_testrun)
@@ -33,35 +28,6 @@ float CampaignBailout(string s)
        return 1;
 }
 
-#if 0
-string cvar_campaignwrapper_list; // string of format ; var value; var value; var value;
-string cvar_string_campaignwrapper(string theCvar)
-{
-       float p, q;
-       p = strstrofs(cvar_campaignwrapper_list, strcat("; ", theCvar, " "), 0);
-       if(p < 0)
-               return cvar_defstring(theCvar);
-       p += strlen(theCvar) + 3;
-       q = strstrofs(cvar_campaignwrapper_list, ";", p);
-       if(q < 0)
-               return cvar_defstring(theCvar);
-       return substring(cvar_campaignwrapper_list, p, q - p);
-}
-float cvar_campaignwrapper(string theCvar)
-{
-       return stof(cvar_string_campaignwrapper(theCvar));
-}
-void cvar_set_campaignwrapper(string theCvar, string theValue)
-{
-       if(cvar_string_campaignwrapper(theCvar) == theValue)
-               return;
-       string s = cvar_campaignwrapper_list;
-       cvar_campaignwrapper_list = strzone(strcat("; ", theCvar, " ", theValue, s));
-       strunzone(s);
-       //print(cvar_campaignwrapper_list, "\n");
-}
-#endif
-
 float Campaign_Invalid()
 {
        string thismapname, wantedmapname;
@@ -75,10 +41,19 @@ float Campaign_Invalid()
        return 0;
 }
 
+int Campaign_GetLevelNum()
+{
+       return campaign_level + 1;
+}
+
+string Campaign_GetMessage()
+{
+       return strcat(campaign_shortdesc[0], "\n^3\n", campaign_longdesc[0]);
+}
+
 void CampaignPreInit()
 {
        float baseskill;
-       string title;
        campaign_level = autocvar__campaign_index;
        campaign_name = strzone(autocvar__campaign_name);
        campaign_index_var = strzone(strcat("g_campaign", campaign_name, "_index"));
@@ -98,19 +73,12 @@ void CampaignPreInit()
                return;
        }
 
-       baseskill = autocvar_g_campaign_skill;
-       baseskill = baseskill + campaign_botskill[0];
-       if(baseskill < 0)
-               baseskill = 0;
-
+       baseskill = max(0, autocvar_g_campaign_skill + campaign_botskill[0]);
        campaign_forcewin = false;
 
        cvar_set("sv_public", "0");
        cvar_set("pausable", "1");
 
-#if 0
-       cvar_campaignwrapper_list = strzone(strcat("; ", campaign_mutators[0], "; "));
-#else
        string cvar_campaignwrapper_list = strcat("; ", campaign_mutators[0], "; ");
        int argc = tokenizebyseparator(cvar_campaignwrapper_list, "; ");
        if(argc > 0)
@@ -119,38 +87,19 @@ void CampaignPreInit()
                {
                        string arg = argv(j);
                        if(arg == "") continue;
-                       _MapInfo_Parse_Settemp(mapname, MAPINFO_SETTEMP_ACL_USER, 0, arg, 0); // no recursion!
+                       _MapInfo_Parse_Settemp(mapname, MAPINFO_SETTEMP_ACL_USER, 0, arg, 1);
                }
        }
-#endif
-
-#if 0
-       cvar = cvar_campaignwrapper;
-       cvar_string = cvar_string_campaignwrapper;
-       cvar_set = cvar_set_campaignwrapper;
-       cvar_set("g_campaign", "1");
-       cvar_set("g_dm", "0");
-       cvar_set("skill", ftos(baseskill));
-       cvar_set("bot_number", ftos(campaign_bots[0]));
-#else
+
        cvar_settemp("g_campaign", "1");
        cvar_settemp("g_dm", "0");
        cvar_settemp("skill", ftos(baseskill));
        cvar_settemp("bot_number", ftos(campaign_bots[0]));
-#endif
-       MapInfo_SwitchGameType(MapInfo_Type_FromString(campaign_gametype[0]));
 
-       // copy sv_gravity cvar, as the engine needs it too (sorry, this will mess
-       // with the menu a little still...)
-       cvar_set_normal("sv_gravity", ftos(autocvar_sv_gravity));
+       MapInfo_SwitchGameType(MapInfo_Type_FromString(campaign_gametype[0]));
 
        if(Campaign_Invalid())
                return;
-
-       title = campaign_shortdesc[0];
-       title = strzone(strcat("Level ", ftos(campaign_level + 1), ": ", title));
-       campaign_message = strzone(strcat(title, "\n^3\n", campaign_longdesc[0], "\n\n^1press jump to enter the game"));
-       strunzone(title);
 }
 
 void CampaignPostInit()
@@ -161,16 +110,22 @@ void CampaignPostInit()
        if(autocvar__campaign_testrun)
        {
                cvar_set("fraglimit", "0");
+               cvar_set("leadlimit", "0");
                cvar_set("timelimit", "0.01");
-               cvar_set_normal("fraglimit", "0");
-               cvar_set_normal("timelimit", "0.01");
        }
        else
        {
-               cvar_set("fraglimit", ftos(campaign_fraglimit[0]));
-               cvar_set("timelimit", ftos(campaign_timelimit[0]));
-               cvar_set_normal("fraglimit", ftos(campaign_fraglimit[0]));
-               cvar_set_normal("timelimit", ftos(campaign_timelimit[0]));
+               // "default" uses implicit values, "" or "0" means no limit
+               tokenizebyseparator(campaign_fraglimit[0], "+");
+               if(argv(0) != "default") {
+                       cvar_set("fraglimit", argv(0));
+               }
+               if(argv(1) != "default") {
+                       cvar_set("leadlimit", argv(1));
+               }
+               if(campaign_timelimit[0] != "default") {
+                       cvar_set("timelimit", campaign_timelimit[0]);
+               }
        }
 }
 
@@ -182,7 +137,7 @@ void CampaignSaveCvar(string cvarname, float value)
        string l;
 
        registercvar(cvarname, ftos(value));
-       cvar_set_normal(cvarname, ftos(value));
+       cvar_set(cvarname, ftos(value));
        // note: cvarname must be remembered
 
        fh = fopen("campaign.cfg", FILE_READ);
@@ -267,7 +222,7 @@ void CampaignPreIntermission()
 
        if(campaign_won && cheatcount_total == 0 && !autocvar__campaign_testrun)
        {
-               if(campaign_level == cvar_normal(campaign_index_var))
+               if(campaign_level == cvar(campaign_index_var))
                {
                        if(campaign_entries < 2)
                        {
@@ -301,7 +256,6 @@ void CampaignPostIntermission()
 
        CampaignSetup(campaign_won);
        CampaignFile_Unload();
-       strunzone(campaign_message);
        strunzone(campaign_index_var);
        strunzone(campaign_name);
        campaign_name = "";