ValveResourceFormat Versions Save

🔬 Valve's Source 2 resource file format parser, decompiler, and exporter.

0.3.1

1 year ago

View commits since 0.3.0

Decompiler

  • --stats now uses memory mapped files when reading from vpk

GUI

  • Enabled high DPI support
  • Optimized package tree
  • Optimized uploading decompressed textures to the GPU
  • Added support for picking objects in map viewer
    • Double click to open selected object in a new tab
  • Added new file type icons
  • Added support for new entity lump values
  • Automatically expand lone folders in package tree (common in maps vpks)
  • Fixed closed resources not releasing memory
  • Fixed some bugs
  • Fixed Counter-Strike 2 vpks not opening
  • Removed SkiaSharp.Views.WindowsForms dependency

Library

  • Added support for new binary keyvalues 3 (0x4B563303)
  • Added support for ResponseRules (vrr)
  • Added support for extracting snapshots (SnapshotExtract, vsnap)
  • Use ArrayPool when decompressing binary keyvalues 3
  • Use ArrayPool in MeshOptimizer
  • Use ArrayPool when decompressing textures
  • All texture decompressors now implement ITextureDecoder interface
  • Reduced memory usage by not keeping textures during glTF export

0.3.0

1 year ago

View commits since 0.2.2

Decompiler

  • Added --gltf_textures_adapt - perform any glTF spec adaptations on textures (e.g. split metallic map)
  • Fixed output files being dumped to disk root when input path did not end with a slash

GUI

  • Improved performance of text views by disabling word wrapping
  • Improved performance of map and model viewer
  • Added support for opening files directly inside of a vpk file by providing a path as an argument to VRF.exe, for example vpk:pak01_dir.vpk:file/inside.vmdl_c
  • Added memory mapped file support when reading package file to reduce memory usage
  • Added support for selecting multiple files in the package viewer
  • Added support for aggregate scene objects in map viewer
  • Added a checkbox to hide tools materials in map viewer
  • Added basic rendering of entity models and sprites similar to Hammer
  • Added automatic folder discovery when folders contain addoninfo.txt or .addon files
  • Opening files inside of game addons folders will now automatically discover folders to load files (by looking for addoninfo.txt)
  • Added export and decompile items to tab context menu (this replaces the Export menu)
  • Exporting (and decompiling) a folder now attempts to deduplicate files, for example when a model exports, it won't export mesh and animation files separately
  • Animated models now calculate their bounding box dynamically, they should no longer disappear out of view in map viewer
  • Animation scrubber now pauses while dragging it
  • Fixed FPS counter to correctly count frames
  • Fixed binary blobs in PhysSceneNode
  • Fixed loading skyboxes in Half-Life: Alyx maps
  • Fixed model viewer having issues with skeletons when the are multiple meshes
  • Fixed export dialog cancel button not actually cancelling the export
  • Fixed particles never decaying
  • Use Cascadia Mono font when available

Library

  • Improved animation handling
    • Implemented CCompressedDeltaVector3 and CCompressedStaticVector3
    • Implemented bone scaling
    • Decode frames on demand to reduce memory usage
    • Bones are now remapped to a model
  • Improved glTF exporting
    • Improved performance and file sizes
    • Reuse animations, skeletons, models, and meshes whenever possible
    • Decompiling a folder will now use glTF exporter
    • Generate PBR texture that glTF can understand
    • Embedded meshes now have names
    • Vertex buffers are no longer duplicated per draw call
    • Added morph position data
    • Only well known vertex accessors are output now
    • Fixed some bugs
  • Improved material and texture extraction
    • Sprite textures will now export into individual frames
    • Materials will now produce a vmat file and individual textures
  • Added support for sound phoneme reading
  • Added support for post processing file reading
  • Added support for newer shader file versions
  • Mesh and Morph are now resource data types
  • Fixed lz4 ring decoder frame size in binary kv3
  • Fixed heap corruption after decompressing zstd binary kv3
  • Fixed NTRO Color type
  • Fixed CBlockDecompress::FastDecompress implementation
  • Use native Half type

0.2.2

1 year ago

View commits since 0.2.1

GUI

  • Allow double clicking external refs to open file
  • Draw bounding boxes for sprite frame
  • Fixed some deprecated OpenGL usages
  • Some performance optimizations

Library

  • AnimationGroupLoader is now in the library
  • EntityLumpKeyLookup is now called StringToken
  • Implemented sprite sheets in Texture
  • Improved material attribute exporting
  • Added support for R16G16_SNORM vertex attributes
  • Added .vts resource type (typescript)
  • Added faster path for UTF-8 in ReadNullTermString
  • Fixed parsing negative numbers in text kv3
  • Extract binary kv3 files with a kv3 header
  • Do not output format:generic when we know it's not generic for kv3 files

0.2.1

2 years ago

View commits since 0.2.0

CLI

  • Added arm/arm64 builds
  • Added --recursive_vpk option

GUI

  • Added support for recovering deleted files in vpk archives
    • It tries to automatically detect resource types
    • See @PistonMiner's post here for more details on this
  • Added support for embedded animations in vagrp
  • Added support for automatically finding bare files on disk when opening a model
  • Render entity lumps into a separate tab
  • Normalize line endings in text viewer
  • Do not crash when settings.txt fails to load

Library

  • New vcs (compiled shader) decompiler, thanks to @robert-hoff
  • Added entity I/O output in entity lump dump
  • Added Resource.FullFileSize to attempt to calculate full buffer size of a resource file
    • Metadata does have a file size, but it excludes sound and texture data
  • Added Texture.CalculateTextureDataSize method to return full texture buffer size
    • For block compressed textures this is as simple as summing up all mipmap level sizes
    • For PNG textures, it will check for a valid header and scan all the PNG chunks until the end
    • This does not work for JPEG files at the moment
  • Added verifyFileSize (default true) to Resource.Read to verify that the provided stream was fully consumed by VRF
  • Added vanmgrph, vcdlist, and vdata resource type auto detection
  • Added detection of resource type from singular input dependency in REDI
  • Skip weights that are not vec4 during glTF export
  • Fixed crash when determining file type from extensionless file name
  • Fixed crash with duplicate key names in SoundStackScriptValue
  • Fixed mipmap level calculation for small textures

0.2.0

2 years ago

View commits since 0.1.10

This release targets .NET 6.

CLI

  • Added support for extension filter on recursive folders outside of vpks
  • VPKs in VPKs are now recursed into
  • Allow collecting stats on anything supported, not just resources

GUI

  • Save and restore main window position and dimensions
  • Added vmat tab that renders as keyvalues1
  • Fixed exception after exporting to root of disk
  • Removed "wtf" exception

Library

  • Added support for dynamic expressions in material exports
  • Added support for reconstructing xml files from vxml AST
  • Added support for pretty printing css
  • Added support for new versions of ToolsAssetInfo
  • Corrected implementation of audio bits
  • Refuse to export huge models that don't merge into one glb buffer
  • Determine resource type from file name first

0.1.10

2 years ago

View commits since 0.1.9

  • Removed AppVeyor CI

GUI

  • Material (vmat) renderer now uses correct vertex shader (fixes crashing on Intel drivers)
  • Fallback particle number and vector providers to static value (fixes HL:A maps not loading)

Library

  • Implemented Zstandard decompression of binary keyvalue3 binary blobs
  • Implemented CUBEMAP_RADIANCE_SH reading
  • Fixed corrupted texture due to lz4 compression
  • Fixed CCompressedFullQuaternion animation decoder decompression

0.1.9

2 years ago

View commits since 0.1.8

GUI

  • Added vphys rendering

CLI

  • Find all vpks when collecting stats in a folder
  • Split exceptions per file type when collecting stats

Library

  • Added support for RED2 block (It's REDI but keyvalues3)
  • Added support for Zstandard binary keyvalues3 compression
  • Added INSG block
  • Added plaintext resource type
    • Artifact's DotaItem (item_c)
    • s&box's plain text data (SBData)
  • Added VTexExtraData.CUBEMAP_RADIANCE_SH
  • EntityLumpKeyLookup is now thread-safe
  • Multiple fixes to binary keyvalues3 (fixes s&box compatibility)
  • Disabled glTF buffer merging for files over 1GiB in size

0.1.8

3 years ago

View commits since 0.1.7

GUI

  • Default open dialog to steamapps/common folder for new users
  • Added material group support in model viewer
  • Fixed crash on missing layers in map viewer
  • Fixed color tinting in vr_standard shader
  • Updated vcdlist icon

CLI

  • Added --vpk_list - lists all resources in given VPK
  • Added --gltf_export_format - exports meshes/models in given glTF format
  • Added --gltf_export_materials - whether to export materials during glTF exports
  • Fixed macOS binaries in GitHub releases

Library

  • Added support for exporting worlds (maps) and world nodes
  • Added support for newer tool asset info files
  • Added support for old pre-VBIB meshes
  • Added support for SrMa block (source maps)
  • Resource type is now determined from file extension if all other methods fail
  • Texture names in glTF exports are now preserved
  • Textures are now external in GLB exports
  • Updated KVFlaggedValue with new flags (resource_name, panorama, soundevent, subclass)
  • Updated known entity lump keys
  • Multiple improvements to texture exporting in glTF
  • Improved byte array support in NTRO
  • Fixed glTF rotation
  • GltfModelExporter.ProgressReporter is now IProgress<string>
  • VBIB structs were changed to match Valve's format more closely

0.1.7

3 years ago

View commits since 0.1.6

This release targets .NET 5.

GUI

  • Added trackbar for playing animations
  • Added support for exporting as GLB instead of GLTF
  • Binary kv1 files can be opened now (like chat.cfg)

Library

  • Added partial support for exporting animations to glTF
  • Added support for binary keyvalues 1 (to parse patchnotes.vdpn_c)
  • Added support for vsnap files
  • Added support for vrman files
  • Updated known entity lump keys

0.1.6

3 years ago

View commits since 0.1.5

GUI

  • Fixed case sensitive searching
  • Search will automatically search paths if input contains a slash

Library

  • Added support for new version of compressed binary keyvalues3
  • Fixed ETC textures decompressing upside down
  • Fixed Rgba8888 colors
  • Most texture decompressors use Span<T> now (this change may have introduced some decoding bugs)