A .NET 10.0 toolkit for exploring, rendering, and converting Bethesda game data. It reads the plugin, archive, mesh, texture, and audio formats used across The Elder Scrolls and Fallout — Morrowind through Starfield, on PC and Xbox 360 — through a WinUI 3 GUI with a real-time Direct3D 12 worldspace viewer, a cross-platform CLI for batch work, and a standalone Audio Transcriber for voice files.
Its deepest support is for Fallout: New Vegas on Xbox 360: converting retail and prototype console builds to PC format, and reconstructing loadable plugins out of console crash dumps.
A navigation sidebar with these destinations:
- Data Explorer: Open a plugin, memory dump, or save game and inspect it across eight views —
- Records: browse records with search, property display, and GECK-style flag decoding
- Dialogue: NPC dialogue trees by speaker, quest, and topic
- World: switch between a 2D map and a real-time 3D View (below)
- Actors: searchable NPC/creature list with a live 3D model viewer and Full Body / Armor / Weapon / Idle Pose toggles
- Reports: GECK-style reports with search and export
- Raw View: virtual-scrolling hex editor supporting 200MB+ files with minimap overview
- Overview and Coverage Gaps: file/record-type summary, and a table of bytes the parser could not account for
- 3D Worldspace Viewer (the Data Explorer's World → 3D View): real-time Direct3D 12 renderer for any worldspace or interior — streamed terrain, sky/cloud/weather layers, cascaded sun shadows, per-game water, grass and SpeedTree wind, particles, placed lights with day/night gating, HDR tonemapping and bloom, Havok-collision walk mode, nav-mesh / collision / FormID-heatmap overlays, and orthographic/isometric tiled PNG export
- Archive Browser: Browse and extract BSA and BA2 archives, with Xbox 360 to PC conversion for BSA
- Model Tools: Batch Convert (Xbox 360 → PC NIF mesh conversion with geometry expansion + endian conversion) + Viewer (browse a folder / archive, inspect blocks, render PNG, export GLB)
- Texture Tools: Batch DDX to DDS texture conversion
- Game Repacker: Convert a whole Xbox 360 Fallout: New Vegas installation into a playable PC install — BIK video, XMA → MP3 music, BSA extract/convert/repack, menu unpacking, ESM/ESP endian conversion, and a hybrid INI
- DMP to ESM Converter: Rebuild a loadable ESM/ESP plugin from an Xbox 360 crash dump, optionally packing missing assets into a BSA
- Batch Dump Analysis: Carve files from memory dumps in bulk — signature detection, extraction, and DDX/XMA conversion
- Diagnostics: Live cache, queue, and memory statistics
Record browsing, the world map, and the 3D viewer are game-detected and work across the supported titles; the Game Repacker is Fallout: New Vegas only.
| Command | Description |
|---|---|
| (default) | Carve files from a memory dump or DDX by type (-t dds ddx xma nif), with optional conversion |
analyze |
Analyze a memory dump's structure; optionally extract ESM records and GECK-style reports |
esm |
Analyze plugins and convert Xbox 360 → PC (GECK compatible) |
dmp |
Memory dump analysis (modules, regions, coverage, cross-build compare, …) plus dmp to-esm — rebuild a loadable ESM/ESP plugin from a dump |
repack |
Convert a whole Xbox 360 Fallout: New Vegas installation to a PC install (video, music, BSAs, menus, ESM/ESP) |
archive |
Inspect, extract, and convert BSA / BA2 archives (bsa and ba2 are deprecated aliases) |
convert-nif |
Convert Xbox 360 NIF meshes to PC format |
convert-ddx |
Convert DDX textures to DDS |
render / export |
Render NIF/NPC models to PNG, or export NIFs, NPCs and creatures to GLB |
world |
Explore worldspace data, heightmaps, map markers, and placed objects |
btd |
Inspect and render Bethesda Terrain Data (.btd) heightmaps (Fallout 76 / Starfield) |
dialogue |
Browse and export NPC dialogue trees |
papyrus |
Inspect, disassemble, decompile, and extract Papyrus (.pex) compiled scripts |
save |
Inspect Fallout 3/NV save games — header, changed forms, player state, stats, STFS containers |
rtti |
Resolve C++ class names from vtable addresses via MSVC RTTI (also available as dmp rtti) |
search / stats / list / show / diff |
Format-agnostic inspection of any ESM/ESP/DMP file |
report |
Validate generated report fields and cross-check report consistency across builds |
version-track |
Track game data changes across development builds |
A standalone companion app for transcribing Fallout: New Vegas voice files using Whisper speech-to-text. See the Audio Transcriber section below for details.
| Category | Formats |
|---|---|
| Game Data | ESM/ESP — schema-driven read for Morrowind (TES3), Oblivion, Fallout 3, New Vegas, Skyrim, Fallout 4, and Fallout 76; Xbox 360 → PC conversion for Fallout 3 / New Vegas. Starfield is supported for terrain, meshes, materials, and archives, but has no record schema yet |
| Save games | FOS / FXS (Fallout 3 / New Vegas), including STFS containers |
| Models | NIF (Xbox 360 to PC conversion with geometry expansion), Starfield .mesh + .cdb materials; GLB/glTF export |
| Terrain | BTD (Bethesda Terrain Data — Fallout 76 / Starfield) |
| Archives | BSA (Bethesda Softworks Archive) — read all eras, write v104 (Fallout 3 / New Vegas); BA2 (Fallout 4 / 76 / Starfield) — read |
| Textures | DDX (3XDO/3XDR), DDS, PNG |
| Audio | XMA (Xbox Media Audio), WAV, MP3, OGG, LIP (lip sync) |
| Video | BIK (Bink) |
| Scripts | ObScript bytecode + Papyrus (.pex) — decompilation + comparison |
| UI | XDBF (Xbox Dashboard), XUI/XUR, final_master_xml.dat menu archives |
| Text | Subtitle indexes |
| Crash dumps | Xbox 360 minidumps with PDB-aware struct reading |
Download from Releases:
| Platform | Download |
|---|---|
| Windows GUI | BethesdaMultitool-Windows-GUI-x64.zip |
| Windows CLI | BethesdaMultitool-Windows-CLI-x64.zip |
| Linux CLI | BethesdaMultitool-Linux-CLI-x64.tar.gz |
| Audio Transcriber | BethesdaAudioTranscriber-Windows-x64.zip |
Requires .NET 10 SDK.
# Clone with submodules
git clone --recursive https://github.com/slfx77/bethesda-multitool.git
cd bethesda-multitoolOn Windows, build everything in BethesdaMultitool.slnx — GUI, CLI, companion apps, and tests:
dotnet build -c Release
dotnet test
# Run the GUI
dotnet run --project src/BethesdaMultitool -f net10.0-windows10.0.19041.0
# Run the CLI
dotnet run --project src/BethesdaMultitool -f net10.0 -- --helpOn Linux / macOS, build the CLI only. The solution contains WinUI 3 projects whose
net10.0-windows… target MSBuild cannot evaluate off Windows (NETSDK1100), and -f net10.0 alone
does not stop it trying — so scope to the project and pass -p:BuildTestsOnly=true, which collapses
the target frameworks to net10.0:
dotnet build src/BethesdaMultitool/BethesdaMultitool.csproj -c Release -p:BuildTestsOnly=true -f net10.0
dotnet run --project src/BethesdaMultitool -c Release -p:BuildTestsOnly=true -f net10.0 -- --help-p:BuildTestsOnly=true is also the fast path on Windows when you do not need the GUI, and
-p:SkipAnalyzers=true skips the SonarAnalyzer/Roslynator pass for quicker iteration.
Launch without arguments for the GUI, or auto-load a file:
BethesdaMultitool.exe
BethesdaMultitool.exe path/to/dump.dmpThe sidebar groups its destinations as Explore (Data Explorer) | Assets (Archive Browser, Model Tools, Texture Tools) | Conversion (Game Repacker, DMP to ESM Converter) | Memory Dumps (Batch Dump Analysis), with Diagnostics and Settings in the footer.
# Carve files from a memory dump (the default command — no subcommand)
BethesdaMultitool dump.dmp -o output -t ddx xma nif
# Analyze a memory dump's structure (-s also writes a GECK-style semantic report)
BethesdaMultitool analyze dump.dmp -o report.txt -s geck-report.txt
# Convert Xbox 360 ESM to PC format
BethesdaMultitool esm convert Sample/ESM/360_final/FalloutNV.esm -o FalloutNV.pc.esm
# Rebuild a loadable plugin from an Xbox 360 crash dump (overlays a PC master)
BethesdaMultitool dmp to-esm dump.dmp --pc-esm FalloutNV.esm -o Recovered.esp
# Convert Xbox 360 NIF to PC format
BethesdaMultitool convert-nif mesh.nif -o output/
# Browse dialogue by NPC
BethesdaMultitool dialogue npc dump.dmp CraigBoone
# Render a worldspace heightmap
BethesdaMultitool world heightmap FalloutNV.esm -o map.png -w WastelandNV
# Inspect a save game
BethesdaMultitool save info savegame.fos
# Force CLI mode on Windows (otherwise defaults to GUI)
BethesdaMultitool --no-gui dump.dmp -o outputThe Bethesda Audio Transcriber is a standalone WinUI 3 application for browsing and transcribing Fallout: New Vegas voice files. It is provided as a precompiled download in Releases.
- Loads voice audio files (XMA, WAV) from Bethesda BSA and BA2 archives
- Plays back voice lines with an integrated audio player
- Transcribes speech to text using Whisper.net (OpenAI Whisper, runs locally), one line at a time or as a multi-threaded batch run with live progress
- Cross-references voice files against the ESM to display speaker names, quest context, and existing subtitle text
- Offers a review pass over Whisper output — Approve, Reject (revert to the ESM subtitle), or Dismiss each line, with suspected-typo flags loaded from a
.fnvreview.jsonsidecar - Exports finished transcriptions to CSV or to a plain-text report grouped by quest and speaker
- Saves transcription projects for incremental work across sessions
- Download and extract
BethesdaAudioTranscriber-Windows-x64.zipfrom Releases - Launch
BethesdaAudioTranscriber.exe - Point it at a Fallout: New Vegas
Datadirectory containing voice BSA files (e.g.,Fallout - Voices1.bsa) - The app parses all voice archives, cross-references with
FalloutNV.esmif present, and presents a browsable playlist
- On first use, the Whisper model (
ggml-base.en, ~148 MB) is automatically downloaded to%LocalAppData%\BethesdaAudioTranscriber\models\ - Audio is resampled to 16kHz mono before transcription
- Transcriptions are saved into the Data directory as
.fnvtranscript.jsonand persist across sessions - Voice files with existing ESM subtitles (NAM1) are shown alongside Whisper transcriptions for comparison
- Windows 10 (build 17763+) or later
- No .NET runtime needed — self-contained build with the Whisper runtime included
- FFmpeg is required for Xbox 360
.xmavoice files, which need decoding before playback or transcription. Install it on PATH or atC:\ffmpeg\bin\(see External Dependencies); the app warns on load if a build contains XMA and FFmpeg is missing. PC builds ship WAV and do not need it. - An internet connection on first run, to download the Whisper model
The ESM converter handles Xbox 360 to PC format conversion for Fallout 3 / New Vegas plugins:
- Endian conversion: Record/subrecord headers and data fields (hybrid big/little-endian)
- Split INFO merging: Xbox 360's split dialogue records merged to match PC format
- Schema-driven: Field types defined in
SubrecordSchemaRegistryfor correct byte-swapping - GECK compatible: Output loads in the Garden of Eden Creation Kit
Conversion is built on the 24-byte TES4-era record/GRUP framing, so it covers the Fallout 3 / New Vegas generation. Reading — as opposed to converting — is much broader; see Format Support.
dmp to-esm rebuilds a loadable ESM/ESP plugin out of an Xbox 360 crash dump, recovering game data from a build that may never have shipped a plugin you can read directly. A two-pass planner settles every decision before a byte is written: per-record dispositions and cell-child verdicts, actor merge/move policy, duplicate-actor merging, override-door cloning, persistent-cell reparenting, dialogue exit-topic relinking, navmesh NVCI/NVEX reconstruction, and leveled-spawn recovery. report validate and report consistency sanity-check the result field by field and across builds.
Decompiles game script bytecode back to readable source across engines:
- ObScript (SCDA subrecords): full New Vegas opcode coverage, reused for Fallout 3 (which adds its own retail-derived condition map), plus Oblivion
- Papyrus (
.pex): Skyrim, Fallout 4, and Fallout 76 compiled-script decompilation and disassembly - Cross-script variable resolution via SCRO/SCRV reference chains
- FormID to EditorID resolution for human-readable output
- Semantic comparison between original SCTX source and decompiled output
Standalone CLI tools for format analysis and debugging. These are not included in precompiled releases — build from source with dotnet run --project tools/<name>.
| Tool | Description |
|---|---|
tools/EsmAnalyzer |
Niche ESM/DMP debugging: GRUP structure, WRLD OFST streaming, land/heightmap export, worldmap visualization, dump script analysis |
tools/NifAnalyzer |
NIF mesh structure inspection, vertex/geometry comparison, skin partition and Havok physics debugging |
tools/TextureAnalyzer |
DDX/DDS texture analysis, decompression, block map visualization, format conversion |
tools/EgtAnalyzer |
FaceGen EGT texture analysis |
tools/PdbAnalyzer |
PDB symbol analysis, struct layout generation, function extraction |
tools/RttiScanner |
RTTI and operator-new extraction from raw binaries |
tools/TerrainAnalyzer |
Terrain and heightmap analysis and visualization |
tools/SignatureScanner |
File signature scanning utilities |
tools/EsmSchemaGen |
Generates per-game C# record schemas from xEdit wbDefinitions*.pas (feeds the multi-game reader) |
tools/ShaderProbe |
Extracts and probes the FNV shaderpackage.sdp for renderer-parity analysis |
# ESM structure and comparison (main app)
dotnet run --project src/BethesdaMultitool -f net10.0 -- esm stats FalloutNV.esm
dotnet run --project src/BethesdaMultitool -f net10.0 -- esm semdiff converted.esm pc_reference.esm -t NPC_
dotnet run --project src/BethesdaMultitool -f net10.0 -- archive find archive.bsa "*.nif"
# Niche ESM/DMP debugging
dotnet run --project tools/EsmAnalyzer -c Release -- grups FalloutNV.esm
dotnet run --project tools/EsmAnalyzer -c Release -- dmp scripts list dump.dmp
# NIF structure analysis
dotnet run --project tools/NifAnalyzer -f net10.0 -- info mesh.nif
# Texture analysis
dotnet run --project tools/TextureAnalyzer -- info texture.ddxAbridged — only the larger subsystems are shown.
src/BethesdaMultitool/
├── App/ # WinUI 3 GUI (Windows only)
│ ├── Controls/ # WorldView3D (Direct3D 12 viewer), WorldMap, markers, cell lists
│ ├── Dialogs/ # Shared dialogs (shortcuts, dependencies, load order)
│ ├── HexViewer/ # Virtual-scrolling hex editor + minimap
│ ├── Helpers/ # Tree builders, display helpers
│ ├── Models/ # Session state, view models
│ └── Tabs/ # SingleFile (Data Explorer), BsaExtractor, NifConverter,
│ # DdxConverter, Repacker, DmpToEsmConverter, BatchMode, Diagnostics
├── CLI/ # Cross-platform CLI commands, render/export pipelines
├── Core/ # Format and analysis libraries
│ ├── Carving/ # File signature detection and extraction
│ ├── Formats/
│ │ ├── Bsa/ # BSA + BA2 archive parsing and extraction
│ │ ├── Ddx/ Dds/ Png/ # Texture parsing and conversion
│ │ ├── Esm/ # Plugin parsing, conversion, planning/writing, runtime readers
│ │ ├── Nif/ # Mesh parsing, conversion, and the Direct3D 12 render stack
│ │ ├── Papyrus/ # PEX parsing, disassembly, decompilation
│ │ ├── SaveGame/ # Fallout 3/NV save game (FOS/FXS/STFS) parsing
│ │ ├── SpeedTree/ # SpeedTree (.spt) geometry and wind
│ │ ├── Tes3/ # Morrowind's flat record stream
│ │ ├── Xma/ Lip/ Bik/ # Audio, lip sync, and video
│ │ └── Menus/ Xui/ Xdbf/ Subtitles/
│ ├── Games/ # Per-game profiles and detection
│ ├── Minidump/ # Xbox 360 minidump parsing and RTTI
│ ├── Pdb/ # PDB symbol resolution
│ ├── Repack/ # Xbox 360 install → PC install repacking
│ ├── RuntimeBuffer/ # Runtime string/pointer analysis
│ ├── Semantic/ # Format-agnostic ESM/DMP/ESP loading
│ ├── VersionTracking/ # Cross-build change tracking
│ ├── Vfs/ # Layered loose-file + archive virtual filesystem
│ ├── WorldData/ # Worldspace, terrain, and map data
│ └── Utils/ # Binary utilities
src/BethesdaAudioTranscriber/ # Whisper-based voice file transcriber (WinUI 3)
src/BethesdaRendererProfiler/ # 3D renderer profiling harness (WinUI 3)
src/BethesdaMap2DProfiler/ # 2D map profiling harness (WinUI 3)
src/DDXConv/ # DDX conversion library (submodule)
tools/
├── EsmAnalyzer/ # Niche ESM/DMP debugging
├── NifAnalyzer/ # NIF structure inspection and comparison
├── TextureAnalyzer/ # DDX/DDS texture analysis
├── EgtAnalyzer/ # FaceGen EGT texture analysis
├── PdbAnalyzer/ # PDB symbol analysis and struct layout generation
├── RttiScanner/ # RTTI / operator-new extraction
├── TerrainAnalyzer/ # Terrain/heightmap analysis
├── SignatureScanner/ # File signature scanning
├── EsmSchemaGen/ # Per-game record schema generation from xEdit definitions
├── ShaderProbe/ # FNV shaderpackage.sdp extraction and probing
└── Shared/ # Shared CLI strings library
Some features require external tools. The GUI shows a notification on startup if any are missing.
XMA to WAV conversion requires FFmpeg on PATH or at C:\ffmpeg\bin\. Without it, XMA files are extracted but not converted to WAV. The Game Repacker also drives FFmpeg for MP3 and OGG encoding, so use a build with libmp3lame and libvorbis.
The Actors and Model Tools 3D model viewers host @google/model-viewer in a WebView2 control, which needs the machine-wide Microsoft Edge WebView2 Runtime. It ships with Windows 11 and current Windows 10, so this is normally already present.
- Xbox 360 ESM Format - ESM binary format and hybrid endianness
- DDX Format - DDX texture format documentation
- PDB Runtime Structures - Gamebryo runtime struct layouts
- Script Bytecode Format - ObScript SCDA bytecode format
- Acronyms - Glossary of the four-character record types and abbreviations used throughout
- Changelog
MIT License - See LICENSE for details.
| Component | License | Usage |
|---|---|---|
| DDXConv | MIT | DDX to DDS texture conversion (forked, built-in) |
| NifSkope nif.xml | BSD-3-Clause | NIF format schema (embedded) |
| Xenia | BSD-3-Clause | Xbox 360 texture tiling code (in DDXConv) |
| fo76utils | MIT | BA2 archive parser + BTD terrain reader (re-implemented) |
| @google/model-viewer | BSD-3-Clause | 3D NPC model viewer (bundled in GUI) |
| OpenTESArena | MIT | Arena codecs, image/animation/map decoders and FLIC (ported) |
| daggerfall-unity | MIT | Daggerfall format decoders via DaggerfallConnect (ported) |
| falltergeist/dat-unpacker | MIT | Fallout DAT1 LZSS decompression (ported) |
- Vortice.Windows - Direct3D 12 + DXGI bindings for GPU rendering (MIT)
- SharpGLTF - glTF/GLB model export (MIT)
- Spectre.Console - CLI output formatting (MIT)
- System.CommandLine - CLI argument parsing (MIT)
- Magick.NET - Image processing (Apache-2.0)
- SixLabors.ImageSharp - Image processing (Apache-2.0)
- BCnEncoder.Net - Block compression encoding (MIT)
- Whisper.net - Speech-to-text transcription (MIT)
- NAudio - Audio playback and resampling (MIT)
- xunit - Unit testing (Apache-2.0)
- microsoft/microsoft-pdb - PDB format and cvdump tool (MIT)
- wbenny/pdbex - PDB struct layout extraction (MIT)
- 0dinD/ghidra - VMX128 PowerPC SLEIGH definitions for Ghidra
- xEdit / TES5Edit - ESM format documentation
- fo76utils/NifSkope - NIF format documentation (BSD-3-Clause)
- GamesPastOrg/DDXConv - DDX texture conversion (MIT, Copyright 2026 Kran)
Support for the pre-Morrowind catalog (Arena, Daggerfall, Battlespire, Redguard, Fallout, Fallout 2, Fallout Tactics) builds on the following community work. Code is ported only from permissively-licensed projects, with the upstream source named in a header comment on every ported file and the license text in THIRD_PARTY_LICENSES. Everything else is used strictly as written documentation — no code from those projects is present here.
Ported (permissive):
- OpenTESArena - Arena compression codecs and image decoders (MIT)
- daggerfall-unity - Daggerfall decoders via its DaggerfallConnect API layer (MIT)
- falltergeist/dat-unpacker - Fallout DAT1 LZSS (MIT)
- kaitai_struct_formats -
game/fallout_dat.ksystructure cross-check (CC0-1.0)
Documentation only (not ported):
- ariscop/battlespire-tools - XnGine BSA and Battlespire format notes
- fodev.net - Fallout FRM, PRO, MAP and palette documentation
- UESP - Daggerfall, Battlespire and Redguard format articles
- Creative Voice File (
.VOC) specification - the published block-type table and time-constant formula; the decoder here is clean-roomed from it
Fallout Tactics support is clean-roomed from prose format specifications: every public Tactics tool is GPL-licensed and therefore incompatible with this project's MIT license, so no Tactics code is derived from them.