summaryrefslogtreecommitdiff
path: root/gameui/ModInfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gameui/ModInfo.cpp')
-rw-r--r--gameui/ModInfo.cpp251
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);
+}