X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmapinfo.qh;h=952274a73aaf0fe584a47cf2f2583478345abe8c;hb=0ade80044244ecfd180e7a3dfc0113dcf3a26572;hp=2d350b2fed3c1b26c46cab2e3c58bcb598ce1436;hpb=f6efc137bef946957459ddfcd447114bc2c9b7a5;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/mapinfo.qh b/qcsrc/common/mapinfo.qh index 2d350b2fe..952274a73 100644 --- a/qcsrc/common/mapinfo.qh +++ b/qcsrc/common/mapinfo.qh @@ -21,6 +21,8 @@ const int GAMETYPE_FLAG_USEPOINTS = BIT(1); // gametype has point-based sc const int GAMETYPE_FLAG_PREFERRED = BIT(2); // preferred (when available) in random selections const int GAMETYPE_FLAG_PRIORITY = BIT(3); // priority selection when preferred gametype isn't available in random selections const int GAMETYPE_FLAG_HIDELIMITS = BIT(4); // don't display a score limit needed for winning the match in the scoreboard +const int GAMETYPE_FLAG_WEAPONARENA = BIT(5); // gametype has a forced weapon arena, weapon arena mutators should disable themselves when this is set +const int GAMETYPE_FLAG_1V1 = BIT(6); // 1v1 gameplay int MAPINFO_TYPE_ALL; .int m_flags; @@ -41,6 +43,10 @@ CLASS(Gametype, Object) ATTRIB(Gametype, frags, bool, true); /** should this gametype display a score limit in the scoreboard? */ ATTRIB(Gametype, m_hidelimits, bool, false); + /** does this gametype enforce its own weapon arena? */ + ATTRIB(Gametype, m_weaponarena, bool, false); + /** 1v1 gameplay? */ + ATTRIB(Gametype, m_1v1, bool, false); /** game type defaults */ ATTRIB(Gametype, model2, string); /** game type description */ @@ -107,6 +113,8 @@ CLASS(Gametype, Object) this.frags = (gflags & GAMETYPE_FLAG_USEPOINTS); this.m_priority = ((gflags & GAMETYPE_FLAG_PREFERRED) ? 2 : ((gflags & GAMETYPE_FLAG_PRIORITY) ? 1 : 0)); this.m_hidelimits = (gflags & GAMETYPE_FLAG_HIDELIMITS); + this.m_weaponarena = (gflags & GAMETYPE_FLAG_WEAPONARENA); + this.m_1v1 = (gflags & GAMETYPE_FLAG_1V1); // same as `1 << m_id` MAPINFO_TYPE_ALL |= this.items = this.m_flags = (MAPINFO_TYPE_ALL + 1); @@ -122,7 +130,10 @@ REGISTRY_DEFINE_GET(Gametypes, NULL) STATIC_INIT(Gametypes_renumber) { FOREACH(Gametypes, true, it.m_id = i); } #define REGISTER_GAMETYPE(NAME, inst) REGISTER(Gametypes, MAPINFO_TYPE, NAME, m_id, inst) +#ifndef CSQC +// NOTE: ISGAMETYPE in csqc (temporary hack) #define IS_GAMETYPE(NAME) (MapInfo_LoadedGametype == MAPINFO_TYPE_##NAME) +#endif const int MAPINFO_FEATURE_WEAPONS = 1; // not defined for instagib-only maps const int MAPINFO_FEATURE_VEHICLES = 2; @@ -157,6 +168,11 @@ string MapInfo_BSPName_ByID(float i); // load info about a map by name into the MapInfo_Map_* globals int MapInfo_Get_ByName(string s, float allowGenerate, Gametype gametypeToSet); // 1 on success, 0 on failure, 2 if it autogenerated a mapinfo file +// load map-specific player limits +int map_minplayers; +int map_maxplayers; +bool MapReadSizes(string map); + // look for a map by a prefix, returns the actual map name on success, string_null on failure or ambigous match string MapInfo_FindName_match; // the name of the map that was found float MapInfo_FindName_firstResult; // -1 if none were found, index of first one if not unique but found (FindName then returns -1) @@ -175,7 +191,7 @@ string MapInfo_ListAllAllowedMaps(float pFlagsRequired, float pFlagsForbidden); // gets a gametype from a string string _MapInfo_GetDefaultEx(Gametype t); float _MapInfo_GetTeamPlayBool(Gametype t); -Gametype MapInfo_Type_FromString(string t, bool dowarn); +Gametype MapInfo_Type_FromString(string t, bool dowarn, bool is_q3compat); string MapInfo_Type_Description(Gametype t); string MapInfo_Type_ToString(Gametype t); string MapInfo_Type_ToText(Gametype t); @@ -189,6 +205,10 @@ void MapInfo_Cache_Destroy(); // disable caching void MapInfo_Cache_Create(); // enable caching void MapInfo_Cache_Invalidate(); // delete cache if any, but keep enabled +bool _MapInfo_ParseArena(string arena_filename, int fh, string pFilename, Gametype pGametypeToSet, bool isdefi, bool isgenerator); + +string _MapInfo_FindArenaFile(string pFilename, string extension); + void _MapInfo_Parse_Settemp(string pFilename, string acl, float type, string s, float recurse); void MapInfo_ClearTemps(); // call this when done with mapinfo for this frame