1
Fork 0
mirror of https://github.com/redstrate/Physis.git synced 2025-04-22 12:47:45 +00:00
Library for reading and writing FFXIV data
Find a file
2022-08-14 23:38:49 -04:00
benches Remove unused import in benchmark code 2022-08-06 18:06:18 -04:00
resources/tests Add initial files 2022-07-19 19:29:41 -04:00
src Clarify that IndexFile::from_existing is not reading index2 files 2022-08-14 23:38:49 -04:00
tests Document more public APIs in preparation for docs release 2022-07-27 21:41:05 -04:00
.build.yml Automatically update crate docs on push 2022-08-09 23:55:05 -04:00
.gitignore Add initial files 2022-07-19 19:29:41 -04:00
Cargo.lock Decompress and return rgba data for textures 2022-08-11 15:03:12 -04:00
Cargo.toml Decompress and return rgba data for textures 2022-08-11 15:03:12 -04:00
deny.toml Add initial files 2022-07-19 19:29:41 -04:00
LICENSE Add initial files 2022-07-19 19:29:41 -04:00
README.md Add textures and material support to the README 2022-08-11 15:41:30 -04:00

Physis

Framework for interacting with FFXIV data, and successor to libxiv. This intended for developers writing modding tools, launchers and other programs.

Note: This library is still experimental, and no releases are planned. I'm currently busy with bringing all of libxiv's features over, but I plan to expand functionality beyond the original scope.

Goals

  • Make it extremely easy for people to tinker around with game data.
  • Parsing data should be safe, and unit tested vigorously.
  • Minimal dependencies ;-) All dependencies are also checked by cargo deny.

Features

  • Easily extract game data from SqPack files.
  • Apply game and boot updates, enabling custom launchers to patch the game.
  • Blockfish ciphers for encrypting and decrypting SqexArg.
  • Parse various game formats:
    • SqPack index and dat files
    • ZiPatch files
    • All three Excel data types (EXD, EXH, EXL)
    • Models
    • Havok Packfile/TexTool skeletons
    • Textures
    • Materials

Usage

Note: The API is nowhere near stable, so things may change or break.

If you intend to use this in a Rust project, you can simply include this crate directly. You can view the documentation at docs.xiv.zone!

For other use in languages I maintain libphysis, which is a C wrapper around the same functionality. This isn't for show, I actually use these bindings in other projects.

Development

If you're interested to see how these formats work in more detail, see xiv.dev and docs.xiv.zone! They explain the file formats in more detail, but I also encourage reading the library code as well if you can.

Some tests and benchmarks require the environment variable FFXIV_GAME_DIR to be set. By default, these are disabled since they require a legitimate copy of the retail game data. These tests can be turned on via the retail_game_testing feature.

Contributing & Support

The best way you can help is by monetarily supporting me or by submitting patches to help fix bugs or add functionality!