}
}
-Gametype MapInfo_Type_FromString(string gtype)
+Gametype MapInfo_Type_FromString(string gtype, bool dowarn)
{
string replacement = "";
bool do_warn = true;
}
if (replacement != "")
{
- if(do_warn && WARN_COND)
+ if (dowarn && WARN_COND)
LOG_WARNF("MapInfo_Type_FromString (probably %s): using deprecated name '%s'. Should use '%s'.", MapInfo_Map_bspname, gtype, replacement);
gtype = replacement;
}
else if(t == "type")
{
t = car(s); s = cdr(s);
- Gametype f = MapInfo_Type_FromString(t);
+ Gametype f = MapInfo_Type_FromString(t, true);
//if(WARN_COND)
//LOG_WARN("Map ", pFilename, " contains the legacy 'type' keyword which is deprecated and will be removed in the future. Please migrate the mapinfo file to 'gametype'.");
if(f)
else if(t == "gametype")
{
t = car(s); s = cdr(s);
- Gametype f = MapInfo_Type_FromString(t);
+ Gametype f = MapInfo_Type_FromString(t, true);
if(f)
_MapInfo_Map_ApplyGametypeEx (s, pGametypeToSet, f);
else if(WARN_COND)
t = car(s); s = cdr(s);
bool all = t == "all";
Gametype f = NULL;
- if(all || (f = MapInfo_Type_FromString(t)))
+ if(all || (f = MapInfo_Type_FromString(t, true)))
{
if((all ? MAPINFO_TYPE_ALL : f.m_flags) & pGametypeToSet.m_flags)
{
t = car(s); s = cdr(s);
bool all = t == "all";
Gametype f = NULL;
- if(all || (f = MapInfo_Type_FromString(t)))
+ if(all || (f = MapInfo_Type_FromString(t, true)))
{
if((all ? MAPINFO_TYPE_ALL : f.m_flags) & pGametypeToSet.m_flags)
{
Gametype MapInfo_CurrentGametype()
{
- Gametype prev = REGISTRY_GET(Gametypes, cvar("gamecfg"));
+ Gametype prev = MapInfo_Type_FromString(cvar_string("gamecfg"), false);
FOREACH(Gametypes, cvar(it.netname) && it != prev, return it);
return prev ? prev : MAPINFO_TYPE_DEATHMATCH;
}
void MapInfo_LoadMapSettings_SaveGameType(Gametype t)
{
MapInfo_SwitchGameType(t);
- cvar_set("gamecfg", ftos(t.m_id));
+ cvar_set("gamecfg", t.mdl);
MapInfo_LoadedGametype = t;
}
if(MapInfo_Map_supportedGametypes == 0)
{
- LOG_SEVERE("Mapinfo system is not functional at all. Assuming deathmatch.");
- MapInfo_Map_supportedGametypes = MAPINFO_TYPE_DEATHMATCH.m_flags;
- MapInfo_LoadMapSettings_SaveGameType(MAPINFO_TYPE_DEATHMATCH);
- _MapInfo_Map_ApplyGametypeEx("", MAPINFO_TYPE_DEATHMATCH, MAPINFO_TYPE_DEATHMATCH);
+ RandomSelection_Init();
+ FOREACH(Gametypes, it.m_priority == 2,
+ {
+ MapInfo_Map_supportedGametypes |= it.m_flags;
+ RandomSelection_AddEnt(it, 1, 1);
+ });
+ if(RandomSelection_chosen_ent)
+ t = RandomSelection_chosen_ent;
+ LOG_SEVEREF("Mapinfo system is not functional at all. Falling back to a preferred mode (%s).", t.mdl);
+ MapInfo_LoadMapSettings_SaveGameType(t);
+ _MapInfo_Map_ApplyGametypeEx("", t, t);
return; // do not call Get_ByName!
}
+#if 0
+ // find the lowest bit in the supported gametypes
+ // unnecessary now that we select one at random
int _t = 1;
while(!(MapInfo_Map_supportedGametypes & 1))
{
_t <<= 1;
MapInfo_Map_supportedGametypes = floor(MapInfo_Map_supportedGametypes >> 1);
}
+#endif
+ RandomSelection_Init();
Gametype t_prev = t;
- FOREACH(Gametypes, it.m_flags == _t, { t = it; break; });
+ FOREACH(Gametypes, MapInfo_Map_supportedGametypes & it.m_flags,
+ {
+ RandomSelection_AddEnt(it, 1, it.m_priority);
+ });
+ if(RandomSelection_chosen_ent)
+ t = RandomSelection_chosen_ent;
// t is now a supported mode!
LOG_WARNF("can't play the selected map in the given game mode (%s). Falling back to a supported mode (%s).", t_prev.mdl, t.mdl);