Add new blog post
All checks were successful
Deploy / Deploy Website (push) Successful in 33s

This commit is contained in:
Joshua Goins 2025-07-05 08:04:35 -04:00
parent 2fd3ef304a
commit dcad50c1ab
8 changed files with 32 additions and 30 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

View file

@ -1,18 +1,18 @@
--- ---
title: "Kawari Progress Report 12 - Viewing" title: "Kawari Progress Report 12 - Viewing"
date: 2025-07-04 date: 2025-07-05
draft: true draft: false
tags: tags:
- FFXIV - FFXIV
- Reverse Engineering - Reverse Engineering
series: series:
- Kawari Progress Report - Kawari Progress Report
summary: "This is quite a large update, and we implemented quite a few game features now." summary: "We have implemented quite a few game features now, and I feel like Kawari is close to completing it's goal as a FFXIV exploration tool."
bluesky_url: "" bluesky_url: ""
mastodon_url: "" mastodon_url: ""
--- ---
This is quite a large update, thank you to our contributors making this list huge! We implemented quite a few game features now. This is quite a large update, thank you to our contributors making this list huge! We have implemented quite a few game features now, and I feel like Kawari is close to completing it's goal as a FFXIV exploration tool.
# Features # Features
@ -24,49 +24,51 @@ Unlocks (Actions, Emotes, etc), unlocked Aetherytes, EXP, item glamours and thei
The inn bed is now 99% functional, but we are still missing the waking up animation. Fun fact: the Dreamfitting feature works completely offline and doesn't seem to contact SqEx servers at all. The inn bed is now 99% functional, but we are still missing the waking up animation. Fun fact: the Dreamfitting feature works completely offline and doesn't seem to contact SqEx servers at all.
SCREENSHOT ![](dreamfitting.webp)
The Unending Journey is now functional, which means **we can now play most FFXIV cutscenes offline**! Here it is in action: The Unending Journey is now functional, which means **we can now play most FFXIV cutscenes offline**! Here it is in action:
VID {{< tube "https://tube.ryne.moe/videos/embed/gJ1ASyoR6m4d7ZTP93nR3m" >}}
Most Gil shops are now partially implemented, allowing you to buy items. They all seem to share a common Lua script, so now it's just a matter of mapping them. Here is one in New Gridania: Gil shops are partially implemented, allowing you to buy items. They seem to share a common Lua script, so now it's a matter of mapping them. Here is one in New Gridania:
VID {{< tube "https://tube.ryne.moe/videos/embed/rtHNnibGxJxNBWSNx97V77" >}}
Thanks to thedax, the Lobby server now performs the same version and hash checking as retail. You can turn it off with a config option, of course. Thanks to thedax, the Lobby server now performs the same version and hash checking as retail. You can turn it off with a config option, of course:
```yaml
enforce_validity_checks: false
```
The welcome message displayed on login can now be customized in the config: The welcome message displayed on login can now be customized in the config:
![Screenshot courtesy of thedax](welcome.webp) ![Screenshot courtesy of thedax](welcome.webp)
I have begun implementing packet obsfucation which is used on retail. It can obsfucate player names properly, but that's about it for now: I have begun implementing the packet obsfucation that's on retail. It can obsfucate player names properly, but that's about it for now:
![](scrambler.webp) ![](scrambler.webp)
The code is based off of Perchbird's [Unscrambler](https://github.com/perchbirdd/Unscrambler), but we obsfucate instead of deobsfucate here.
# Multiplayer # Multiplayer
Other player's emotes are networked now (they do not interrupt yet): Other player's emotes are networked now (they do not interrupt yet):
VID ![](emotes.webp)
Sheathing and unsheathing weapons are now networked, but the animation does not play properly: Sheathing and unsheathing weapons are now networked, but the animation does not play properly.
VID The various display flags for equipment (e.g. hiding headgear) is now shown to other players, and yourself.
The various display flags for equipment (e.g. hiding headgear) is now shown to other players, and yourself:
VID
# Commands # Commands
You can now reload global scripts like `Global.lua` which are only loaded on start-up with the new `!reload` debug command. This makes authoring new events, commands, etc much easier. You can now reload global scripts like `Global.lua` which are only loaded on start-up with the new `!reload` debug command. This makes authoring new events, commands, etc much easier.
I added the `!finishevent` command to forcefully tell the client to stop it's current event. This is useful if you got stuck while talking to something. I added the `!finishevent` debug command to forcefully tell the client to stop it's current event. This is useful if you got stuck while talking to something.
Thanks to thedax, `//gm teri_info` is now supported and can list useful information about your current zone: Thanks to thedax, `//gm teri_info` is now supported and can list useful information about your current zone:
SCREENSHOT ![](teri_info.webp)
I added the `!item <name>` debug command to give you an item by name, like our `!equip` command. I added the `!item <name>` debug command to give you an item by name, like our `!equip` command.
@ -74,17 +76,17 @@ I added support for the `//gm gil` command to give yourself gil. Thanks to theda
Thanks to thedax, you can now inspect the current player using `!inspect`: Thanks to thedax, you can now inspect the current player using `!inspect`:
SCREENSHOT ![](inspect.webp)
I added the `!completeallquests` command, allowing you to use features otherwise unavailable. Like for example, the Toybox: I added the `!completeallquests` command, allowing you to use features otherwise unavailable. Like for example, the Toybox:
SCREENSHOT ![](toybox.webp)
# Scripting # Scripting
When encountering an unscripted event, it's now shown in chat and the server log: When encountering an unscripted event, it's now shown in chat and the server log:
SCREENSHOT ![](unknown.webp)
It's now possible to send an arbitrary number of parameters for event scenes, which are needed to implement some complex events. It's now possible to send an arbitrary number of parameters for event scenes, which are needed to implement some complex events.
@ -94,15 +96,15 @@ It's now possible to read the player's inventory in Lua, we are also planning to
When encountering Lua errors, the server should now panic less. When encountering Lua errors, the server should now panic less.
Most zones should work again (in terms of exiting zone lines, aetherytes, etc) thanks to better LGB support in Physis. Most zones should work again (in terms of exiting zone lines, aetherytes, etc) thanks to improved LGB support in Physis.
Action scripts are now executed at the end of it's actual cast time, which makes Teleporting look just a _little_ better. Action scripts are now executed at the end of it's actual cast time, which makes Teleporting look just a _little_ better.
Fixed the display of your character's classjob levels in the Character window. Fixed the display of your character's classjob levels in the Character window.
When recieving unknown packets, these are now read instead of ignored. This makes it easier to understand what the client sent, and prevents reading the wrong part of the packet in the case of multiple segments being sent. Better handling of invalid packets, which should prevent almost - if not all - packet parsing errors.
Invalid zone IDs are accepted, which is useful for exploring zones like [in my blog post]{{< ref "walking-the-unwalkable" >}}. Invalid zone IDs are now accepted, which is useful for exploring zones like [in my blog post]({{< ref "walking-the-unwalkable" >}}).
It's no longer possible to connect with an older client, which never worked anyway. It's no longer possible to connect with an older client, which never worked anyway.
@ -110,7 +112,7 @@ The correct starting weapon for your selected class is now equipped, instead of
The way the server loads LGBs is more accurate, by fetching the list of LGBs directly from the game files. This doesn't fix anything specifically, though. The way the server loads LGBs is more accurate, by fetching the list of LGBs directly from the game files. This doesn't fix anything specifically, though.
Thanks to thedax, the Lobby server returns more relevant error messages. Thanks to thedax, the Lobby server returns more relevant error messages now.
# Updates # Updates
@ -118,14 +120,14 @@ Thanks to thedax, Kawari is updated to support 7.25h2 and 7.25h3. I bet we will
# Tooling # Tooling
I created Packet Analyzer, which re-uses Kawari's existing and already comphrensive packet parsing to let you view Chronofoil captures: I created Packet Analyzer, which re-uses Kawari's existing and already comprehensive packet parsing to allow you to view Chronofoil captures:
SCREENSHOT ![](analyze.webp)
You can try it out [on the web](https://analyze.xiv.zone/) now, and the source code is available [here](https://codeberg.org/redstrate/PacketAnalzyer). You can try it out [on the web](https://analyze.xiv.zone/) now, and the source code is available [here](https://codeberg.org/redstrate/PacketAnalyzer). This has already been used to develop some of the changes showcased here, and I'm continuing to figure out the ideal workflow 🙂
Thanks to NotNite, grabbing _both_ the static (`.lib`) and dynamic (`.dll`) versions of Oodle on Windows is no longer nessecary! The documentation was also updated to reflect this. Thanks to NotNite, grabbing _both_ the static (`.lib`) and dynamic (`.dll`) versions of Oodle on Windows is no longer nessecary! The documentation was also updated to reflect this.
# Community # Community
I opened a chatroom for development talk/informal discussions, since our GitHub is very rigid (and I would like to keep it that way!) I [opened a chatroom](https://matrix.to/#/#kawari-welcome:pyra.sh) for development talk/informal discussions, since our GitHub is very rigid (and I would like to keep it that way!)

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB