Library and binary for parsing Skyrim plugin files and extracting CELL data
Tyler Hallada
4f70f90d2b
Minor version change for the breaking change in the public API of Plugin (now uses HashSet instead of Vec for cells and worlds). |
||
---|---|---|
src | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
README.md |
skyrim-cell-dump
Library and binary for parsing Skyrim plugin files and extracting CELL data.
The main objective of this library is to extract the form ID and X and Y coordinates of every exterior cell a plugin edits as fast as possible, ignoring the rest of the plugin.
Install
cargo install skyrim-cell-dump
Or, build yourself by checking out the repository and running:
cargo build --release --features build-binary
Usage
Usage: skyrim-cell-dump.exe <plugin> [-f <format>] [-p]
Extracts cell edits from a TES5 Skyrim plugin file
Options:
-f, --format format of the output (json or text)
-p, --pretty pretty print json output
--help display usage information
The pretty JSON format looks something like:
{
"header": {
"version": 1.0,
"num_records_and_groups": 792,
"next_object_id": 221145,
"author": "Critterman",
"description": "An example plugin",
"masters": [
"Skyrim.esm",
"Update.esm",
"Dawnguard.esm",
"HearthFires.esm",
"Dragonborn.esm"
]
},
"worlds": [
{
"form_id": 60,
"editor_id": "Tamriel"
}
],
"cells": [
{
"form_id": 100000001,
"editor_id": "SomeInterior",
"x": null,
"y": null,
"world_form_id": null,
"is_persistent": false
},
{
"form_id": 3444,
"editor_id": null,
"x": 0,
"y": 0,
"world_form_id": 60,
"is_persistent": true
},
{
"form_id": 46432,
"editor_id": "SomeExterior01",
"x": 32,
"y": 3,
"world_form_id": 60,
"is_persistent": false
},
{
"form_id": 46464,
"editor_id": "SomeExterior02",
"x": 33,
"y": 2,
"world_form_id": 60,
"is_persistent": false
},
{
"form_id": 46498,
"editor_id": null,
"x": 32,
"y": 1,
"world_form_id": 60,
"is_persistent": false
}
]
}
Note: I have only tested parsing Skyrim Special Edition .esp
, .esm
, and .esl
files.
Import
You can include this crate in your Cargo.toml
and get the parsed Plugin
struct with:
use skyrim_cell_dump::parse_plugin;
let plugin_contents = std::fs::read("Plugin.esp").unwrap();
let plugin = parse_plugin(&plugin_contents).unwrap();