]> 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 b17f2e7ba0b38b2b84b604121db1f8b8e4530a9a..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,6 +685,12 @@ void _MapInfo_Map_ApplyGametypeEx(string s, int pWantedType, int pThisType)
        }
 }
 
+Gametype MapInfo_Type(int t)
+{
+       FOREACH(Gametypes, it.items == t, LAMBDA(return it));
+       return NULL;
+}
+
 int MapInfo_Type_FromString(string t)
 {
 #define deprecate(from, to) do { \
@@ -723,14 +707,14 @@ int MapInfo_Type_FromString(string t)
        deprecate(assault, as);
        deprecate(race, rc);
        if (t == "all") return MAPINFO_TYPE_ALL;
-       FOREACH(MAPINFO_TYPES, it.mdl == t, LAMBDA(return it.items));
+       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 "";
 }
 
@@ -738,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");
 }
@@ -1249,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;
 }
@@ -1275,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")
        ));
 }