3.8 KiB
title | date | draft | tags | series | summary | bluesky_url | mastodon_url | draft | |||
---|---|---|---|---|---|---|---|---|---|---|---|
Kawari Progress Report 12 - Shopping | 2025-06-30 | true |
|
|
PLACEHOLDER | true |
title: "Kawari Progress Report 12 - Shopping" date: 2025-06-30 draft: true tags:
- FFXIV
- Reverse Engineering series:
- Kawari Progress Report summary: "PLACEHOLDER" bluesky_url: "" mastodon_url: "" draft: true
Features
Currency (gil for now) and EXP are now supported and sent to the client.
Thanks to thedax, the Aetheryte and Aethernet network is mostly functional - save for the starting town's Aetherytes which are hidden right now.
Unlocks (Actions, Emotes, etc), unlocked Aetherytes EXP, item glamours and condition are now persistent and is saved on log out.
The inn bed is now 99% functional, save for the waking up animation.
Multiplayer
Emotes are now shown from other players, but they do not interrupt yet:
Sheathing and unsheathing weapons are also shown, but the animation does not play yet:
The various display flags for equipment (like hiding headgear) is now shown to other players, and yourself.
Commands
You can now reload scripts like Global.lua
that are loaded on start-up with the new !reload
command.
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.
thedax added support for the //gm teri_info
command for listing lots of useful information about your current zone.
I added support for the //gm gil
command.
GM commands are now ported to Lua, this will make it easier to add even more GM commands in the future. It also helped consolidate a lot of command implementation details.
I added the !item <name>
debug command to give you an item by name, like our !equip
command.
Scripting
I added a generic Aetheryte script, and thedax tirelessly worked to script all of the Aetherytes in the game!
When encountering an unscripted event, it's now shown in chat and the server log:
When encountering Lua errors, the server now panics less. This - combined with the !reload
command - makes scripting even easier than before!
thedax also implemented various things, most notably:
- Toy Chest (not currently functional until we can set unlocked quest bits)
- Orchestrion
It's now possible to send an arbitrary number of parameters for event scenes, which are needed to implement some complex events.
Bugfixes
Most zones should work again (in terms of exiting zone lines, aetherytes, etc) thanks to better LGB support in Physis.
Action scripts are now executed at the end of it's actual cast time, which makes Teleporting look a little better.
Fixed 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.
Invalid zone IDs are accepted, which is useful for exploring zones like in my blog post.
It's no longer possible to connect with an older client, which never worked anyway.
The correct starting weapon for your selected class is now equipped, instead of it always being a GLA weapon.
Updates
thedax updated Kawari to support 7.25h2.
Tooling
I created Packet Analyzer, which re-uses Kawari's existing and semi-comphrensive packet infrastructure and switches it to "reverse". This allows you to view the contents of Chronofoil captures in a nice and structured fashion:
You can try it out at https://analyze.xiv.zone/.
It's now possible to compile Kawari to WebAssembly. The servers aren't compiled in, but the packet parser can be re-used.
Thanks to NotNite, grabbing both the static (.lib
) and dynamic (.dll
) versions of Oodle is no longer nessecary. The documentation was also updated to reflect this.
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!)