Blog Amateur Instant

“It’s a dirt road,” Dad argued. “We have a sedan.”

“Preparation is freedom,” he said, handing me a laminated itinerary.

Everyone looked at me. I never had opinions on logistics. I only had opinions on playlists and whether my brother was touching me. blog amateur

Thanks for reading. Next week: The boy who stole my mixtape in 10th grade.

We stayed for forty minutes. We didn’t take a single picture. Then Dad turned the car around, the map still useless in the back seat, and we drove home the long way. “It’s a dirt road,” Dad argued

“Gas is low,” Mom said softly. “Back is sixty miles.”

“You knew,” he said.

The Summer the Map Ran Out of Ink Posted by: Margot | August 12th | Filed under: Growing Pains, Road Trips, Letting Go

Then, somewhere outside of Moab, Utah, the map ran out of ink. I never had opinions on logistics

And I learned that sometimes, the only way to find the thing you weren’t looking for is to run out of instructions.

Command line utility

A cross-platform console application that can export and decompile Source 2 resources similar to the main application.

ValveResourceFormat

.NET library that powers Source 2 Viewer (S2V), also known as VRF. This library can be used to open and extract Source 2 resource files programmatically.

ValveResourceFormat.Renderer

.NET library providing an OpenGL-based rendering engine for Source 2 assets. Standalone rendering of models, maps, particles, animations, lighting, and materials with physically-based rendering (PBR).

ValvePak

.NET library to read Valve Pak (VPK) archives. VPK files are uncompressed archives used to package game content. This library allows you to read and extract files out of these paks.

ValveKeyValue

.NET library to read and write files in Valve key value format. This library aims to be fully compatible with Valve's various implementations of KeyValues format parsing.

C#
// Open package and read a file
using var package = new Package();
package.Read("pak01_dir.vpk");

var packageEntry = package.FindEntry("textures/debug.vtex_c");
package.ReadEntry(packageEntry, out var rawFile);

// Read file as a resource
using var ms = new MemoryStream(rawFile);
using var resource = new Resource();
resource.Read(ms);

Debug.Assert(resource.ResourceType == ResourceType.Texture);

// Get a png from the texture
var texture = (Texture)resource.DataBlock;
using var bitmap = texture.GenerateBitmap();
var png = TextureExtract.ToPngImage(bitmap);

File.WriteAllBytes("image.png", png);
View API documentation
Screenshot of the 3D renderer displaying a Counter-Strike 2 player model on a grid Screenshot showing the VPK package explorer interface with a file tree and a list view Screenshot of the animation graph viewer showing nodes Screenshot of the command line interface showing DATA block for an audio file

“It’s a dirt road,” Dad argued. “We have a sedan.”

“Preparation is freedom,” he said, handing me a laminated itinerary.

Everyone looked at me. I never had opinions on logistics. I only had opinions on playlists and whether my brother was touching me.

Thanks for reading. Next week: The boy who stole my mixtape in 10th grade.

We stayed for forty minutes. We didn’t take a single picture. Then Dad turned the car around, the map still useless in the back seat, and we drove home the long way.

“Gas is low,” Mom said softly. “Back is sixty miles.”

“You knew,” he said.

The Summer the Map Ran Out of Ink Posted by: Margot | August 12th | Filed under: Growing Pains, Road Trips, Letting Go

Then, somewhere outside of Moab, Utah, the map ran out of ink.

And I learned that sometimes, the only way to find the thing you weren’t looking for is to run out of instructions.

Changelog

Made possible by amazing people

Source 2 Viewer is open-source and built by volunteers. Every contribution helps make it better for everyone.