A Go toolkit for working with EVR (Echo VR) package and manifest files.
Thanks to Exhibitmark for carnation which helped with reversing the manifest format!
- Extract files from EVR packages
- Build new packages from extracted files
- Analyze and diff manifests
- Inventory extracted assets by type
- Compute and reverse-lookup EVR symbol hashes
- Full texture conversion pipeline: DDS <-> PNG with BC1/BC3 compression
- Display and export tint color data as CSS
- ZSTD compression/decompression with optimized context reuse
- Go 1.24 or later
- libsquish (optional, for PNG -> DDS encoding in
texconv)- Ubuntu/Debian:
sudo apt-get install libsquish-dev - Arch Linux:
sudo pacman -S libsquish - macOS:
brew install squish
- Ubuntu/Debian:
go install github.com/EchoTools/evrFileTools/cmd/evrtools@latest
go install github.com/EchoTools/evrFileTools/cmd/showtints@latest
go install github.com/EchoTools/evrFileTools/cmd/texconv@latest
go install github.com/EchoTools/evrFileTools/cmd/symhash@latestgit clone https://github.com/EchoTools/evrFileTools.git
cd evrFileTools
make buildBinaries are output to the bin/ directory.
evrtools -mode extract \
-data ./ready-at-dawn-echo-arena/_data/5932408047/rad15/win10 \
-package 48037dc70b0ecab2 \
-output ./extractedOutput structure: ./output/<typeSymbol>/<fileSymbol>
With -preserve-groups: ./output/<frameIndex>/<typeSymbol>/<fileSymbol>
evrtools -mode build \
-input ./files \
-output ./output \
-package mypackageExpected input structure: ./input/<frameIndex>/<typeSymbol>/<fileSymbol>
# Inventory: count files and sizes by type
evrtools -mode inventory -input ./extracted
# Analyze: detect file formats via magic bytes + entropy
evrtools -mode analyze -input ./extracted
# Diff: compare two manifests
evrtools -mode diff \
-data ./path/to/_data \
-manifest-a package_a \
-manifest-b package_bCompute and reverse-lookup EVR symbol hashes:
# Hash a symbol name
symhash mySymbolName
# Reverse-lookup from a hash
symhash -reverse 0xbeac1969cb7b8861
# Use a wordlist for reverse lookups
symhash -reverse 0xbeac1969cb7b8861 -wordlist symbols.txt
# Use SNS message hash algorithm
symhash -algo sns SNSLobbySmiteEntrant# Show all tints with details
showtints ./extracted
# Export tints as CSS custom properties
showtints --css --known ./extracted > tints.css
# Show summary only
showtints --summary ./extracted# Decode DDS to PNG for editing
texconv decode texture.dds texture.png
# Encode PNG back to DDS with automatic format detection
texconv encode texture.png texture.dds
# Show texture information
texconv info texture.dds
# Batch convert directory
texconv batch decode _extracted/ png_output/
texconv batch encode png_input/ dds_output/Supported formats: BC1 (DXT1), BC3 (DXT5), BC5 (partial), BC6H/BC7 (decode only).
| Flag | Description |
|---|---|
-mode |
Operation mode: extract, build, inventory, analyze, diff |
-data |
Path to _data directory containing manifests and packages |
-package |
Package name (e.g., 48037dc70b0ecab2) |
-input |
Input directory (for build, inventory, analyze) |
-output |
Output directory (for extract, build) |
-preserve-groups |
Preserve frame grouping in extract output |
-force |
Allow non-empty output directory |
-verbose |
Show detailed output |
-manifest-a |
First manifest for diff mode |
-manifest-b |
Second manifest for diff mode |
| Flag | Description |
|---|---|
-css |
Output tints as CSS custom properties |
-known |
Only show entries matching known tint hashes |
-nonzero |
Only show entries with non-zero color data |
-summary |
Only show summary statistics |
-raw |
Show raw hex bytes (default: true) |
| Command | Description |
|---|---|
decode <in.dds> <out.png> |
Decompress DDS to PNG |
encode <in.png> <out.dds> |
Compress PNG to DDS |
info <file.dds> |
Display texture info |
batch <mode> <indir> <outdir> |
Batch convert directory |
evrFileTools/
├── cmd/
│ ├── evrtools/ # Package extract/build/analyze CLI
│ ├── showtints/ # Tint display and CSS export CLI
│ ├── symhash/ # Symbol hash computation CLI
│ └── texconv/ # DDS <-> PNG texture converter
├── pkg/
│ ├── archive/ # ZSTD archive format (header, reader, writer)
│ ├── manifest/ # EVR manifest parsing, package extraction, building
│ ├── hash/ # EVR symbol hash algorithms (CSymbol64, SNSMessage)
│ ├── naming/ # Type symbol mappings and asset name resolution
│ ├── texture/ # Texture metadata and DDS conversion
│ ├── audio/ # Audio format detection
│ ├── tint/ # Tint color parsing and CSS export
│ └── asset/ # Asset reference structures
├── docs/ # Format specifications and research
├── CONTRIBUTING.md # Development guidelines, commit conventions
├── LICENSE # MIT License
├── Makefile
└── go.mod
make build # Build all CLI tools
make test # Run all tests
make check # Format, vet, and test
make bench # Run benchmarks
make clean # Remove build artifacts
make install # Install all CLI tools via go installSee CONTRIBUTING.md for commit conventions, versioning policy, and code style guidelines.
- ASSET_FORMATS.md - Binary format specifications
- IMPLEMENTATION_SUMMARY.md - Design overview
- TEXTURE_FORMAT_VERIFIED.md - Texture format analysis
- LEVEL_FORMAT_INVESTIGATION.md - Level format research
MIT License - see LICENSE