I have redone the structure of the artifacts, which was mostly putting the binaries in the top-level directory. The original web template files are now included, so they can be freely changed without recompiling:
Additionally, there are now run scripts (that work!) for Windows and Linux to start all of Kawari's services. I have _no_ clue how to write Batch scripts, so it ends up doing funny things like spawning a dozen console windows. If you're a Windows expert and know how to make that better, I would appreciate the help!
Thanks to [Sayaniku](https://github.com/Sayaniku) for reporting bugs for these pages, and those issues should be fixed like redirects not going to the right places.
Kawari can now be used with the official launcher, making it super easy to use. For Windows, this only consists of dragging files into a folder - and Linux isn't that much harder. The setup instructions are located on the internal website:
What you're downloading is an auto-generated config file, pointing to the server names (like `ffxiv.localhost`) defined in your Kawari config. That is then read by our `winmm.dll`, enabling us to bypass the default SqEx URLs - effectively taking over the launcher. And here's the end result:
This is powered by [LauncherTweaks](https://github.com/redstrate/LauncherTweaks) and it enables anyone to write their own custom launcher pages too[^1]! Digging into the launcher has honestly been the most RE fun I've had in a while...
As seen in a previous update, multiplayer "worked" but it was bad. It only displayed the other player's position and their initial appearance. I improved it a bunch since then including propagating your rotation, targets and poses to other players:
I struggled with sending player rotations for a while because they changed the packet used to update actor positions in Endwalker(?) After fixing that, everything fell into place. I also implemented _very basic_ zone isolation, so people won't phase-shift into your zone.
Part of the reason why this takes a while is because Kawari was built under the assumption that there's only a single connection, so there's a *lot* of code written before I added multiplayer. A lot of my time is spent untangling that mess, and of course that work can't really be showcased here because it's _super boring_.
Everyone's favorite item/coping mechanism is now fully implemented, just for funsies. It doesn't remove the Fantasia from your inventory yet, because we lack the Lua API for it. Here it is in action:
This is just a technical tidbit, hence why it's at the end here. Kawari needs to read lots of Excel data to function properly, and the code to do so usually looks like this:
🤢 Yeah, that's bad! We are hardcoding column indices, and these also tend to change over time. There's also a whole lot of `let x = else` matching code, because column data is actually an enum. Our error handling here is also terrible with lots of `panic!`s, oh man!
I have spent some time cleaning up this technical debt, so now our Excel code looks like this:
Some of this was fixed by improving the signature of the function itself (with `Option`!) Another part of it is introducing a higher-level API for grabbing Excel data. I now have a library called [Icarus](https://github.com/redstrate/Icarus) based on the fantastic schema in [EXDSchema](https://github.com/xivdev/EXDSchema), generated with [EXDGen](https://github.com/redstrate/EXDGen). While it only supports a small portion of the schema, it's more than good enough for Kawari's purposes. Another improvement that helped was in [Physis](https://github.com/redstrate/Physis), where `ColumnData` now has `into_x()` helpers so you don't have to write `match` code yourself in the caller.
[^1]: If you are interested, I have some incomplete documentation [here](https://wiki.xiv.zone/Launcher). You might also want to take a look at [Kawari's launcher page HTML](https://github.com/redstrate/Kawari/blob/master/resources/templates/launcher.html).