X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmapinfo.qh;h=80a87de140394ec21d95c6efb04673cec5bc3e0b;hb=c7870b6c5e2c46d7537b2b6dc7f3a8bca7bcef71;hp=6fbb7ce896235d53fe240be81fd83ea0aea25002;hpb=be8d35c9ec5e173f26db53b4b1a7b5fd0b746a60;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/mapinfo.qh b/qcsrc/common/mapinfo.qh index 6fbb7ce89..80a87de14 100644 --- a/qcsrc/common/mapinfo.qh +++ b/qcsrc/common/mapinfo.qh @@ -101,9 +101,10 @@ CLASS(Gametype, Object) ENDCLASS(Gametype) REGISTRY(Gametypes, 24) -#define Gametypes_from(i) _Gametypes_from(i, NULL) REGISTER_REGISTRY(Gametypes) REGISTRY_CHECK(Gametypes) + +REGISTRY_DEFINE_GET(Gametypes, NULL) #define REGISTER_GAMETYPE(NAME, inst) REGISTER(Gametypes, MAPINFO_TYPE, NAME, m_id, inst) #define IS_GAMETYPE(NAME) (MapInfo_LoadedGametype == MAPINFO_TYPE_##NAME) @@ -124,7 +125,7 @@ REGISTER_GAMETYPE(DEATHMATCH, NEW(Deathmatch)); CLASS(LastManStanding, Gametype) INIT(LastManStanding) { - this.gametype_init(this, _("Last Man Standing"),"lms","g_lms",false,true,"","timelimit=20 lives=9 leadlimit=0",_("Survive and kill until the enemies have no lives left")); + this.gametype_init(this, _("Last Man Standing"),"lms","g_lms",false,true,"","timelimit=20 lives=5 leadlimit=0",_("Survive and kill until the enemies have no lives left")); } METHOD(LastManStanding, m_isAlwaysSupported, bool(Gametype this, int spawnpoints, float diameter)) { @@ -302,7 +303,7 @@ void HUD_Mod_CA(vector pos, vector mySize); CLASS(ClanArena, Gametype) INIT(ClanArena) { - this.gametype_init(this, _("Clan Arena"),"ca","g_ca",true,true,"","timelimit=20 pointlimit=10 teams=2 leadlimit=0",_("Kill all enemy teammates to win the round")); + this.gametype_init(this, _("Clan Arena"),"ca","g_ca",true,true,"","timelimit=20 pointlimit=10 teams=2 leadlimit=6",_("Kill all enemy teammates to win the round")); } METHOD(ClanArena, m_parse_mapinfo, bool(string k, string v)) { @@ -497,7 +498,7 @@ REGISTER_GAMETYPE(NEXBALL, NEW(NexBall)); CLASS(FreezeTag, Gametype) INIT(FreezeTag) { - this.gametype_init(this, _("Freeze Tag"),"ft","g_freezetag",true,true,"","timelimit=20 pointlimit=10 teams=2 leadlimit=0",_("Kill enemies to freeze them, stand next to frozen teammates to revive them; freeze all enemies to win")); + this.gametype_init(this, _("Freeze Tag"),"ft","g_freezetag",true,true,"","timelimit=20 pointlimit=10 teams=2 leadlimit=6",_("Kill enemies to freeze them, stand next to frozen teammates to revive them; freeze all enemies to win")); } METHOD(FreezeTag, m_parse_mapinfo, bool(string k, string v)) { @@ -594,16 +595,47 @@ CLASS(Duel, Gametype) } METHOD(Duel, m_isForcedSupported, bool(Gametype this)) { - // force all DM maps to work in duel?! - // TODO: we should really check the size of maps, some DM maps do not work for duel! - if(!(MapInfo_Map_supportedGametypes & this.m_flags) && (MapInfo_Map_supportedGametypes & MAPINFO_TYPE_DEATHMATCH.m_flags)) - return true; + if(!cvar("g_duel_not_dm_maps")) + { + // if this is set, all DM maps support duel too + // TODO: we should really check the size of maps, some DM maps do not work for duel! + if(!(MapInfo_Map_supportedGametypes & this.m_flags) && (MapInfo_Map_supportedGametypes & MAPINFO_TYPE_DEATHMATCH.m_flags)) + return true; // TODO: references another gametype (alternatively, we could check which gamemodes are always enabled and append this if any are supported) + } return false; } ENDCLASS(Duel) REGISTER_GAMETYPE(DUEL, NEW(Duel)); #define g_duel IS_GAMETYPE(DUEL) +#ifdef CSQC +void HUD_Mod_Survival(vector pos, vector mySize); +#endif +CLASS(Survival, Gametype) + INIT(Survival) + { + this.gametype_init(this, _("Survival"),"sv","g_survival",false,true,"","timelimit=20 pointlimit=20",_("Identify and eliminate all the hunters before all your allies are gone")); + } + METHOD(Survival, m_isAlwaysSupported, bool(Gametype this, int spawnpoints, float diameter)) + { + return true; + } + METHOD(Survival, m_isForcedSupported, bool(Gametype this)) + { + if(!cvar("g_survival_not_lms_maps")) + { + // if this is unset, all LMS maps support Survival too + if(!(MapInfo_Map_supportedGametypes & this.m_flags) && (MapInfo_Map_supportedGametypes & MAPINFO_TYPE_LMS.m_flags)) + return true; // TODO: references another gametype (alternatively, we could check which gamemodes are always enabled and append this if any are supported) + } + return false; + } +#ifdef CSQC + ATTRIB(Survival, m_modicons, void(vector pos, vector mySize), HUD_Mod_Survival); +#endif +ENDCLASS(Survival) +REGISTER_GAMETYPE(SURVIVAL, NEW(Survival)); + const int MAPINFO_FEATURE_WEAPONS = 1; // not defined for instagib-only maps const int MAPINFO_FEATURE_VEHICLES = 2; const int MAPINFO_FEATURE_TURRETS = 4; @@ -669,9 +701,11 @@ void MapInfo_Cache_Destroy(); // disable caching void MapInfo_Cache_Create(); // enable caching void MapInfo_Cache_Invalidate(); // delete cache if any, but keep enabled +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 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_* -_* -g_ban* -r_water +*" +#define MAPINFO_SETTEMP_ACL_SYSTEM "-g_mapinfo_* -rcon_* -_* -g_ban* +*"