Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
3.4 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Handle addition and editing of game configurations
//
//=====================================================================================//
#include <windows.h>
#include "interface.h"
#include "tier0/icommandline.h"
#include "filesystem_tools.h"
#include "sdklauncher_main.h"
#include "ConfigManager.h"
#include "KeyValues.h"
#include <io.h>
#include <stdio.h>
#include "configs.h"
// memdbgon must be the last include file in a .cpp file!!!
#include <tier0/memdbgon.h>
extern CGameConfigManager g_ConfigManager;
//-----------------------------------------------------------------------------
// Purpose: Copy a character string into a utlvector of characters
//-----------------------------------------------------------------------------
void UtlStrcpy( CUtlVector<char> &dest, const char *pSrc )
{
dest.EnsureCount( strlen( pSrc ) + 1 );
Q_strncpy( dest.Base(), pSrc, dest.Count() );
}
//-----------------------------------------------------------------------------
// Purpose: Return the path for the gamecfg.INI file
//-----------------------------------------------------------------------------
const char *GetIniFilePath( void )
{
static char iniFilePath[MAX_PATH] = {0};
if ( iniFilePath[0] == 0 )
{
Q_strncpy( iniFilePath, GetSDKLauncherBinDirectory(), sizeof( iniFilePath ) );
Q_strncat( iniFilePath, "\\gamecfg.ini", sizeof( iniFilePath ), COPY_ALL_CHARACTERS );
}
return iniFilePath;
}
//-----------------------------------------------------------------------------
// Purpose: Add a new configuration with proper paths
// Output : Returns true on success, false on failure.
//-----------------------------------------------------------------------------
// NOTE: This code is fairly fragile, it'd be a lot better to have a solid solution for adding in a new config
bool AddConfig( const char *pModName, const char *pModDirectory, ModType_t modType )
{
// Manager must be loaded
if ( g_ConfigManager.IsLoaded() == false )
return false;
// Set to defaults
defaultConfigInfo_t newInfo;
memset( &newInfo, 0, sizeof( newInfo ) );
// Mod name
Q_strncpy( newInfo.gameName, pModName, sizeof( newInfo.gameName ) );
// Basic FGD
if ( modType == ModType_HL2 )
{
Q_strncpy( newInfo.FGD, "halflife2.fgd", sizeof( newInfo.FGD ) );
}
else if ( modType == ModType_HL2_Multiplayer )
{
Q_strncpy( newInfo.FGD, "hl2mp.fgd", sizeof( newInfo.FGD ) );
}
else
{
Q_strncpy( newInfo.FGD, "base.fgd", sizeof( newInfo.FGD ) );
}
// Get the base directory
Q_FileBase( pModDirectory, newInfo.gameDir, sizeof( newInfo.gameDir ) );
KeyValues *gameBlock = g_ConfigManager.GetGameBlock();
// Default executable
Q_strncpy( newInfo.exeName, "hl2.exe", sizeof( newInfo.exeName ) );
char szPath[MAX_PATH];
Q_strncpy( szPath, pModDirectory, sizeof( szPath ) );
Q_StripLastDir( szPath, sizeof( szPath ) );
Q_StripTrailingSlash( szPath );
char fullDir[MAX_PATH];
g_ConfigManager.GetRootGameDirectory( fullDir, sizeof( fullDir ), g_ConfigManager.GetRootDirectory() );
// Add the config into our file
g_ConfigManager.AddDefaultConfig( newInfo, gameBlock, szPath, fullDir );
// Set this as the currently active configuration
SetVConfigRegistrySetting( GAMEDIR_TOKEN, pModDirectory );
// Save and reload our configs
g_ConfigManager.SaveConfigs();
g_ConfigManager.LoadConfigs();
return true;
}