TACTSharp 0.0.9-alpha

This is a prerelease version of TACTSharp.
dotnet add package TACTSharp --version 0.0.9-alpha                
NuGet\Install-Package TACTSharp -Version 0.0.9-alpha                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TACTSharp" Version="0.0.9-alpha" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add TACTSharp --version 0.0.9-alpha                
#r "nuget: TACTSharp, 0.0.9-alpha"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install TACTSharp as a Cake Addin
#addin nuget:?package=TACTSharp&version=0.0.9-alpha&prerelease

// Install TACTSharp as a Cake Tool
#tool nuget:?package=TACTSharp&version=0.0.9-alpha&prerelease                

TACTSharp

Library utilizing memory-mapped file access to speed up initial loading and have lower RAM usage compared to other libraries that load WoW's CASC storage. Made so Marlamin can extract things on their NAS without it getting resource starved.
Largely based on @bloerwald's memory-mapped file reading implementations.

Current features

  • Faster build loading time and lower memory footprint compared to other solutions.
  • Loads both online and local World of Warcraft installations.
  • Loading of game files by ekey, ckey, ID or by name in install manifest.

TODO for 1.0

  • Stabilize and lock-in API usage.
  • Support for encrypted products.
  • Support for specifying install tag priority (so e.g. the exe for WoW China can be extracted).
  • Listfile support (optionally loaded the first time a filename isn't found?).
  • Ability to use a folder with CDN-structured files as a data source (similar to local WoW installs).
  • Test run on all available WoW CDN data to data starting at 6.0.

Not planned

This may change in the future, but this is currently NOT planned to be part of 1.0.

  • Support for other games than WoW.
  • GUI tool.

TACTTool

CLI tool using the library for simple file extraction.

Usage

Description:
  TACTTool - Extraction tool using the TACTSharp library

Usage:
  TACTTool [options]

Options:
  -b, --buildconfig <buildconfig>  Build config to load (hex or file on disk)
  -c, --cdnconfig <cdnconfig>      CDN config to load (hex or file on disk)
  -p, --product <product>          TACT product to load [default: wow]
  -r, --region <region>            Region to use for patch service/build selection/CDNs [default: us]
  -l, --locale <locale>            Locale to use for file retrieval [default: enUS]
  -m, --mode <mode>                Input mode: list, ekey (or ehash), ckey (or chash), id (or fdid), name (or filename)
  -i, --inputvalue <inputvalue>    Input value for extraction
  -o, --output <output>            Output path for extracted files, folder for list mode (defaults to 'extract' folder), output filename for other input modes (defaults
                                   to input value as filename)
  -d, --basedir <basedir>          WoW installation folder to use as source for build info and read-only file cache (if available)
  --version                        Show version information
  -?, -h, --help                   Show help and usage information

Examples

FileDataID

You can use either fdid or id modes to extract specific FileDataIDs from the client.

  • TACTTool -m fdid -i 53188 extracts FileDataID 53188 from Retail WoW to ./53188
  • TACTTool -m fdid -i 53188 -o "warrior terrace.mp3" extracts FileDataID 53188 from Retail WoW to ./warrior terrace.mp3
Filename

You can use either name, filename or install modes to extract files from the install manifest based on filename.

  • TACTTool -m name -i Wow.exe extracts Wow.exe from Retail WoW ./Wow.exe
  • TACTTool -p wowt -m name -i WowT.exe extracts WowT.exe from WoW PTR to ./WowT.exe
EKey/CKey

You can use either ekey or ehash to extract files by their EKey or you can use ckey or chash to extract files by their CKey.

  • TACTTool -m ckey -i 7fa7faa0fdece01a838af3c4005f7f69 extracts CKey 7fa7faa0fdece01a838af3c4005f7f69 to ./7fa7faa0fdece01a838af3c4005f7f69
  • TACTTool -m ckey -i 7fa7faa0fdece01a838af3c4005f7f69 -o BattlePetAbilityEffect.db2 extracts CKey 7fa7faa0fdece01a838af3c4005f7f69 to ./BattlePetAbilityEffect.db2
List
  • TACTTool -m list -i pathtolist.txt will read pathtolist.txt and extract files to the extract folder in the current working directory.
  • TACTTool -m list -i pathtolist.txt -o D:/myoutput will read pathtolist.txt and extract files to the D:/myoutput folder.

Put files to extract in a plain text file in the below format. Similar modes as above are supported. Not giving a mode or FDID assumes it is using the filename mode. An additional part can be used to set the output filename.
These are all valid lines:

install;WoW.exe
install;Wow.exe;Wow-but-I-wanted-to-rename-it.exe
WoW.exe
Wow.exe;Wow-maybe-this-name-is-better.exe
ckey;7fa7faa0fdece01a838af3c4005f7f69
ckey;7fa7faa0fdece01a838af3c4005f7f69;BattlePetAbilityEffect.db2
ekey;00b797ea435427185f33466495855656
ekey;00b797ea435427185f33466495855656;SomeFile.bytes
801575;DBFilesClient/BattlePetAbilityEffect.db2
801575;BattlePetAbilityEffect.db2

Support

Only tested on WoW, other products not supported.

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net9.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.0.9-alpha 10 1/29/2025
0.0.8-alpha 11 1/29/2025