Valve have decided to move away from the .gcf format for their new game Left 4 dead. Instead, the game is delivered via .ncf with materials, models and particles packed up in a new .vpk package format. I'm curious if this move was inspired by the performance problems caused by fragmented .gcf files. Nonetheless, I've updated both HLLib and GCFScape with support for the new .vpk format.
I'm also in the process of looking to add support for Left 4 Dead to Crafty. Early attempts look promising, I just hope the model format hasn't changed too much.
I haven't had a lot of opportunities to work on my tools these past few months, but today I finally made a effort to get updated versions of VTFLib/VTFEdit, the Photoshop VTF Plug-In and the Paint.Net VTF Plug-In out. Along with support for v7.4 of the VTF format, VTFEdit has been updated to include a custom author information resource (credit Jed for the idea).
virtuAMP has also recently seen an update adding several new standard effects.
Anyone sniffing around the recent Team Fortress 2 preload may have noticed that many of the preloaded VTF files are of a new version. As part of refinements being made to the Source engine, Team Fortress 2 and Half-Life 2: Episode 2 will introduce v7.3 of the VTF format, a minor overhaul exposing an extensible resource interface.
For those interested in taking a gander, I've added support for the new VTF version to VTFLib/VTFEdit, the Photoshop VTF Plug-In, the Paint.Net VTF Plug-In and Crafty. VTFLib and VTFEdit have also been updated to use the newer v2.0 of the .NET Framework.
I thought I'd take a break form my normal Half-Life editing utilities to create something for another one of my passions: the guitar. Introducing virtuAMP, an open source real time virtual guitar amplifier and practice amp alternative. You can sample some audio clips on the about page (I never claimed to be a good guitarist), and check out it's interface below:
I've released yet another VTF utility, this time its a plug-in for an ever improving Paint.NET. The plug-in is based closely on its Photoshop counterpart, but additionally supports normal map generation and animations. You can grab the new plug-in and its source code here. VTFLib and the Photoshop VTF Plug-in have also received updates.
I've released v1.0.0 Alpha 13 of Crafty, a release which adds several missing features bringing Crafty significantly closer to leaving the alpha stage. The latest build can be found here. Some important notes:
- Due to changes in the lightmap generation code for Source VBSP files, upgrading users should make sure to set the Gamma for Source VBSP files to 2.2 in Object Viewer's Options (found under the Setup menu).
- Users who were experiencing problems with fonts should insure that the Engine.FontDriver setting in Object Viewer's INI file (ov.ini) is set to Sprite, or, as a last resort, Null. If you cannot find this setting, run Object Viewer once beforehand.
- Dynamic Lighting is very much a work in progress. I've added shader support to Crafty to better simulate how the Source engine dynamically lights models, but the improved dynamic lighting pipeline wont be available unto the next release.
I realize I haven't updated my site in a while, so I thought I'd take a minute to let all of you who have made feature requests over the past few months know that I haven't forgotten about you. So just what have I been up to?
First and foremost, I've released version 1.6.3 of GCFScape. This new version features configurable columns for viewing additional properties, removal of the File Mapping requirement for defragmenting GCF files (to prevent an overzealous Windows from caching the entire file) and relaxed GCF file integrity checks; all community requested features. As always it can be found here.
Lastly, I've been hard at work on Crafty, implementing the dozen or so features that have been requested. Unfortunately, I bit off a little more than I can chew which means the next release is still a few weeks off (and rapidly approaching the feature set I'm looking for to take it out of alpha). VBSP upgrades include cloud shaders, fog entities, dynamic lighting, improved 3D skybox support and corrected lightmaps (still not quite right):

Those of you Linux users out there may be happy to know that version 2.0.5 of HLLib has been completed with full native Linux support. To install it, simply download the source and follow the instructions to build the shared library and executable (HLExtract). Many thanks to Michael Mohr for orchestrating the port.
I mentioned previously that my attempt to add a fragmentation property to HLLib revealed a surprising amount of GCF fragmentation, even after Steam's built in GCF defragmenter had been run. As a result I've released a new version of GCFScape (complete change-log) and HLLib with my own implementation of a GCF defragmenter. As always you can find GCFScape here.
The results of HLLib's defragmenter were better than I had expected with an average speedup on HLLib tests of 2.62 and an average speedup on Steam tests of 2.32 (for a total average speedup of 2.47). The baseline tests were all conducted on Day of Defeat: Source GCF files that had been run through Steam's defragmenter (which claimed 0% fragmentation even though I calculated an average of 8.38%). Read more for detailed test results and instructions on how to use the defragmenter.
Some of you might have noticed a couple problems with my site over the past few days, these problems stemmed from a recent reformat of The WaveLength's server and seem to be all under control at this point. My apologies for any lost comments/registrations.
In unrelated news, I was looking at adding a fragmentation property to HLLib the other day when I noticed something quite odd. It seems the defragmenter built into Steam does little defragmentation at all. In fact, by my calculations, the majority of my GCF files that have seen regular updates are between 2% and 10% fragmented with individual files up to 15%. This is after I run Steam's defragmenter which happily informs me that my GCF files are at 0% fragmentation. (No wonder the thing's so fast.)
These numbers have a huge negative impact on performance. HLLib, which is not optimized for sequential reading, can surpass 50 MB/s (very close to the practical maximum of my hard drive) on unfragmented files, but often performs as slow as 8 MB/s on heavily fragmented files. Practically I would expect a speed up of 1.5 to 2.0 times with proper defragmentation. For these reasons I have been working on adding a defragmentor to HLLib (and subsequently GCFScape).
I've also been hard at work on Crafty, adding real time dynamic lighting for models. This will hopefully lead to more accurate lighting for models as well as normal mapping and other more advanced lighting features.
