Tool for editing FFXI DAT files.

Overview

XI Tinkerer

Tool for decoding and encoding FFXI DAT files.

It can export DATs into human-readable files (YAML), which can then be edited and re-encoded into DAT files. One DAT file is converted 1:1 with exactly one editable file.

Currently, it only supports conversion of the English DATs, but the plan is to eventually support the other languages as well, once the conversion tables and unique control-structures for those are figured out. See plans for future work below.

Planned Work

It is planned to eventually support handling of most DAT-related things, like:

  • All languages:
    • English text in DATs
    • Japanese text in DATs
    • French text in DATs
    • German text in DATs
  • All DAT formats (non-exhaustive list):
    • Dialog
    • Entity names
    • Status info
    • Item info (most are supported)
    • d_msg (most are supported)
    • XISTRING (partially done)
    • Spell info
    • Ability info
    • Quest info
    • Events/cutscenes (likely based on info from XiEvents)
  • GUI editor for complex DATs, i.e.:
    • Items
    • DATs with images
    • Events/cutscenes joined with the used dialog text strings and entities

Breaking changes

There will most likely be breaking changes as new versions of this tool gets updated, since various fields can be added/removed/renamed.

For example, there are currently still unknown fields included in the human-readable files. These fields are necessary data for it to properly generate usable DAT files again, so they have to be included. As understanding of the DAT files progresses, and the meaning of these fields are determined, the field names/content will be changed/renamed. This will currently cause the tool to not be backwards-compatible with the previous versions of human-readable files (since their fields/formats have changed), in which case they will have to re-exported from DATs to be able to generate DATs again.

Development setup

The project is built using Rust utilizing the tauri toolkit for building the application. The frontend UI is built using the solidjs framework.

Prerequisites

The following software is required to develop and build the application:

Developing

The backend rust crates can be built/tested/etc with the regular cargo build, cargo test, etc.

To develop on the frontend, navigate to the client directory and install the necessary dependencies with pnpm install.

Once they're installed, you can develop the frontend application using the following command, which will provide automatic (hot-)reloading whenever the frontend or tauri-backend crate changes:

pnpm tauri dev

Credits

The starting point for the binary structure of some of the DAT formats, which are used in this project, were partially derived from the POLUtils project code, so credit goes to them for their work in reversing these. Their work is licensed under the Apache License, Version 2.0 with the following copyright:

Copyright © 2004-2014 Tim Van Holder, Nevin Stepan, Windower Team

This project also uses encoding conversion table files, which were originally from the POLUtils project, but some have been modified to allow them being used in reverse to allow encoding back to the original symbols. The full license file and copyright text have been included in the folder that these reside in.

You might also like...
A tool to decompile MSVC PDB files to C++ source code.

PDB Decompiler About Usage Contributing About A tool to decompile MSVC PDB files to C++ source code. This tool is a work in progress and will most lik

A (aspiring to be fast) tool to find duplicate files.

find-duplicates A decenly fast tool to find duplicate files. Handles symbolic and hard links and treats them seperately to duplicates. Quickstart Inst

RnR is a command-line tool to securely rename multiple files and directories that supports regular expressions
RnR is a command-line tool to securely rename multiple files and directories that supports regular expressions

RnR is a command-line tool to securely rename multiple files and directories that supports regular expressions. Features Batch rename files and direct

A CLI tool to rename files to randomly generated strings.
A CLI tool to rename files to randomly generated strings.

rng-rename A CLI tool to rename files to randomly generated strings. Why? Suppose you downloaded a few hundred images to use as your desktop wallpaper

Anglosaxon is a command line tool to parse XML files using SAX
Anglosaxon is a command line tool to parse XML files using SAX

anglosaxon - Convert large XML files to other formats anglosaxon is a command line tool to parse XML files using SAX. You can do simple transformation

A CLI tool used for rendering Blender files to a cropped spritesheet

BuilderGenerator A CLI tool used for rendering Blender files to a cropped spritesheet Clients Rust

'apk-yara-checker' is a little CLI tool written in Rust to check Yara rules against a folder of APK files.
'apk-yara-checker' is a little CLI tool written in Rust to check Yara rules against a folder of APK files.

apk-yara-checker 'apk-yara-checker' is a little CLI tool written in Rust to check Yara rules against a folder of APK files. You have to pass the folde

Introducing Inlyne, a GPU powered yet browsless tool to help you quickly view markdown files in the blink of an eye.
Introducing Inlyne, a GPU powered yet browsless tool to help you quickly view markdown files in the blink of an eye.

Inlyne - a GPU powered, browserless, markdown + html viewer inlyne README.md --theme dark/light About Markdown files are a wonderful tool to get forma

🍅 A command-line tool to get and set values in toml files while preserving comments and formatting

tomato Get, set, and delete values in TOML files while preserving comments and formatting. That's it. That's the feature set. I wrote tomato to satisf

Comments
  • Add button and binding to dump all YAML files on home screen

    Add button and binding to dump all YAML files on home screen

    👋

    I saw on all the sub-pages that there were options both export and make the relevant DAT files, but on the home page there was only a button to make all dat files.

    Rust and this workflow are very new to me, so this is mostly copy/paste/replace.

    EDIT: Got it ~~I managed to get it to build, but I can't figure out where to mark make_all_yamls as being used in a binding - any pointers?~~

    ~~Also, when I try to debug it, I get:~~

    Build and setup itself is easy though: cargo build, etc.

    I'm not sure what nomenclature you'd want when dealing with multiple YAML outputs, YAMLs feels a bit gross, let me know what you'd prefer!

    EDIT2: I eventually got it running, I needed to update to a more recent (I was very behind) node, update my npm. Before that I did cargo install for tauri, tauri-cli and tauri-init, I'm not sure if those were needed. I think I also did some install steps for vite, also not sure if that was needed.

    ~~My new button isn't horizontally aligned like I would have liked~~

    It doesn't kick off the action, so I'll get back to this later today 🙏

    EDIT3: I see whats up, I have everything hooked up correctly, but I'm iterating the wrong place

    image
    opened by zach2good 2
Owner
InoUno
InoUno
Command-line tool that provides a workflow for extending, editing, diffing, and writing to vim-style grep lines.

Grug Grug is a command-line tool that provides a workflow for expanding, editing, diffing, and writing edits to files using vim-styled grep lines (suc

null 4 Apr 25, 2023
A libadwaita/gtk4 app for editing NixOS configurations

NixOS Configuration Editor A simple NixOS configuration editor application built with libadwaita, GTK4, and Relm4. The goal of this project is to prov

Victor Fuentes 137 Dec 25, 2022
A tool that allow you to run SQL-like query on local files instead of database files using the GitQL SDK.

FileQL - File Query Language FileQL is a tool that allow you to run SQL-like query on local files instead of database files using the GitQL SDK. Sampl

Amr Hesham 39 Mar 12, 2024
CLI Tool for tagging and organizing files by tags.

wutag ?? ??️ CLI tool for tagging and organizing files by tags. Install If you use arch Linux and have AUR repositories set up you can use your favour

Wojciech Kępka 32 Dec 6, 2022
CLI tool to bake your fresh and hot MD files

At least once in your Rust dev lifetime you wanted to make sure all code examples in your markdown files are up-to-date, correct and code is formated, but you couldn't make that done with already existing tools - fear not!

Patryk Budzyński 39 May 8, 2021
miniserve - a CLI tool to serve files and dirs over HTTP

?? For when you really just want to serve some files over HTTP right now!

Sven-Hendrik Haase 4.1k Jan 6, 2023
A cli tool to download specific GitHub directories or files

cloneit A cli tool to download specific GitHub directories or files. Installation From git git clone https://github.com/alok8bb/cloneit cd cloneit car

Alok 54 Dec 20, 2022
Voila is a domain-specific language launched through CLI tool for operating with files and directories in massive amounts in a fast & reliable way.

Voila is a domain-specific language designed for doing complex operations to folders & files. It is based on a CLI tool, although you can write your V

Guillem Jara 86 Dec 12, 2022
Command line tool to extract various data from Blender .blend files

blendtool Command line tool to extract various data from Blender .blend files. Currently supports dumping Eevee irradiance volumes to .dds, new featur

null 2 Sep 26, 2021
apkeep - A command-line tool for downloading APK files from various sources

apkeep - A command-line tool for downloading APK files from various sources Installation Precompiled binaries for apkeep on various platforms can be d

Electronic Frontier Foundation 561 Dec 29, 2022