]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/mapinfo.qc
Allow campaigns to include configuration files in their mutator list string
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mapinfo.qc
index 8c381fb6067bd9cd29c9b362f7dd287ecaafeb99..f771b0f83cfea0d7c2a9545c96ea28f04af00d10 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
 
@@ -589,25 +589,25 @@ void _MapInfo_Map_ApplyGametypeEx(string s, Gametype pWantedType, Gametype pThis
        }
 }
 
-Gametype MapInfo_Type_FromString(string t)
+Gametype MapInfo_Type_FromString(string gtype)
 {
-#define deprecate(from, to) MACRO_BEGIN { \
-       if (t == #from) { \
-               string replacement = #to; \
-               if(WARN_COND) \
-                       LOG_WARNF("MapInfo_Type_FromString (probably %s): using deprecated name '%s'. Should use '%s'.", MapInfo_Map_bspname, t, replacement); \
-               t = replacement; \
-       } \
-} MACRO_END
-       deprecate(nexball, nb);
-       deprecate(freezetag, ft);
-       deprecate(keepaway, ka);
-       deprecate(invasion, inv);
-       deprecate(assault, as);
-       deprecate(race, rc);
-       FOREACH(Gametypes, it.mdl == t, return it);
+       string replacement = "";
+       switch (gtype)
+       {
+               case "nexball":   replacement = "nb"; break;
+               case "freezetag": replacement = "ft"; break;
+               case "keepaway":  replacement = "ka"; break;
+               case "invasion":  replacement = "inv"; break;
+               case "assault":   replacement = "as"; break;
+               case "race":      replacement = "rc"; break;
+       }
+       if (replacement != "" && WARN_COND)
+       {
+               LOG_WARNF("MapInfo_Type_FromString (probably %s): using deprecated name '%s'. Should use '%s'.", MapInfo_Map_bspname, gtype, replacement);
+               gtype = replacement;
+       }
+       FOREACH(Gametypes, it.mdl == gtype, return it);
        return NULL;
-#undef deprecate
 }
 
 string MapInfo_Type_Description(Gametype t)
@@ -665,15 +665,14 @@ void _MapInfo_Parse_Settemp(string pFilename, string acl, float type, string s,
                {
                        fh = fopen(s, FILE_READ);
                        if(fh < 0)
+                       {
                                if(WARN_COND)
                                        LOG_WARN("Map ", pFilename, " references not existing config file ", s);
+                       }
                        else
                        {
-                               for (;;)
+                               while((s = fgets(fh)))
                                {
-                                       if (!((s = fgets(fh))))
-                                               break;
-
                                        // catch different sorts of comments
                                        if(s == "")                    // empty lines
                                                continue;
@@ -715,9 +714,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
@@ -839,12 +840,6 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet
                                fputs(fh, sprintf("gametype %s // defaults: %s\n", MapInfo_Type_ToString(it), _MapInfo_GetDefaultEx(it)));
                        });
 
-                       if(fexists(strcat("scripts/", pFilename, ".arena")))
-                               fputs(fh, "settemp_for_type all sv_q3acompat_machineshotgunswap 1\n");
-
-                       if(fexists(strcat("scripts/", pFilename, ".defi")))
-                               fputs(fh, "settemp_for_type all sv_vq3compat 1\n");
-
                        fputs(fh, "// optional: fog density red green blue alpha mindist maxdist\n");
                        fputs(fh, "// optional: settemp_for_type (all|gametypename) cvarname value\n");
                        fputs(fh, "// optional: clientsettemp_for_type (all|gametypename) cvarname value\n");
@@ -951,19 +946,25 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet
                        t = car(s); s = cdr(s); d = stof(t);
                        t = car(s); s = cdr(s); e = stof(t);
                        if(s == "")
+                       {
                                if(WARN_COND)
                                        LOG_WARN("Map ", pFilename, " contains an incorrect size line (not enough params), syntax: size mins_x mins_y mins_z maxs_x maxs_y maxs_z");
+                       }
                        else
                        {
                                t = car(s); s = cdr(s); f = stof(t);
                                if(s != "")
+                               {
                                        if(WARN_COND)
                                                LOG_WARN("Map ", pFilename, " contains an incorrect size line (too many params), syntax: size mins_x mins_y mins_z maxs_x maxs_y maxs_z");
+                               }
                                else
                                {
                                        if(a >= d || b >= e || c >= f)
+                                       {
                                                if(WARN_COND)
                                                        LOG_WARN("Map ", pFilename, " contains an incorrect size line, mins have to be < maxs");
+                                       }
                                        else
                                        {
                                                MapInfo_Map_mins.x = a;
@@ -1013,8 +1014,10 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet
                else if(t == "fog")
                {
                        if (!cvar_value_issafe(s))
+                       {
                                if(WARN_COND)
                                        LOG_WARN("Map ", pFilename, " contains a potentially harmful fog setting, ignored");
+                       }
                        else
                                MapInfo_Map_fog = s;
                }
@@ -1030,8 +1033,10 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet
                        if(pGametypeToSet)
                        {
                                if (!cvar_value_issafe(t))
+                               {
                                        if(WARN_COND)
                                                LOG_WARN("Map ", pFilename, " contains a potentially harmful cdtrack, ignored");
+                               }
                                else
                                        MapInfo_Map_clientstuff = strcat(
                                                MapInfo_Map_clientstuff, "cd loop \"", t, "\"\n"
@@ -1133,7 +1138,9 @@ string MapInfo_FixName(string s)
 int MapInfo_CurrentFeatures()
 {
        int req = 0;
-       if(!(cvar("g_lms") || cvar("g_instagib") || cvar("g_overkill") || cvar("g_nix") || cvar("g_weaponarena") || !cvar("g_pickup_items") || cvar("g_race") || cvar("g_cts") || cvar("g_nexball")))
+    // TODO: find a better way to check if weapons are required on the map
+       if(!(cvar("g_instagib") || cvar("g_overkill") || cvar("g_nix") || cvar("g_weaponarena") || !cvar("g_pickup_items") 
+               || cvar("g_race") || cvar("g_cts") || cvar("g_nexball") || cvar("g_ca") || cvar("g_freezetag") || cvar("g_lms")))
                req |= MAPINFO_FEATURE_WEAPONS;
        return req;
 }