diff options
Diffstat (limited to 'gameui/ModInfo.cpp')
| -rw-r--r-- | gameui/ModInfo.cpp | 251 |
1 files changed, 251 insertions, 0 deletions
diff --git a/gameui/ModInfo.cpp b/gameui/ModInfo.cpp new file mode 100644 index 0000000..d61fd13 --- /dev/null +++ b/gameui/ModInfo.cpp @@ -0,0 +1,251 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + + +#include "ModInfo.h" +#include "KeyValues.h" +#include "vgui_controls/Controls.h" +#include "filesystem.h" +#include "EngineInterface.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include <tier0/memdbgon.h> + +//----------------------------------------------------------------------------- +// Purpose: singleton accessor +//----------------------------------------------------------------------------- +CModInfo &ModInfo() +{ + static CModInfo s_ModInfo; + return s_ModInfo; +} + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +CModInfo::CModInfo() +{ + m_pModData = new KeyValues("ModData"); + m_wcsGameTitle[0] = 0; +} + +//----------------------------------------------------------------------------- +// Purpose: Destructor +//----------------------------------------------------------------------------- +CModInfo::~CModInfo() +{ + FreeModInfo(); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CModInfo::FreeModInfo() +{ + if (m_pModData) + { + m_pModData->deleteThis(); + m_pModData = NULL; + } +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +bool CModInfo::IsMultiplayerOnly() +{ + return (stricmp(m_pModData->GetString("type", ""), "multiplayer_only") == 0); +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +bool CModInfo::IsSinglePlayerOnly() +{ +#ifndef _XBOX + return (stricmp(m_pModData->GetString("type", ""), "singleplayer_only") == 0); +#else + // xboxissue - no support for disparate mounted content + return true; +#endif +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +const char *CModInfo::GetFallbackDir() +{ + return m_pModData->GetString("fallback_dir", ""); +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +const wchar_t *CModInfo::GetGameTitle() +{ + if (!m_wcsGameTitle[0]) + { + // for some reason, the standard ILocalize::ConvertANSIToUnicode() strips off + // the '�' character in 'HALF-LIFE�' - so just do a straight upconvert to unicode + const char *title = m_pModData->GetString("title", ""); + int i = 0; + for (; title[i] != 0; ++i) + { + m_wcsGameTitle[i] = (wchar_t)title[i]; + } + m_wcsGameTitle[i] = 0; + } + + return m_wcsGameTitle; +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +const wchar_t *CModInfo::GetGameTitle2() +{ + if (!m_wcsGameTitle2[0]) + { + // for some reason, the standard ILocalize::ConvertANSIToUnicode() strips off + // the '�' character in 'HALF-LIFE�' - so just do a straight upconvert to unicode + const char *title2 = m_pModData->GetString("title2", ""); + int i = 0; + for (; title2[i] != 0; ++i) + { + m_wcsGameTitle2[i] = (wchar_t)title2[i]; + } + m_wcsGameTitle2[i] = 0; + } + + return m_wcsGameTitle2; +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +const char *CModInfo::GetGameName() +{ + return m_pModData->GetString("game", ""); +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +KeyValues *CModInfo::GetHiddenMaps() +{ + return m_pModData->FindKey( "hidden_maps" ); +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +bool CModInfo::HasPortals() +{ + return (stricmp(m_pModData->GetString("hasportals", "0"), "1") == 0); +} + + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +bool CModInfo::HasHDContent() +{ + return (stricmp(m_pModData->GetString("hashdcontent", "0"), "1") == 0); +} + + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +bool CModInfo::NoDifficulty() +{ + return (stricmp(m_pModData->GetString("nodifficulty", "0"), "1") == 0); +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +bool CModInfo::NoModels() +{ + return (stricmp(m_pModData->GetString("nomodels", "0"), "1") == 0); +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +bool CModInfo::NoHiModel() +{ + return (stricmp(m_pModData->GetString("nohimodel", "0"), "1") == 0); +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +bool CModInfo::NoCrosshair() +{ + return (stricmp(m_pModData->GetString("nocrosshair", "1"), "1") == 0); +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +bool CModInfo::AdvCrosshair() +{ + return ( m_pModData->GetInt( "advcrosshair" ) > 0 ); +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +int CModInfo::AdvCrosshairLevel() +{ + return m_pModData->GetInt( "advcrosshair" ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CModInfo::LoadCurrentGameInfo() +{ + // Load up gameinfo for the current mod + char const *filename = "gameinfo.txt"; + m_pModData->LoadFromFile( g_pFullFileSystem, filename ); +} + +//----------------------------------------------------------------------------- +// Purpose: loads file from null-terminated buffer +//----------------------------------------------------------------------------- +void CModInfo::LoadGameInfoFromBuffer( const char *buffer ) +{ + // Load up gameinfo.txt for the current mod + m_pModData->LoadFromBuffer( "", buffer ); +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +bool CModInfo::UseGameLogo() +{ + return ( Q_stricmp( m_pModData->GetString( "gamelogo", "0" ), "1" ) == 0 ); +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +bool CModInfo::UseBots() +{ + return ( Q_stricmp( m_pModData->GetString( "bots", "0" ), "1" ) == 0 ); +} + + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +bool CModInfo::SupportsVR() +{ + return (m_pModData->GetInt( "supportsvr" ) > 0); +} |