Skip to content

Instantly share code, notes, and snippets.

@ninmonkey
Last active March 17, 2024 22:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ninmonkey/f9d0b5aa94c64dc98adb2f16d9fafa3c to your computer and use it in GitHub Desktop.
Save ninmonkey/f9d0b5aa94c64dc98adb2f16d9fafa3c to your computer and use it in GitHub Desktop.
CommandAndConquerySet-ConfigFileLocations.md

Top

Ini and Log Files

Back to Top

Pwsh 7.4.1> [1] 🐒
CnC.FindFiles -BaseDirectory $Paths.Generals.Root_MyDocs -Extension log, ini
C:\Users\nin\SkyDrive\Documents\Command and Conquer Generals Data\Options.ini
C:\Users\nin\SkyDrive\Documents\Command and Conquer Generals Data\Skirmish.ini

Pwsh 7.4.1> [1] 🐒
CnC.FindFiles -BaseDirectory $Paths.TiberianSun.Root -Extension log, ini
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\DDrawCompat-game.log
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\DDrawCompat.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\FinalSun\FSData.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\FinalSun\FSLanguage.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\FinalSun\FinalSunDefaults.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\FinalSun\StdMapTS.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\Internet\Wolapi.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\KEYBOARD.INI
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\SUN.INI
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\Themes\themes.ini

Pwsh 7.4.1> [1] 🐒
CnC.FindFiles -Extension log, ini -BaseDirectory 'H:\SteamLibrary\steamapps\common\Command & Conquer' 
H:\SteamLibrary\steamapps\common\Command & Conquer\CONQUER.INI
H:\SteamLibrary\steamapps\common\Command & Conquer\DDrawCompat-C&C95.log
H:\SteamLibrary\steamapps\common\Command & Conquer\DDrawCompat.ini      

Pwsh 7.4.1> [1] 🐒
CnC.FindFiles -Extension log, ini -BaseDirectory 'H:\SteamLibrary\steamapps\common\Command & Conquer Red Alert II' 
H:\SteamLibrary\steamapps\common\Command & Conquer Red Alert II\RA2.INI
H:\SteamLibrary\steamapps\common\Command & Conquer Red Alert II\DDrawCompat.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Red Alert II\RA2MD.INI
H:\SteamLibrary\steamapps\common\Command & Conquer Red Alert II\Internet\Wolapi.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Red Alert II\FinalAlert2\StdMapRA2.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Red Alert II\FinalAlert2\FinalAlertDefaults.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Red Alert II\FinalAlert2\FALanguage.ini        
H:\SteamLibrary\steamapps\common\Command & Conquer Red Alert II\FinalAlert2\FAData.ini

Pwsh 7.4.1> [1] 🐒
CnC.FindFiles -Extension log, ini -BaseDirectory 'H:\SteamLibrary\steamapps\common\Command & Conquer Renegade'    
H:\SteamLibrary\steamapps\common\Command & Conquer Renegade\Data\WWAudio.ini   
H:\SteamLibrary\steamapps\common\Command & Conquer Renegade\Data\stylemgr.ini  
H:\SteamLibrary\steamapps\common\Command & Conquer Renegade\Data\svrcfg_cnc.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Renegade\Internet\Wolapi.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Renegade\server.ini

Pwsh 7.4.1> [1] 🐒
CnC.FindFiles -Extension log, ini -BaseDirectory 'H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun'
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\DDrawCompat.ini     
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\FinalSun\FSData.ini 
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\FinalSun\FSLanguage.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\FinalSun\FinalSunDefaults.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\FinalSun\StdMapTS.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\Internet\Wolapi.ini
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\KEYBOARD.INI
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\SUN.INI
H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\Themes\themes.ini

Pwsh 7.4.1> [1] 🐒
CnC.FindFiles -Extension log, ini -BaseDirectory 'H:\SteamLibrary\steamapps\common\Command and Conquer 3 - Kane's Wrath'
H:\SteamLibrary\steamapps\common\Command and Conquer 3 - Kane's Wrath\Support\patchdoc.ini
H:\SteamLibrary\steamapps\common\Command and Conquer 3 - Kane's Wrath\Support\Localization.ini

Pwsh 7.4.1> [1] 🐒
CnC.FindFiles -Extension log, ini -BaseDirectory $Paths.Generals.Root
H:\SteamLibrary\steamapps\common\Command and Conquer Generals\RedistInstallers\Options_Helper\Options.ini
H:\SteamLibrary\steamapps\common\Command and Conquer Generals\SUN.INI

Pwsh 7.4.1> [1] 🐒
CnC.FindFiles -Extension log, ini -BaseDirectory $Paths.Generals.Root_MyDocs
C:\Users\nin\SkyDrive\Documents\Command and Conquer Generals Data\Options.ini
C:\Users\nin\SkyDrive\Documents\Command and Conquer Generals Data\Skirmish.ini

Pwsh 7.4.1> [1] 🐒
CnC.FindFiles -Extension log, ini -BaseDirectory 'H:\SteamLibrary\steamapps\common\Command and Conquer Red Alert 3'
H:\SteamLibrary\steamapps\common\Command and Conquer Red Alert 3\Support\patchdoc.ini
using namespace System.Collections.Generic
$script:Paths = [ordered]@{}
@'
try this EverythingSearchQuery:
dm:last45minutes path:"*sun*" ( !path:ww:"%appdata%\code" ( !file:"-old.ini" !file:"-prev.ini" ) !path:"c:\windows" !path:"%AppData%\Microsoft\Windows\Recent" )
'@
$Paths.TiberianSun = @{
Root = gi 'H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun'
RootLog = gi 'H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\DDrawCompat-game.log'
ManualPaths = @{
MainIni = gi 'H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\SUN.INI'
KeyboardIni = gi 'H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\KEYBOARD.INI'
}
}
$query = Select-String -Path $paths.TiberianSun.RootLog -Pattern '[a-zA-Z]:\\.*\.ini' -AllMatches
$Paths.TiberianSun.FoundIni = @( $query.Matches.Value )
$Paths.TiberianSun.ExistingIni = @( $query.Matches.Value | Get-Item -ea 'ignore' )
$Paths.Generals = @{
Root_MyDocs = gi 'C:\Users\cppmo_000\SkyDrive\Documents\Command and Conquer Generals Data'
Root = gi 'H:\SteamLibrary\steamapps\common\Command and Conquer Generals'
}
$Paths.GeneralsZeroHour = @{
Root_MyDocs = gi 'C:\Users\cppmo_000\SkyDrive\Documents\Command and Conquer Generals Zero Hour Data'
ManualPaths = @{
MainIni = gi 'C:\Users\cppmo_000\SkyDrive\Documents\Command and Conquer Generals Zero Hour Data\Options.ini'
SkirmishIni = gi 'C:\Users\cppmo_000\SkyDrive\Documents\Command and Conquer Generals Zero Hour Data\Skirmish.ini'
}
}
$Paths.CnCOriginal = @{
Root = gi 'H:\SteamLibrary\steamapps\common\Command & Conquer'
}
$Paths.Renegade = @{
Root = gi 'H:\SteamLibrary\steamapps\common\Command & Conquer Renegade'
}
$Paths.RedAlertII = @{
Root = gi 'H:\SteamLibrary\steamapps\common\Command & Conquer Red Alert II'
}
$Paths.KanesWrath = @{
Root = gi 'H:\SteamLibrary\steamapps\common\Command and Conquer 3 - Kane''s Wrath'
}
$Paths.RedAlert3 = @{
Root = gi 'H:\SteamLibrary\steamapps\common\Command and Conquer Red Alert 3'
}
$toIgnoreRegex = '(prev|old)\d*\.ini$' # hides copies, like: 'file.old.ini'
function RenderPathUrl {
# lets you ctrl+click filepaths to open the file directly
process {
$_ | Get-Item
| Join-String -f '<file:///{0}>' -p { $_.FullName -replace ' ', '%20' }
}
}
function CnC.FindFiles {
<#
.SYNOPSIS
The core entry point for the user to find relevant files. Sugar around `fd` so it's very fast and easy to use.
.NOTES
parameters have auto completion for default value
.EXAMPLE
CnC.FindFiles -BaseDirectory $Paths.TiberianSun.Root
CnC.FindFiles -BaseDirectory $Paths.TiberianSun.Root -WithinFilter 2hours -FileType ini, log
CnC.FindFiles -BaseDirectory $Paths.TiberianSun.Root -WithinFilter 2hours
CnC.FindFiles -BaseDirectory $Paths.TiberianSun.Root -WithinFilter 2hours -FileType ini
#>
[CmdletBinding()]
param(
[ArgumentCompletions('2hours', '5minutes', '10minutes', '90seconds')]
[string]$WithinFilter,
[Alias('Extension', 'Ext', 'Kind', 'TypeOf')]
[Parameter()]
[ArgumentCompletions(
'ini', 'json', 'log', 'vdf', 'sav', 'pdf', 'doc', 'htm', 'html', 'docx', 'csv', 'txt'
)][string[]]$FileType,
[Parameter(Mandatory)]
[string]$BaseDirectory,
[switch]$WhatIf
)
[List[Object]]$binParams = @()
if( $PSBoundParameters. ContainsKey('FileType') ) {
$binParams.AddRange(@(
$fileType.ForEach({ '-e', $_ })
))
}
if( $PSBoundParameters. ContainsKey('WithinFilter') ) {
$binParams.AddRange(@(
'--changed-within', $WithinFilter
))
}
$binParams.AddRange(@(
'--search-path', $BaseDirectory
))
$BinParams | Join-String -sep ' ' -op 'Invoke fd => ' | Write-verbose # | write-host -fg 'gray80' -bg 'gray20'
if($WhatIf) { return }
# fd --changed-within 2hours --search-path $Paths.TiberianSun.Root
& fd @binParams
}
function CnC.FindFilesUsedByLogs {
<#
.EXAMPLE
CnC.FindFilesUsedByLogs -LogPath 'H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\DDrawCompat-game.log'
#>
param( [string]$LogPath )
$RegexIniFilepath = '[a-zA-Z]:\\.*\.ini'
Get-Content $LogPath
| Select-String -Pattern $RegexIniFilepath -AllMatches -List
}
## preview render
$Paths | %{
# h1 $_.Keys
$_.Values | Ft -AutoSize
}
# note: not all files found in the log, currently exist
# h1 'show some tiberian sun'
$Paths.TiberianSun.ExistingIni # | Join.UL
$Paths.TiberianSun.ExistingIni | RenderPathUrl # | Join.UL
@'
$Paths
is the top level object that has all paths. some properties are dynamic.
To try:
Search by recently modified, or by file kinds ( or both at once )
CnC.FindFiles -BaseDirectory $Paths.TiberianSun.Root -WithinFilter 25minutes
CnC.FindFiles -BaseDirectory $Paths.TiberianSun.Root -FileType ini, log
# for clickable filepaths:
CnC.FindFiles -BaseDirectory $Paths.GeneralsZeroHour.Root_MyDocs -WithinFilter 5minutes | RenderPathUrl
# to find config files that don't exist but are used, you can search the log file:
$RegexIniName = '[a-zA-Z]:\\.*\.ini'
$LogName = 'H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\DDrawCompat-game.log'
Get-Content $LogName | Select-String -Pattern $RegexIniName -AllMatches -List
Loading global config file: C:\ProgramData\DDrawCompat\DDrawCompat.ini
Loading user config file: C:\Users\cppmo_000\AppData\Local\DDrawCompat\DDrawCompat.ini
Loading directory config file: H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\DDrawCompat.ini
Loading process config file: H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\DDrawCompat-game.ini
Loading overlay config file: H:\SteamLibrary\steamapps\common\Command & Conquer Tiberian Sun\DDrawCompatOverlay-game.ini
'@
# Who has mydocs defined?
# $paths.getEnumerator() | ?{ $_.value.keys -match 'MyDocs' }
$DeclaredAs_MyDocs =
$paths.GetEnumerator().Where({ $_.Value.keys -match 'MyDocs' }).forEach({ $_.Value.Root_MyDocs })
$DeclaredAs_MyDocs.FullName | %{ CnC.FindFiles -Extension log, ini -BaseDirectory $_ }
$DeclaredAs_MyDocs.FullName | %{ CnC.FindFiles -Extension log, ini -BaseDirectory $_ } | ?{ $_ -notmatch $toIgnoreRegex }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment