Library and binary for parsing Skyrim plugin files and extracting CELL data
Go to file
Tyler Hallada 4f70f90d2b Bump version to 0.4.0
Minor version change for the breaking change in the public API of Plugin (now uses HashSet instead of Vec for cells and worlds).
2022-09-30 16:44:16 -04:00
src Use HashSet for cells and in Plugin public API 2022-09-30 16:43:19 -04:00
.gitignore Add parser and cli, basic extraction done 2021-05-20 01:33:11 -04:00
Cargo.lock Bump version to 0.4.0 2022-09-30 16:44:16 -04:00
Cargo.toml Bump version to 0.4.0 2022-09-30 16:44:16 -04:00
README.md Parse WRLD records & link cells to worlds 2021-07-19 00:19:26 -04:00

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();