Expand description
A Rust library for working with Final Fantasy XIV .DAT files. These files store client-side game config including macros, hotkeys, and ui settings.
Libxivdat provides low-level file i/o via DATFile
,
a std::fs::File
-like interface that automatically manages the header, footer, and content
masking of DAT files.
Each DAT file contains unique data structures. Higher-level support for specific file types is implemented on a type-by-type basis as optional features. See the chart below for more information and feature names.
§DAT Data Structures
Internally, some DAT file content blocks use a variable-length data structure referred to as a section
in this library. A section consists of a single UTF-8 char type tag, u16le size, and a null-terminated
UTF-8 string. A single resource (ie, a macro) is then comprised of a repeating pattern of sections.
Other DAT files use fixed-size resource blocks, with each resource immediately following the last.
These are referred to as “Block DATs” below.
Some DAT files contain unique binary data that does not follow the “standard” DAT format. Others contain UTF-8 plaintext and are not binary files at all. Support for these files is not currently planned.
§DAT Support Table
Symbol | Description |
---|---|
✅ | Full support |
🌀 | Partial support |
❌ | No support |
File | Contains | Type | DATFile Read/Write | High Level Module |
---|---|---|---|---|
ACQ.DAT | Recent /tell history | Section | ✅ | 🌀 - section |
ADDON.DAT | ? | Unique | ❌ | ❌ |
COMMON.DAT | Character configuration | Plaintext | ❌ | ❌ |
CONTROL0.DAT | Gamepad control config | Plaintext | ❌ | ❌ |
CONTROL1.DAT | Keyboard/mouse control config | Plaintext | ❌ | ❌ |
FFXIV_CHARA_XX.DAT | Character appearance presets | Unique | ❌ | ❌ |
GEARSET.DAT | Gearsets | Block | ✅ | ❌ |
GS.DAT | Gold Saucer config (Triad decks) | Block | ✅ | ❌ |
HOTBAR.DAT | Hotbar layouts | Block | ✅ | ❌ |
ITEMFDR.DAT | “Search for item” indexing? | Block | ✅ | ❌ |
ITEMODR.DAT | Item order in bags | Block | ✅ | ❌ |
KEYBIND.DAT | Keybinds | Section | ✅ | 🌀 - section |
LOGFLTR.DAT | Chat log filters? | Block | ✅ | ❌ |
MACRO.DAT | Character-specific macros | Section | ✅ | ✅ - macro |
MACROSYS.DAT | System-wide macros | Section | ✅ | ✅ - macro |
UISAVE.DAT | UI config | Block | ✅ | ❌ |
§Examples:
§Reading a file:
use libxivdat::dat_file::read_content;
let data_vec = read_content(&path_to_dat_file).unwrap();
§Writing to an existing file:
DAT files contain metadata in the header that pertains to how data should be written. Because of this, creating a new DAT file and writing contents are separate steps.
use libxivdat::dat_file::write_content;
let data_vec = write_content(&path_to_dat_file, b"This is some data.").unwrap();
§Creating a new file:
use libxivdat::dat_file::DATFile;
use libxivdat::dat_type::DATType;
DATFile::create_with_content(&path_to_dat_file, DATType::Macro, b"This is some data.").unwrap();
§File-like access:
use libxivdat::dat_file::read_content;
use libxivdat::dat_file::DATFile;
use libxivdat::dat_type::DATType;
use std::io::{Read,Seek,SeekFrom,Write};
let mut dat_file = DATFile::open(&path_to_dat_file).unwrap();
let mut first_256_bytes = [0u8; 256];
dat_file.read(&mut first_256_bytes).unwrap();
Modules§
- dat_
error - Contains the
DATError
wrapper error. This error type is used for all functions that do not implement astd::io
trait. - dat_
file - Contains a generic, low-level tool set for working with any standard binary DAT files.
This provides the convenience functions
read_content()
andwrite_content()
as well as thestd::fs::File
-likeDATFile
interface. - dat_
type - Contains the enum of all supported file types,
DATType
and functions for accessing default header and mask values specific to each type. - high_
level - Contains general-purpose traits and functions applicable to all high-level, file-type-specific
modules such as
xiv_macro
. - section
- Contains a generic tool set for working with any section-based binary DAT files.
This module contains two equivalent implementations:
Section
,read_section()
, andread_section_content()
for working with files on disk andSectionData
,as_section()
, andas_section_vec()
for working with pre-allocated byte arrays. - xiv_
macro - Contains the high-level toolkit for working with macro files,
MACRO.DAT
andMACROSYS.DAT
. This module contains two equivalent implementations:Macro
,read_macro()
, andread_macro_content()
for working with files on disk andMacroData
,as_macro()
, andas_macro_vec()
for working with pre-allocated byte arrays and `SectionData.