]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/mapinfo.qh
remove g_ctf_win_mode
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mapinfo.qh
index 2ce5d60c9032eb4136652baf42be37ad5fbb98e1..e47a28369f783589cfae824b6b603a61e0b91a03 100644 (file)
@@ -1,22 +1,89 @@
-float MAPINFO_TYPE_DEATHMATCH          = 1;
-float MAPINFO_TYPE_LMS                 = 2;
-float MAPINFO_TYPE_ARENA               = 4;
-float MAPINFO_TYPE_RUNEMATCH           = 8;
-float MAPINFO_TYPE_RACE                        = 16;
-float MAPINFO_TYPE_CTS                 = 32;
-float MAPINFO_TYPE_TEAM_DEATHMATCH     = 64;
-float MAPINFO_TYPE_CTF                 = 128;
-float MAPINFO_TYPE_CA                  = 256;
-float MAPINFO_TYPE_DOMINATION          = 512;
-float MAPINFO_TYPE_KEYHUNT             = 1024;
-float MAPINFO_TYPE_ASSAULT             = 2048;
-float MAPINFO_TYPE_ONSLAUGHT           = 4096;
-float MAPINFO_TYPE_NEXBALL             = 8192;
-float MAPINFO_TYPE_FREEZETAG           = 16384;
-float MAPINFO_TYPE_KEEPAWAY    = 32768;
-float MAPINFO_TYPE_ALL                 = 65535; // this has to include all above bits
+var float MAPINFO_TYPE_ALL = 0;
+entity MapInfo_Type_first;
+entity MapInfo_Type_last;
+.entity enemy; // internal next pointer
+
+.float weapons; // game type ID
+.string netname; // game type name as in cvar (with g_ prefix)
+.string mdl; // game type short name
+.string message; // human readable name
+.string model2; // game type defaults
+
+#define REGISTER_GAMETYPE(hname,sname,g_name,NAME,defaults) \
+       var float MAPINFO_TYPE_##NAME; \
+       var entity MapInfo_Type##g_name; \
+       void RegisterGametypes_##g_name() \
+       { \
+               MAPINFO_TYPE_##NAME = MAPINFO_TYPE_ALL + 1; \
+               MAPINFO_TYPE_ALL |= MAPINFO_TYPE_##NAME; \
+               MapInfo_Type##g_name = spawn(); \
+               MapInfo_Type##g_name.weapons = MAPINFO_TYPE_##NAME; \
+               MapInfo_Type##g_name.netname = #g_name; \
+               MapInfo_Type##g_name.mdl = #sname; \
+               MapInfo_Type##g_name.message = hname; \
+               MapInfo_Type##g_name.model2 = defaults; \
+               if(!MapInfo_Type_first) \
+                       MapInfo_Type_first = MapInfo_Type##g_name; \
+               if(MapInfo_Type_last) \
+                       MapInfo_Type_last.enemy = MapInfo_Type##g_name; \
+               MapInfo_Type_last = MapInfo_Type##g_name; \
+       } \
+       ACCUMULATE_FUNCTION(RegisterGametypes, RegisterGametypes_##g_name)
+
+#define IS_GAMETYPE(NAME) \
+       (MapInfo_LoadedGametype == MAPINFO_TYPE_##NAME)
+
+REGISTER_GAMETYPE(_("Deathmatch"),dm,g_dm,DEATHMATCH,"timelimit=20 pointlimit=30 leadlimit=0")
+#define g_dm IS_GAMETYPE(DEATHMATCH)
+
+REGISTER_GAMETYPE(_("Last Man Standing"),lms,g_lms,LMS,"timelimit=20 lives=9 leadlimit=0")
+#define g_lms IS_GAMETYPE(LMS)
+
+REGISTER_GAMETYPE(_("Arena"),arena,g_arena,ARENA,"timelimit=20 pointlimit=10 leadlimit=0")
+#define g_arena IS_GAMETYPE(ARENA)
+
+REGISTER_GAMETYPE(_("Runematch"),rune,g_runematch,RUNEMATCH,"timelimit=20 pointlimit=200 leadlimit=0")
+#define g_runematch IS_GAMETYPE(RUNEMATCH)
+
+REGISTER_GAMETYPE(_("Race"),rc,g_race,RACE,"timelimit=20 qualifying_timelimit=5 laplimit=7 teamlaplimit=15 leadlimit=0")
+#define g_race IS_GAMETYPE(RACE)
+
+REGISTER_GAMETYPE(_("Race CTS"),cts,g_cts,CTS,"timelimit=20 skill=-1")
+#define g_cts IS_GAMETYPE(CTS)
+
+REGISTER_GAMETYPE(_("Team Deathmatch"),tdm,g_tdm,TEAM_DEATHMATCH,"timelimit=20 pointlimit=50 teams=2 leadlimit=0")
+#define g_tdm IS_GAMETYPE(TEAM_DEATHMATCH)
+
+REGISTER_GAMETYPE(_("Capture the Flag"),ctf,g_ctf,CTF,"timelimit=20 caplimit=10 leadlimit=0")
+#define g_ctf IS_GAMETYPE(CTF)
+
+REGISTER_GAMETYPE(_("Clan Arena"),ca,g_ca,CA,"timelimit=20 pointlimit=10 leadlimit=0")
+#define g_ca IS_GAMETYPE(CA)
+
+REGISTER_GAMETYPE(_("Domination"),dom,g_domination,DOMINATION,"timelimit=20 pointlimit=200 teams=2 leadlimit=0")
+#define g_domination IS_GAMETYPE(DOMINATION)
+
+REGISTER_GAMETYPE(_("Key Hunt"),kh,g_keyhunt,KEYHUNT,"timelimit=20 pointlimit=1000 teams=3 leadlimit=0")
+#define g_keyhunt IS_GAMETYPE(KEYHUNT)
+
+REGISTER_GAMETYPE(_("Assault"),as,g_assault,ASSAULT,"timelimit=20")
+#define g_assault IS_GAMETYPE(ASSAULT)
+
+REGISTER_GAMETYPE(_("Onslaught"),ons,g_onslaught,ONSLAUGHT,"timelimit=20")
+#define g_onslaught IS_GAMETYPE(ONSLAUGHT)
+
+REGISTER_GAMETYPE(_("Nexball"),nexball,g_nexball,NEXBALL,"timelimit=20 pointlimit=5 leadlimit=0")
+#define g_nexball IS_GAMETYPE(NEXBALL)
+
+REGISTER_GAMETYPE(_("Freeze Tag"),freezetag,g_freezetag,FREEZETAG,"timelimit=20 pointlimit=10 teams=2 leadlimit=0")
+#define g_freezetag IS_GAMETYPE(FREEZETAG)
+
+REGISTER_GAMETYPE(_("Keepaway"),keepaway,g_keepaway,KEEPAWAY,"timelimit=20 pointlimit=30")
+#define g_keepaway IS_GAMETYPE(KEEPAWAY)
 
 float MAPINFO_FEATURE_WEAPONS       = 1; // not defined for minstagib-only maps
+float MAPINFO_FEATURE_VEHICLES      = 2;
+float MAPINFO_FEATURE_TURRETS       = 4;
 
 float MAPINFO_FLAG_HIDDEN           = 1; // not in lsmaps/menu/vcall/etc., can just be changed to manually
 float MAPINFO_FLAG_FORBIDDEN        = 2; // don't even allow the map by a cvar setting that allows hidden maps
@@ -27,6 +94,7 @@ float MapInfo_count;
 // info about a map that MapInfo loads
 string MapInfo_Map_bspname;
 string MapInfo_Map_title;
+string MapInfo_Map_titlestring; // either bspname: title or just title, depending on whether bspname is redundant
 string MapInfo_Map_description;
 string MapInfo_Map_author;
 string MapInfo_Map_clientstuff; // not in cache, only for map load
@@ -64,7 +132,7 @@ string MapInfo_FixName(string s);
 
 // play a map
 float MapInfo_CheckMap(string s); // returns 0 if the map can't be played with the current settings
-void MapInfo_LoadMap(string s);
+void MapInfo_LoadMap(string s, float reinit);
 
 // list all maps for the current game type
 string MapInfo_ListAllowedMaps(float pFlagsRequired, float pFlagsForbidden);
@@ -74,11 +142,12 @@ string MapInfo_ListAllAllowedMaps(float pFlagsRequired, float pFlagsForbidden);
 // gets a gametype from a string
 float MapInfo_Type_FromString(string t);
 string MapInfo_Type_ToString(float t);
-string MapInfo_GetGameTypeCvar(float t);
+string MapInfo_Type_ToText(float t);
 void MapInfo_SwitchGameType(float t);
 
 // to be called from worldspawn to set up cvars
 void MapInfo_LoadMapSettings(string s);
+float MapInfo_LoadedGametype; // game type that was active during map load
 
 void MapInfo_Cache_Destroy(); // disable caching
 void MapInfo_Cache_Create(); // enable caching
@@ -89,4 +158,4 @@ void MapInfo_ClearTemps(); // call this when done with mapinfo for this frame
 void MapInfo_Shutdown(); // call this in the shutdown handler
 
 #define MAPINFO_SETTEMP_ACL_USER cvar_string("g_mapinfo_settemp_acl")
-#define MAPINFO_SETTEMP_ACL_SYSTEM "-g_mapinfo_* -rcon_* -settemp_* -_* -g_ban* +*"
+#define MAPINFO_SETTEMP_ACL_SYSTEM "-g_mapinfo_* -rcon_* -_* -g_ban* +*"