11 KiB
title | date | draft | tags | toc | series | ||||
---|---|---|---|---|---|---|---|---|---|
Astra & Novus Status Update: October 2023 | 2023-10-28 | false |
|
true |
|
As I'm nearing the release of Astra 0.5.0, and Novus 0.1.0 (which will be it's initial release) I have been hard at work squashing bugs and adding new features. Note that this isn't an exhaustive list of everything I've done, I just tried to pick out the most interesting parts.
Astra
I have slightly updated the main window design again, which simplifies a lot of the presented options:
{{< add "feature" >}} Packagers (which is mostly me) will be happy, as Astra now has tarballs automatically generated from the latest git! This includes vendored cargo dependencies, and any git submodules I use, so it's possible to compile Astra offline again. You can find these on builds.sr.ht or on xiv.zone {{< release "0.5.0" >}}
{{< add "feature" >}} The auto login now has more error handling, detailing why the auto login could fail. {{< release "0.5.0" >}}
{{< add "feature" >}} Added setting for the preferred protocol when making requests. An example is when connecting to a localhost server, and you need HTTP. Note that this isn't always honored, because most POST requests fail when not sent securely. {{< release "0.5.0" >}}
{{< add "feature" >}} Added a setting to configure the XIVApi server URL in the developer settings. {{< release "0.5.0" >}}
{{< add "feature" >}} Added a button to clear the Lodestone avatar cache. {{< release "0.5.0" >}}
{{< add "bugfix" >}} Made sure the Flatpak credential keys will not collide with their non-Flatpak counterparts. This is very unlikely to happen because everything is indexed by UUIDs, but you can never be too safe! {{< release "0.5.0" >}}
{{< add "feature" >}} Moved to the new Dalamud CDN with the notable feature that it's possible to develop Dalamud mods from that distribution. {{< release "0.5.0" >}}
{{< add "feature" >}} The last used profile is now saved. {{< release "0.5.0" >}}
{{< add "feature" >}} Added a configurable screenshot directory setting that applies to all profiles. {{< release "0.5.0" >}}
{{< add "bugfix" >}} Now the asset updater shouldn't crash in certain scenarios. {{< release "0.5.0" >}}
{{< add "feature" >}} The patching UX is overhauled, again to make sure it never freezes the UI. It's also harder to accidentally cancel the patching process by closing the window, causing corruptions. In the future I want to make it cancellable, but it's not right now. {{< release "0.5.0" >}}
{{< add "bugfix" >}} Fixed a build error with the 0.4.1 release. {{< release "0.4.2" >}}
Novus
{{< add "feature" >}} Like with Astra, Novus now has tarballs automatically generated from the latest git! This includes vendored cargo dependencies, and any git submodules used, so it's possible to compile Novus offline. You can find these on builds.sr.ht or on xiv.zone {{< release "0.1.0" >}}
{{< add "feature" >}} Shaders and other required resources are now embedded in the executable, so it's easier to run out of the box. {{< release "0.1.0" >}}
{{< add "feature" >}} Sagasu (previously named "Explorer") now uses a central database to store file hashes, not unlike FFXIV Explorer. There's now a separate "indexer" program to initially populate the database. Pre-populated databases will be made available later. {{< release "0.1.0" >}}
{{< add "feature" >}} You can now easily extract files from Sagasu. {{< release "0.1.0" >}}
{{< add "feature" >}} You can view the raw hex data of any file in Sagasu. I wanted to use an Okteta KPart for this originally, but it's not yet ported to KF6... {{< release "0.1.0" >}}
{{< add "feature" >}} Added a search bar for filtering by filename in Sagasu. {{< release "0.1.0" >}}
{{< add "feature" >}} Added model and EXDH (Excel data file) tabs to Sagasu, allowing you to view those respective file types. {{< release "0.1.0" >}}
{{< add "feature" >}} Added a texture tab to Sagasu to preview texture files. {{< release "0.1.0" >}}
{{< add "bugfix" >}} Oops, the Excel data should be a read only view and not editable. {{< release "0.1.0" >}}
{{< add "feature" >}} Added a shader package tab to Sagasu to preview shader files from the game. The output isn't very usable yet. {{< release "0.1.0" >}}
{{< add "feature" >}} Added a CMP (Chara Make Parameter) tab to Sagasu allowing you preview that filetype. {{< release "0.1.0" >}}
{{< add "feature" >}} Added a skeleton tab to Sagasu allowing you to preview skeletons from the game. {{< release "0.1.0" >}}
{{< add "feature" >}} Added support in the Sagasu indexer for adding hashes by HTTP request, used in the indexer Dalamud plugin mentioned below.
Physis
{{< add "bugfix" >}} Certain patches should now apply correctly, this was an issue during the 6.5 which uncovered some assumptions about the signedness of certain fields. This has been corrected, and I applied some more corrections to protect against this in the future. {{< release "0.2.0" >}}
{{< add "bugfix" >}} Fixed the broken shader package reading. {{< release "0.2.0" >}}
{{< add "feature" >}} Added support for reading binary SKLB and PBD files! This means we are no longer dependent on TexTools or the official Havok SDK to parse the data that's held within these files. Code courtesy of FFXIVTools which is adapted for our purposes. This also gets rid of the serde
and hard-xml
dependencies, which is pretty nice. {{< release "0.2.0" >}}
{{< add "feature" >}} Drastically improve performance when extracting files by caching the index files used. This cache should have a pretty small memory footprint, and this makes tools like Novus way more usable. {{< release "0.2.0" >}}
Indexer Plugin
I made a pretty neat thing that I haven't really seen anyone else do before, despite most of it being taken from another plugin. So FFXIV does not pack in filenames for their compressed file format, it's all CRC32 hashes. so a big question is how to figuring out all of the different possible paths, some of which you can grep from the executable like this:
And then if you figure out the string format they use for dynamic stuff (e.g. skeletons, materials, and items) then it's possible to make a generator of sorts and have it "generate" a list of possible filenames used. This is really slow though, and really boring to write. These exist already (and I've written one), but there must be an easier solution. Well, if the game accesses everything via filenames anyway.... why not simply hook into the game and take the filenames while it's opening them?
Because the indexer program is running natively and I run the game through Wine, I use HTTP as a form of IPC which works well enough as i just need to send filenames. I'm now getting way more interesting stuff, because the game is practically giving them up!
The Dalamud plugin is available on git.sr.ht. It's designed to connect to Sagasu's indexer (as mentioned above) but it could really be dumped to anything that accepts the endpoint.
XIV Docs
I overhauled the documentation site again, this time with usable a tree navigation structure and fixing more dead links. I also documented some more pages such as DAT and LOG but it's still a WIP.
Other work
{{< add "bugfix" >}} Fixed the libcotp CMake, which was causing troubles when integrated into Astra. Now we can use upstream instead of my fork! {{< release "2.0.2" >}}
I also have begun reverse engineering the current Square Enix login system which is currently used for testing Astra without hammering the official servers. Do note that I don't plan on extending the project much further than that.
{{< series-nav "ffxiv-sept2023" "ffxiv-dec2023" >}}