]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/mapinfo.qc
Hide the MOTD when going spec
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mapinfo.qc
index eff61dbdf713621fdb950acb44f4035408068c99..4f856670b8110ee26731dffc67b5305159439e6d 100644 (file)
@@ -1,16 +1,13 @@
 #if defined(CSQC)
-       #include "../dpdefs/csprogsdefs.qh"
     #include "../client/defs.qh"
     #include "util.qh"
-    #include "buffs.qh"
+    #include "buffs/all.qh"
     #include "weapons/all.qh"
     #include "mapinfo.qh"
 #elif defined(MENUQC)
 #elif defined(SVQC)
-       #include "../dpdefs/progsdefs.qh"
-    #include "../dpdefs/dpextensions.qh"
     #include "util.qh"
-    #include "buffs.qh"
+    #include "buffs/all.qh"
     #include "monsters/all.qh"
     #include "mapinfo.qh"
 #endif
@@ -602,25 +599,20 @@ void _MapInfo_Map_ApplyGametype(string s, int pWantedType, int pThisType, int lo
 
 string _MapInfo_GetDefaultEx(float t)
 {
-       FOREACH(MAPINFO_TYPES, it.items == t, LAMBDA(return it.model2));
+       FOREACH(Gametypes, it.items == t, LAMBDA(return it.model2));
        return "";
 }
 
 float _MapInfo_GetTeamPlayBool(float t)
 {
-       FOREACH(MAPINFO_TYPES, it.items == t, LAMBDA(return it.team));
+       FOREACH(Gametypes, it.items == t, LAMBDA(return it.team));
        return false;
 }
 
 void _MapInfo_Map_ApplyGametypeEx(string s, int pWantedType, int pThisType)
 {
-       string sa, k, v;
-       float p;
-       string fraglimit_normal;
-       string fraglimit_teams;
-
        MapInfo_Map_supportedGametypes |= pThisType;
-       if(!(pThisType & pWantedType))
+       if (!(pThisType & pWantedType))
                return;
 
        // reset all the cvars to their defaults
@@ -628,74 +620,60 @@ void _MapInfo_Map_ApplyGametypeEx(string s, int pWantedType, int pThisType)
        cvar_set("timelimit", cvar_defstring("timelimit"));
        cvar_set("leadlimit", cvar_defstring("leadlimit"));
        cvar_set("fraglimit", cvar_defstring("fraglimit"));
-       cvar_set("g_tdm_teams", cvar_defstring("g_tdm_teams"));
-       cvar_set("g_ca_teams", cvar_defstring("g_ca_teams"));
-       cvar_set("g_freezetag_teams", cvar_defstring("g_freezetag_teams"));
-       cvar_set("g_keyhunt_teams", cvar_defstring("g_keyhunt_teams"));
-       cvar_set("g_domination_default_teams", cvar_defstring("g_domination_default_teams"));
-       cvar_set("g_race_qualifying_timelimit", cvar_defstring("g_race_qualifying_timelimit"));
-
-       fraglimit_normal = string_null;
-       fraglimit_teams = string_null;
-
-       s = strcat(_MapInfo_GetDefaultEx(pWantedType), " ", s);
-       while(s != "")
-       {
-               sa = car(s);
-               s = cdr(s);
+       FOREACH(Gametypes, true, LAMBDA(it.m_parse_mapinfo(string_null, string_null)));
 
-               if(sa == "")
-                       continue;
+       string fraglimit_normal = string_null;
+       string fraglimit_teams = string_null;
 
-               p = strstrofs(sa, "=", 0);
-               if(p < 0)
-               {
-                       LOG_INFO("Invalid gametype setting in mapinfo for gametype ", MapInfo_Type_ToString(pWantedType), ": ", sa, "\n");
+       for (s = strcat(_MapInfo_GetDefaultEx(pWantedType), " ", s); s != ""; s = cdr(s)) {
+               string sa = car(s);
+               if (sa == "") continue;
+               int p = strstrofs(sa, "=", 0);
+               if (p < 0) {
+                       LOG_WARNINGF("Invalid gametype setting in mapinfo for gametype %s: %s\n", MapInfo_Type_ToString(pWantedType), sa);
                        continue;
                }
-               k = substring(sa, 0, p);
-               v = substring(sa, p+1, -1);
-
-               if(k == "timelimit")
-               {
-                       cvar_set("timelimit", v);
-               }
-               else if(k == "leadlimit")
-               {
-                       cvar_set("leadlimit", v);
-               }
-               else if(k == "pointlimit" || k == "fraglimit" || k == "lives" || k == "laplimit" || k == "caplimit")
-               {
-                       fraglimit_normal = v;
-               }
-               else if(k == "teampointlimit" || k == "teamlaplimit")
-               {
-                       fraglimit_teams = v;
-               }
-               else if(k == "teams")
-               {
-                       cvar_set("g_tdm_teams", v);
-                       cvar_set("g_ca_teams", v);
-                       cvar_set("g_freezetag_teams", v);
-                       cvar_set("g_keyhunt_teams", v);
-                       cvar_set("g_domination_default_teams", v);
-                       cvar_set("g_invasion_teams", v);
-               }
-               else if(k == "qualifying_timelimit")
-               {
-                       cvar_set("g_race_qualifying_timelimit", v);
-               }
-               else if(k == "skill")
-               {
-                       // ignore
-               }
-               else
-               {
-                       LOG_INFO("Invalid gametype setting in mapinfo for gametype ", MapInfo_Type_ToString(pWantedType), ": ", sa, "\n");
+               string k = substring(sa, 0, p);
+               string v = substring(sa, p + 1, -1);
+               bool handled = true;
+               switch (k) {
+                       case "timelimit":
+                       {
+                               cvar_set("timelimit", v);
+                               break;
+                       }
+                       case "leadlimit":
+                       {
+                               cvar_set("leadlimit", v);
+                               break;
+                       }
+                       case "pointlimit":
+                       case "fraglimit":
+                       case "lives":
+                       case "laplimit":
+                       case "caplimit":
+                       {
+                               fraglimit_normal = v;
+                               break;
+                       }
+                       case "teampointlimit":
+                       case "teamlaplimit":
+                       {
+                               fraglimit_teams = v;
+                               break;
+                       }
+                       default:
+                       {
+                           handled = false;
+                           break;
+                       }
                }
+               FOREACH(Gametypes, true, LAMBDA(handled |= it.m_parse_mapinfo(k, v)));
+               if (!handled)
+            LOG_WARNINGF("Invalid gametype setting in mapinfo for gametype %s: %s\n", MapInfo_Type_ToString(pWantedType), sa);
        }
 
-       if(pWantedType == MAPINFO_TYPE_RACE && cvar("g_race_teams") >= 2)
+       if (pWantedType == MAPINFO_TYPE_RACE && cvar("g_race_teams") >= 2)
        {
                if(fraglimit_teams)
                        cvar_set("fraglimit", fraglimit_teams);
@@ -707,53 +685,36 @@ void _MapInfo_Map_ApplyGametypeEx(string s, int pWantedType, int pThisType)
        }
 }
 
-float MapInfo_Type_FromString(string t)
+Gametype MapInfo_Type(int t)
 {
-       if(t == "nexball")
-       {
-               LOG_INFO("MapInfo_Type_FromString (probably ", MapInfo_Map_bspname, "): using deprecated name '", t);
-               t = "nb";
-               LOG_INFO("'. Should use '", t, "'.\n");
-       }
-       if(t == "freezetag")
-       {
-               LOG_INFO("MapInfo_Type_FromString (probably ", MapInfo_Map_bspname, "): using deprecated name '", t);
-               t = "ft";
-               LOG_INFO("'. Should use '", t, "'.\n");
-       }
-       if(t == "keepaway")
-       {
-               LOG_INFO("MapInfo_Type_FromString (probably ", MapInfo_Map_bspname, "): using deprecated name '", t);
-               t = "ka";
-               LOG_INFO("'. Should use '", t, "'.\n");
-       }
-       if(t == "invasion")
-       {
-               LOG_INFO("MapInfo_Type_FromString (probably ", MapInfo_Map_bspname, "): using deprecated name '", t);
-               t = "inv";
-               LOG_INFO("'. Should use '", t, "'.\n");
-       }
-       if(t == "assault")
-       {
-               LOG_INFO("MapInfo_Type_FromString (probably ", MapInfo_Map_bspname, "): using deprecated name '", t);
-               t = "as";
-               LOG_INFO("'. Should use '", t, "'.\n");
-       }
-       if(t == "race")
-       {
-               LOG_INFO("MapInfo_Type_FromString (probably ", MapInfo_Map_bspname, "): using deprecated name '", t);
-               t = "rc";
-               LOG_INFO("'. Should use '", t, "'.\n");
-       }
-       if(t == "all")
-               return MAPINFO_TYPE_ALL;
-       FOREACH(MAPINFO_TYPES, it.mdl == t, LAMBDA(return it.items));
+       FOREACH(Gametypes, it.items == t, LAMBDA(return it));
+       return NULL;
+}
+
+int MapInfo_Type_FromString(string t)
+{
+#define deprecate(from, to) do { \
+       if (t == #from) { \
+               string replacement = #to; \
+               LOG_WARNINGF("MapInfo_Type_FromString (probably %s): using deprecated name '%s'. Should use '%s'.\n", MapInfo_Map_bspname, t, replacement); \
+               t = replacement; \
+       } \
+} while (0)
+       deprecate(nexball, nb);
+       deprecate(freezetag, ft);
+       deprecate(keepaway, ka);
+       deprecate(invasion, inv);
+       deprecate(assault, as);
+       deprecate(race, rc);
+       if (t == "all") return MAPINFO_TYPE_ALL;
+       FOREACH(Gametypes, it.mdl == t, LAMBDA(return it.items));
        return 0;
+#undef deprecate
 }
 
 string MapInfo_Type_Description(float t)
 {
-       FOREACH(MAPINFO_TYPES, it.items == t, LAMBDA(return it.gametype_description));
+       FOREACH(Gametypes, it.items == t, LAMBDA(return it.gametype_description));
        return "";
 }
 
@@ -761,13 +722,13 @@ string MapInfo_Type_ToString(float t)
 {
        if(t == MAPINFO_TYPE_ALL)
                return "all";
-       FOREACH(MAPINFO_TYPES, it.items == t, LAMBDA(return it.mdl));
+       FOREACH(Gametypes, it.items == t, LAMBDA(return it.mdl));
        return "";
 }
 
 string MapInfo_Type_ToText(float t)
 {
-       FOREACH(MAPINFO_TYPES, it.items == t, LAMBDA(return it.message));
+       FOREACH(Gametypes, it.items == t, LAMBDA(return it.message));
        /* xgettext:no-c-format */
        return _("@!#%'n Tuba Throwing");
 }
@@ -1062,7 +1023,7 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, int p
                {
                        t = car(s); s = cdr(s);
                        f = MapInfo_Type_FromString(t);
-                       LOG_TRACE("Map ", pFilename, " contains the legacy 'type' keyword which is deprecated and will be removed in the future. Please migrate the mapinfo file to 'gametype'.\n");
+                       LOG_WARNING("Map ", pFilename, " contains the legacy 'type' keyword which is deprecated and will be removed in the future. Please migrate the mapinfo file to 'gametype'.\n");
                        if(f)
                                _MapInfo_Map_ApplyGametype (s, pGametypeToSet, f, true);
                        else
@@ -1272,7 +1233,7 @@ int MapInfo_CurrentFeatures()
 int MapInfo_CurrentGametype()
 {
        int prev = cvar("gamecfg");
-       FOREACH(MAPINFO_TYPES, cvar(it.netname) && it.items != prev, LAMBDA(return it.items));
+       FOREACH(Gametypes, cvar(it.netname) && it.items != prev, LAMBDA(return it.items));
        if (prev) return prev;
        return MAPINFO_TYPE_DEATHMATCH;
 }
@@ -1298,7 +1259,7 @@ float MapInfo_CheckMap(string s) // returns 0 if the map can't be played with th
 
 void MapInfo_SwitchGameType(int t)
 {
-       FOREACH(MAPINFO_TYPES, true, LAMBDA(
+       FOREACH(Gametypes, true, LAMBDA(
                cvar_set(it.netname, (it.items == t) ? "1" : "0")
        ));
 }