]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/mapinfo.qc
Allow maps and player models to require beating a campaign or reaching a given level...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mapinfo.qc
index 617bfe85e2cde2c78d3b0f1c8fd1e617732c34df..b372339f2d3d3a4b9cb87544aa0c5a11a69915e3 100644 (file)
@@ -9,10 +9,10 @@
     #include <common/monsters/_mod.qh>
 #endif
 
-bool autocvar_g_mapinfo_ignore_warnings;
 #ifdef MENUQC
-#define WARN_COND (!autocvar_g_mapinfo_ignore_warnings)
+#define WARN_COND false
 #else
+bool autocvar_g_mapinfo_ignore_warnings;
 #define WARN_COND (!autocvar_g_mapinfo_ignore_warnings && MapInfo_Map_bspname == mi_shortname)
 #endif
 
@@ -717,9 +717,11 @@ void _MapInfo_Parse_Settemp(string pFilename, string acl, float type, string s,
                if(type == 0) // server set
                {
                        LOG_TRACE("Applying temporary setting ", t, " := ", s);
+               #if 0
                        if(cvar("g_campaign"))
                                cvar_set(t, s); // this is a wrapper and is always temporary anyway; no need to backup old values then
                        else
+               #endif
                                cvar_settemp(t, s);
                }
                else
@@ -903,6 +905,23 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet
                        else if(WARN_COND)
                                LOG_WARN("Map ", pFilename, " supports unknown feature ", t, ", ignored");
                }
+               else if(t == "locked")
+               {
+                       t = car(s); s = cdr(s); f = stof(s);
+                       // hide the map based on campaign status
+                       if(f > 0)
+                       {
+                               // we need to have reached this level
+                               if(cvar(strcat("g_campaign_", t, "_index")) < f);
+                                       f |= MAPINFO_FLAG_LOCKED;
+                       }
+                       else
+                       {
+                               // we need to have won the campaign
+                               if(!cvar(strcat("g_campaign_", t, "_won")));
+                                       f |= MAPINFO_FLAG_LOCKED;
+                       }
+               }
                else if(t == "hidden")
                {
                        MapInfo_Map_flags |= MAPINFO_FLAG_HIDDEN;
@@ -1311,6 +1330,11 @@ int MapInfo_ForbiddenFlags()
 {
        int f = MAPINFO_FLAG_FORBIDDEN;
 
+#ifdef GAMEQC
+       if (!cvar("g_maplist_allow_locked"))
+#endif
+               f |= MAPINFO_FLAG_LOCKED;
+
 #ifdef GAMEQC
        if (!cvar("g_maplist_allow_hidden"))
 #endif