Downloads are at the bottom of this post GCFPrep Thanks to hCUPa for the use of SteamEmu. Thanks to Shmelle and REVOLUTiON for the use of revEmu. Thanks to RBPFC1 for the use of HookEmu. Thanks to ViTYAN for use and reference to ViTYAN's GameServers Universal Patch, which is available as a GCFPrep Plugin for SteamEmu. Thanks to steamCooker for sharing his excellent work that has been modified and used in the GCFPrep Steam download functionality Thanks to Da_FileServer for his superb documentation on GCF/BLOB file formats that make coding solutions so much easier! Thanks to PeJpepiG for all the hours of quality testing - this software would only be half as good without your hard work! Description GCFPrep is a fully programmable GCF launch preperation tool that enables you to make all your GCF content customised and launchable with just the click of a button. Features Prepares any GCF based content including games and tools, so that it can be launched via a simple shortcut using the contents own executable file. GCFPrep is only used to make your content launchable, there is zero overhead when playing the content that GCFPrep has prepared. Quickly refresh all your GCF based content whenever your GCFs are updated. GCFPrep Identifies content that has updated GCFs since the last preperation, allowing you to easily identify and refresh outdated content. Allows for multi emulator support, enabling you to configure which emulator runs which content. Supports emulators that allow for multiple cache paths (you no longer need to keep all your GCFs in a single folder) Supports emulators that allow for source engine 64-bit content. Includes a developer utility dll that can be used in your own projects to enable access to blob and steam cache file specific functions (see Readme Developer Guide.txt) Automatically configures correct GCF language files and also optional GCF files like the Half-Life high definition pack for emulators that do not automatically support supplementary file processing. Allows for customisation of the games shortcut like installation location, additional command line arguments and alternative icons. Automatically fixes content to be launchable without steam, or an internet connection. Allows for fixes to be applied when preparing content. (fixed server browser files, known files that aren't always extracted correctly by other steam launchers etc.) Allows for UGL/UCL style pack files. (you can add bot support to games that do not have native bot support, or add additonal language voice and text files to games that are not supported natively by steam) Supports third party plugins, that can be used to perform specific tasks on preperation, such as patching a specific file or file collection. Incorporates a flexible customisation system that allows for users to release content fixes or packs that you can easily use without disturbing your own configuration files, ensuring that GCFPrep will always be able to correctly prepare content, even in the future! Incorporates a localised GUI that allows for you to make your own language files for GCFPrep. Supports creating standalone content - including streamlined standalone content by filtering cache file extractions by .LST file when in full extraction mode. Supports detection and correct setup of Half-Life based modifications. Supports detection and correct setup of Source based modifications. Includes a CF Toolbox plugin to enable the use of GCFPrep within SteamCookers CF Toolbox. Can be used to fix broken minimum footprint files for any launcher. Prerequisites Microsoft .NET framework 2.0 or greater. Microsoft Visual C++ 2008 Redistributable Package. Links are in the FAQ below. Documentation Advanced information is available in the following ReadMe files about the use of each of their respective folders. As GCFPrep is a highly programmable tool, it is recommended you read these instructions to fully understand and utilise its capabilities: \Readme Changelog.txt \Readme Developer Guide.txt \Readme FAQ.txt \CF Toolbox Plugin\CF Toolbox Plugin Readme.txt \Configuration\Configuration Readme.txt \Configuration\LST\LST Readme.txt \Emulator\Emulator Files Readme.txt \Icon\Icon Files Readme.txt \Language\Language Readme.txt \Plugin\Plugin Readme.txt Quick Start Guide You need the following to run GCFPrep: The latest version of GCFPrep One or more emulator packs that you wish to run with GCFPrep (currently steamEmu, revEmu and HookEmu are included in the GCFPrep pack) The blob pack if your computer is not online or you don't want GCFPrep to download it from steam. GCFPrep GUI Start GCFPrep. GCFPrep will download a Content Description Record from Steam if one is not found. GCFPrep will prompt you to select your default emulator if you have not already done so. You can do this in the advanced options screen or the GCFPrep.xml file. You need at least one emulator for GCFPrep to function correctly! Click the Start button to analyse your GCF content. You will be prompted to browse for a valid GCF folder if GCFPrep can't find any GCF files. GCFPrep shows you which content has changed since the last prep. Changed content is hilighted as a default. Set any additional options like language settings. (see additional considerations below) Make sure your content path is correctly set to where you would like the content extracted. You will be prompted to browse for it if you attempt to prepare any content and GCFPrep can't find a valid content path. Select the content you wish to process, and which emulator you wish to use (you will only see content that has not been Suppressed in the \Configuration\Default Config.xml file, and that you have all the mandatory files for) Click Start! CF Toolbox plugin See \CF Toolbox Plugin\CF Toolbox Plugin Readme.txt for information Additional Considerations Refreshing Minimum footprint files for use with a launcher If you usually play your content from a launcher like SteamBuster Revolution, Universal Content Launcher, Tiny Launcher etc, you can still use GCFPrep to refresh the minimum footprint files if a GCF update has rendered the content unworkable with the launcher. To do this, use GCFPrep as normal (either stand alone or as a plugin) and make sure you untick the "Allow File Copies", "Allow Pack Copies" and "Allow Shortcuts" boxes to ensure that only the original files are copied into the minimum footprint folder Make sure that your Content Folder is set correctly to overwrite the existing launcher installation. If you do not want to do this, then you could create a new minimum footprint folder and use the GFPrep shortcut as detailed in 2) below, to check the content will work, before overwriting your launchers installation. Using GCFPrep to create a working shortcut to launch content. You can use GCFPrep to create a fully working version of any GCF Content that includes language files, files required to start the game without a launcher, and a shortcut to launch the content. To do this, start GCFPrep as normal (either stand alone or as a plugin), and make sure you tick the "Allow File Copies" box. You can optionally tick the "Allow Pack Copies" box if you want GCFPrep to use any packs it finds for the selected content You must tick the "Allow Shortcuts" box to ensure that GCFPrep creates the shortcuts for you. Using GCFPrep to create shortcuts for your Half-Life and Source mods. To process mod files ensure that the appropriate box is ticked when processing content. Note: If you tick a mod box, but don't select any other content to prepare, then GCFPrep will create mod shortcuts only. This is useful for refreshing your mod shortcuts after installing new mods. The "Allow Shortcuts" option has no effect when detecting mods, the shortcuts will always be created for discovered mods. Using GCFPrep to create a streamlined extracted version of your content. Make sure the Extract Full Cachefile option is selected in the advanced options screen. this will allow you to make an extracted version of the selected content, however: Extracting all the files from a cache file is inneficient as many may not be used by the content itself, therefore GCFPrep also supports filtering the extraction by .LST file To use a .LST file make sure you copy it into the Configuration\LST folder and that the file is named as the AppID (e.g. 220.LST for Half-Life 2) Frequently Asked Questions I have a problem starting GCFprep: <<Insert Error here>> Make sure you have the Microsoft .NET framework installed. If you do, then ensure you are running a current version. Download the .NET framework here: Microsoft .NET Framework If you have the following error message: System.DllNotFoundException: Unable to load DLL 'GCFPrep.dll' Then please install the Microsoft Visual C++ 2008 Redistributable Package: You need the x86 download regardless of your OS as GCFPrep.dll is compiled as an x86 platform dll: http://www.microsoft.com/downloads/deta ... layLang=en Why is some of my GCF content not visible in GCFPrep? Obtain the latest clientregistry.blob file and put it in your \Emulator\Blob folder, GCFPrep should then be able to detect the content. How can I change the default emulator that is used for GCFPrep? See \Emulator\Emulator Files Readme.txt for more information on multi emulator support. Does GCFPrep have any command line options? You can create a shortcut to GCFPrep and add -AutoPrep to the command line. This will start GCFPrep and automatically process all the GCF content you have that is outdated. To process ALL your content use the -PrepAll switch. You can also create a shortcut to GCFPrep and add -appid XXX to the command line where XXX is the Steam Application ID of the content to process. This will force GCFPrep to process only the selected AppID. You can also add the -autoprep switch to this to automatically process the specified content. If QuitAfterProcess is set to true for any of the above scenarios, then GCFPrep will also exit when the operations are completed. How can I customise command line arguments that GCFPrep assigns to the executable, for example I want to start the console in counter-strike source and day of defeat source? Using the above as an example, you can create a new .xml file with the appropriate Argument definition as detailed below. See \Configuration\Configuration Readme.txt for further details. <Argument> <CommandLine>-console</CommandLine> <AppID>240;300</AppID> </Argument> The shortcut for the target AppIDs will then contain the specified argument. New content is available on Steam, but the language files don't work correctly? (no voice in game / wrong language / wrong text) Edit the \Configuration\Default Preloads.xml file to fix this problem when launching games with shortcuts created by GCFPrep. If you're using a launcher then you'll need to wait until it is updated, or use a GCFprep shortcut until that happens. I want to try a new Beta, but GCFPrep doesn't list it? By default, GCFPrep only shows you GCF based games and tools. You can change this by editing the configuration\default config.xml file and setting any of the following options to true: <ContentProcessGCF> <ContentProcessTool> <ContentProcessMedia> <ContentProcessDemo> <ContentProcessBeta> Why does GCFPrep keep displaying content that is not valid (TestAppXXX etc)? Add the contents AppID to the SuppressAppIDs section of the \Configuration\Default Config.xml file. You can see the AppIDs for all content in the list box when using the full GCFPrep GUI. New content is out, why doesn't it start correctly from a GCFPrep shortcut? Try adding the contents AppID to the SuppressArguments section of the \Configuration\Default Config.xml file. Some content will only launch if no arguments are specified. Failing that, check the following: GCFPrep successfully prepared my content, but the shortcut is wrong and the content won't launch! If you can, find out what command line is returned as a launch option for the content. Once you know it, you can add the executable file to the ExecutableFiles section of the \Configuration\Default Config.xml file. This usually only happens when a command line contains the name of the file, but not its extension. (e.g. hl2 instead of hl2.exe) Steam now supports more languages, can GCFPrep support them? Yes! Add them to the SteamLanguage section of the \Configuration\Default Config.xml file. Note that the text you enter must match the text that is used in the GCF file name for that language file to be pre-loaded correctly. Also, if the Language has a SteamLanguageKey that differs from its name, then be sure to enter that in square brackets after the Language: <SteamLanguage>English;Spanish;French;Italian;German;Korean (Adult)[Koreana];Korean (Teen)[Korean];Simplified Chinese[sChinese];Traditional Chinese[tChinese];Russian;Thai;Japanese;Portuguese</SteamLanguage> Don't forget to update your \Configuration\Default Preloads.xml file GCFPrep supports steam languages, why is its own interface in English only? You can create your own GUI language files! Go into the \Language folder and make a copy of the GCFPrep_English.xml file. Rename it to your language (e.g. GCFPrep_French.xml) Change the strings inside the xml file to your own language except for any keywords that appear between percent symbols (%ContentName%, %AppCount%) Select the language from the advanced options screen, or change the GCFPrepLanguage section In the GCFPrep.xml file to reflect the new language file e.g: <GCFPrepLanguage>French</GCFPrepLanguage> Don't forget to share your work! Steam has a new source engine (again!), how can I ensure engine extraction isn't messed up for content requesting multiple engines, as this breaks my content and renders it unpayable with all sorts of error messages? Add the new engines GCF file name to the beginning of the SourceEngineFiles section of the \Configuration\Default Config.xml file. The string should start with the newest engine and end with the oldest in order for GCFPrep to extract multiple engines correctly. GCFPrep creates shortcuts for content in the same folder that the contents executable resides. How can I change this? Change the ShortcutPath in the advanced options screen, or the ShortcutPath section of the GCFPrep.xml file. If this is left blank, shortcuts are created in the default location (the extracted content folder), but if it contains a full path like C:\Documents and Settings\All Users\Steam Games then all shortcuts will be created there. How can I customise icons for the shortcuts that GCFPrep creates? Read \Icon\Icon Files Readme.txt for more information on how to do this correctly. Basically you just need to copy a .ico file into the \Icon folder with the name set to the Steam Application ID of the content you wish to use it for. GCFPrep creates shortcuts for all of my Half-Life 1 mods, but not for my Source mods, despite me ticking the "Detect Source Mods" box. why is that? As Half-Life 1 mods reside in the Half-Life folder, GCFPrep knows where to find these, however you need to tell GCFPrep where to look for your Sourcemods. Change the SourceModPath section of the GCFPrep.xml file to enable this feature to work correctly. Note: GCFPrep will create a sourcemods shortcut based on the AppID that is specified in the mods gameinfo.txt file, you should therefore ensure that all available mod engines are extracted to ensure correct use; or manually change the shortcut if you need to force a specific engine. GCFPrep created a shortcut for a sourcemod, but it shows an error as it can't find hl2.exe As stated above, you need to ensure that your source engines are extracted properley. Some mods require that Source SDK Base is prepared, and some require Half-Life 2. If you do not have a mods required engine, then you can try changing the shortcut paths and AppID to the one you do have, though this won't always work. I've heard that I can add bots to a game / fix server browser files and do pretty much anything every time I prepare content within GCFPrep - how? 1) If you need to update a lot of files for any particular content, then create a UGL/UCL pack zip file, copy it into the \Configuration\File folder and create a new .xml file with the appropriate Pack definition. Read \Configuration\Configuration Readme.txt for more information on how this file is structured. 2) If you need to update a single file for any particular content, then copy it into the \Configuration\File folder and create a new .xml file with the appropriate File definition. Read \Configuration\Configuration Readme.txt for more information on how this file is structured. 3) Remember to upload any fixes and packs that you make to content so that others can enjoy your work too! GCFPrep successfully prepared my content, but it doesn't work: <<Insert Error here>> Do these in the following order: 1) Ensure your support files are up to date and that you still have valid entries for them in the \Configuration\Default Support Files.xml file. The support files are: steamclient.dll, tier0_s.dll and vstdlib_s.dll. Note that some emulators contain a steamclient.dll as well as a steam.dll file, in these instances the emulators file will be used when specified. 2) Ensure you are running the latest version of your chosen Emulator. There may have been a recent release that fixes your problem. You could also try using a different emulator to see if the content then works. You can configure GCFPrep to use different emulators for different content, see Emulator\Emulator Files Readme.txt 3) If problems persist after the above, and you are copying over a previously extracted content folder, then rename the folder to something else and let GCFPrep create a fresh installation. You can then copy in save games etc from your old folder if it works again. 4) The emulators probably need updating - wait patiently! I created a zip pack file for GCFPrep but it does not extract all the files correctly? The zip functions within GCFPrep are fussy about valid files. If you create dummy files (to ensure an empty directory is unzipped etc.) then you must ensure they are not empty zero byte files, or this can halt the unpacking process. I installed a GCFPrep plugin correctly into the \Plugin folder, but it isn't doing anything? A plugin pack should be installed so that the plugin configuration xml file is in the root of the \Plugin folder, with its relevant files in a sub folder. This enables the plugins use within GCFPrep, but you will still require a configuration file to carry out a specific action via the plugin on selected content. See the "ViTYAN GameServers Universal Patch Plugin 1.0 RC 4.zip" file, and "Source 2007 Client Engine Fix.zip" file, both available as additional downloads, for an example on how to use the ViTYAN's VUP plugin to remove client side server protections. What is the GCFPrep_Content.xml file for? This is a system generated file that GCFPrep uses to keep track of content information such as emulators and cache file versions. GCFPrep can then quickly identify your last settings and any outdated content. Every time GCFPrep starts it copies the GCFPrep_Content.xml to GCFPrep_Content_Backup.xml to allow a simple element of recovery should your settings become invalid for whatever reason. I keep getting a message about a missing clientregistry.blob file and then GCFPrep just quits? GCFPrep is no longer supplied with a clientregistry.blob file. This will be downloaded when GCFPrep is first run. If you do not have an internet connection, then please download the optional GCFPrepClientRegistry.Blob.rar pack and unpack it into the root of your GCFPrep folder. Can the paths used by GCFPrep be relative or programmed in any way? Yes, you can enter a relative path in the xml files and it will be processed as follows: Only relative paths off a root folder are currently supported (i.e. .\ and not ..\) Note: if you browse for a path from within the GUI this will overwrite any relative paths you have defined. Also, GCFPrep can accept environment variables for paths as follows: The environment variable must be in the format %SOMETHING% (% must be the first char) Environment variables are searched via user variables first, then machine variables second If an environment variable is not found, then GCFPrep will prompt for a location if required An environement variable can contain a relative path. GCFPrep consolidates paths in the following sequence: Resolves an environment variable if present Resolves a relative path if specified validates the full path Can GCFPrep be used to create standalone content? Yes. GCFPrep supports this when the option to Extract Full Cachefiles is selected You can create streamlined standalones by including a .LST file for the content you are extracting. e.g putting the valid .LST file 220.LST in the GCFPrep Configuration\LST folder will ensure that only cachefiles matching those in the .LST file will be extracted when preparing Half-Life 2. The cache files will always be extracted in the correct order of their respective steam mounts. .LST files are only used when GCFPrep is in Full Cache Extraction mode, which can be set in the advanced options screen or the GCFPrep.xml file.