If this is your first time hearing any of any of these projects, [Astra](https://github.com/redstrate/Astra) is my unofficial FFXIV launcher that supports Linux[^1]. It launches Dalamud, can run as a Steam Compatibility Tool, and supports alternative servers like [Kawari](https://github.com/redstrate/Kawari):
Novus is my [unofficial FFXIV tool suite](https://github.com/redstrate/Novus) which includes programs to view model files, edit gear and a lot more. I got frustrated years ago that (almost) none of the pre-existing FFXIV modding tooling ran on Linux, so I made my own:

Updates to my Kawari alternative server project are happening in another [series of blog posts](/blog/series/kawari-progress-report), because the scope of that project is large enough on it's own! These status updates also serves as a place to discuss my other, smaller FFXIV projects that aren't interesting enough to live in their own blog post.
I have redone the initial setup again, and the entire process should be cleaner and easier now. There are three major "flows" you can take: Install the game, install the benchmark, or import from another launcher:

Astra now supports importing an existing game install from another launcher, such as from XivLauncher.Core:

There is a limited amount of launchers it supports, [patches are welcome](https://github.com/redstrate/Miscel/blob/main/src/existing_dirs.rs)! This same logic can be re-used for other launchers too, and I should probably integrate it into Novus sometime.
Advanced Dalamud settings are now hidden behind the "Developer Settings" toggle, because they should rarely (if ever) be touched. Here is how it looks when they're disabled:
If you develop Dalamud, there's now an easier way to use a local build in Astra. Plop it into `~/.local/share/astra/dalamud/local` (or the Flatpak equivalent) and select the "Local" option for "Dalamud Channel" in your profile settings. This also skips all update and version checks for Dalamud.
You can now specify custom servers under your account's developer settings, and Astra can now function without being connected to any of SqEx's servers. I made these per-account so I can have my test Kawari account and still play with my real Square Enix account.
Before Astra starts patching, it checks if you have enough disk space - not only to download the update but also to install it. This should prevent some nasty scenarios while patching:
On a related note, Astra will now warn you before it starts updating. This is to help prevent "gotchas" like your installation being considered invalid, profiles you weren't supposed to update or you're on a connection with limited data:
* It's now possible to update the game even if the worlds are closed for maintenance.
* Patches are no longer kept in memory, which was problematic for systems like the Steam Deck.
* When Dalamud reports that it's incompatible with your game version, it disables itself now instead of crashing on launch.
* In the rare case where Astra does fail to apply a patch - like if the download was corrupted - an error is shown to the user and the errant patch is deleted:
* The method Astra uses to track if the game is open (e.g. for keeping your computer from sleeping) is now more reliable on Linux when Dalamud is enabled.
* The Steam Compatibility Tool should be much more reliable now in general!
* Sapphire support is removed. I only used this feature _once_ (if ever?) and I kept breaking it. There are several other launchers that support Sapphire's account system you can use instead.
* Feral Gamemode support is removed. I just didn't use it anymore.
* Gamescope support is removed. I originally added this to workaround bugs when the game was running under XWayland. But now that we have a native Wine on Wayland (and even the XWayland bugs are gone) I didn't see a reason to keep it.
* The news on the main login page is now always shown, and the option to hide it was removed.
One of the last remaining features to implement was Steam service account support. I had been putting this off for a while because:
1. I don't use my own Steam service account.
2. They use yet _another_ Blowfish implementation for "encrypting" steam tickets and do a whole bunch of nonsense before sending it.
3. Communicating with the Steamworks API from a GPLv3 application is a bit annoying.
I'm happy to report I solved all of those problems, and Astra can now login to Steam service accounts just fine. There is one caveat: it's only supported when running as a Steam compatibility tool for now.
Delving into the technical tidbits, [Miscel has a Blowfish implementation you can use for problem #2](https://github.com/redstrate/Miscel/blob/main/src/blowfish/mod.rs) (the Steam Ticket is further "encrypted" with the process [done here](https://github.com/goatcorp/FFXIVQuickLauncher/blob/master/src/XIVLauncher.Common/Encryption/Ticket.cs). Astra simply has a C++ version of that.) Problem #3 is done using [Steamwrap](https://code.ryne.moe/redstrate/steamwrap). I'm unsure how OK it is to redistribute the Steam API headers freely, so I decided to compile a separate application that I build myself and pack into the Flatpak. Astra communicates with this daemon through HTTP, and it might be useful to someone else too.
Are you interested in trying out Astra? If you have a GitHub account, you can grab a nightly Flatpak [from GitHub Actions](https://github.com/redstrate/Astra/actions). I'm also preparing to release this properly on Flathub, so any testing of the Flatpak is appreciated. (I personally have switched over to only using the Flatpak version now.)
You can switch between any available language in an Excel sheet. I'm stupid and CJK characters are not shown correctly yet, but other languages work fine:

(Apart from SeString support, that's also something I need to work on.)
As you may have seen in my Kawari progress reports, I have been delving into how the game's event system works. To aid in this effort, I added a Lua decompiler to the Data Explorer which makes exploring *way* easier:
[Auracite](https://auracite.xiv.zone) is my character backup tool that runs in your web browser, and can optionally connect to a Dalamud plugin. If you're wondering how it's useful, check out my [FFXIV Shrine](/shrines/ffxiv).
This is the library that powers my FFXIV-related projects. It has received some significant changes, most of them related to fixing problems introduced by changes in Dawntrail. Unfortunately due to the nature of it being a library, the update is text-only and extremely dry (hence why it's at the end!)
I'm happy to report that everything *mostly* works now, with the biggest exception being model I/O still. You can read Dawntrail models, but writing them results in an invalid model that crashes the retail client. I will be redoing how model I/O works at some point, which will fix inherent design problems with how it's structured today, but I'm unsure about how soon that will happen.
## Save Data
As seen in the Auracite section above, I needed write support for character creator save data and that's now added. I also added unit tests for all of the versions, and the API is functionally complete!
```rust
let char_dat = physis::chardat::CharacterData {
version: 7,
customize: physis::chardat::CustomizeData {
race: Race::Hyur,
tribe: Tribe::Midlander,
gender: Gender::Female,
... everything else ...
},
timestamp,
comment: "Generated by your tool!".to_string(),
};
```
Loius Brunner has [kindly written support for the `GEARSET.DAT` save data](https://github.com/redstrate/Physis/pull/7), and I hope we can expand into reading even more in the future! We can read the following save data now:
I have a lot of tests in Physis (which I'm really proud of!) but one thing that's really lacking is being able to test against many game versions. I end up breaking support for Benchmark versions accidentally, for example. To solve this, I have begun writing a testing platform for running Physis against a bunch of different game versions. I need to write a web frontend for it, and it's still a simple script I have to manually run.
In an effort to reduce the scope of Physis, I have moved a lot of functionality really only used by Astra to a new library called [Miscel](https://github.com/redstrate/Miscel). This includes frontier URL lookup, installer helpers, and locating existing game installations. [libphysis](https://github.com/redstrate/libphysis) exposes both libraries to make things simple for now.
One of the first things I wrote was the Excel parser, and naturally it has a _ton_ of mistakes. A good example is how I handled row IDs - or to be more specific how I _didn't_ handle them and so looking up rows never really worked properly. To fix things, I have begun breaking a lot of the Excel API - not only to make it more functionally correct but also to prepare for writing support[^2].
Another focus of mine has been terrain (TERA) and layer group (LGB) files, the two formats that make up most of the zone data in-game: terrain, background objects, NPCs and even deciding where you teleport to are read from these two formats. I have tidied up the terrain parsing some, and begun implementing write support for both formats. Writing LGBs are going to be really tricky, don't expect that for a long while.
* The little-known format called SQDB (Square Enix Database?) is used to detail what is inside of data files. This isn't shipped in the retail game anymore, but is such a simple format it was easy to add support for it.
* Physis can now be compiled to WebAssembly, which was used in the web version of Auracite. I also hacked away a lot of dependencies in Physis that either wasn't needed or I could safely take out, and the result is a _much_ lighter library to build!
* ZiPatch support has been improving, I not only fixed more patching bugs but also working towards write support. Physis-created patches can add new files, but that's about the extent of what I wrote so far.
I begun the process of moving from [docs.xiv.zone](https://docs.xiv.zone/) to [wiki.xiv.zone](https://wiki.xiv.zone). (You may have already seen links to it in some of my newer projects.) The wiki has proven to be a lower barrier for me to edit it, so I hope more interesting stuff pops up on there. Note that the wiki is _not_ publicly editable, and I have no immediate plans to allow sign ups.
I will be adding redirects once the transition is complete.