Publish new kawari blog post, update shrines and other misc changes
Some checks failed
Deploy / Deploy Website (push) Has been cancelled

This commit is contained in:
Joshua Goins 2025-05-01 15:38:18 -04:00
parent 267d341720
commit 280a64b445
38 changed files with 149 additions and 67 deletions

View file

@ -126,6 +126,9 @@ menu:
- name: 'Accessibility' - name: 'Accessibility'
url: 'accessibility' url: 'accessibility'
weight: 3 weight: 3
- name: 'Source Code'
url: 'https://code.ryne.moe/redstrate/redstrate.com'
weight: 4
badges: badges:
- name: 'CC NC SA' - name: 'CC NC SA'
params: params:

View file

@ -87,7 +87,7 @@ In a previous update you might have seen that my character's attributes were com
![Old Gridania rendered in wireframe mode.](wireframe.webp) ![Old Gridania rendered in wireframe mode.](wireframe.webp)
There are now several new GM commands: There are now several new GM commands:
* ``//gm wireframe``: Turns on wireframe rendering for the environment. I actually wonder if this to catch bots running under the ground. Is that still a thing? * ``//gm wireframe``: Turns on wireframe rendering for the environment. I actually wonder if this is for catching bots running underneath the ground. Is that still a thing?
* `//gm <item>` to give yourself an item. * `//gm <item>` to give yourself an item.
* `//gm lv <level>` to set your current level. * `//gm lv <level>` to set your current level.

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View file

@ -0,0 +1,78 @@
---
title: "Kawari Progress Report 9 - Patch 7.21"
date: 2025-05-01
draft: false
tags:
- FFXIV
- Reverse Engineering
series:
- Kawari Progress Report
summary: "Here is a new progress report, mostly smaller things but I managed to complete another patch update!"
---
Here is a new progress report, mostly smaller things but I managed to complete another patch update! I have begun working on my other FFXIV projects again, so Kawari has taken a bit of a back-burner.
# Equipped Weapons
Your equipped weapon is now displayed (subweapons are not yet, so some weapons will look broken.) It turns out I was truncating the model IDs, which was easy to fix:
![wepon](wepon.webp)
More importantly, this fixes the broken-looking animations when you attacked enemies! (Or rather, the lack of animation...)
# Launcher
[Sapphire](https://github.com/SapphireServer/Sapphire) - _the_ alternative server for FFXIV - uses a completely bespoke launcher. Other projects expect you to know how to launch the game manually. Kawari isn't any better: [Astra](https://github.com/redstrate/Astra) has first-class support, but I shouldn't expect you to use it. I want Kawari to be approachable to the average FFXIV player!
What if we just re-used the _existing_ program SqEx ships, which is already very capable of launching the game?
![Don't mind the window title, I just didn't have the required fonts installed for Wine.](launcher.webp)
This is now possible with [LauncherTweaks](https://github.com/redstrate/LauncherTweaks), and Kawari is now equipped to serve a launcher page that's compatible with the latest boot executable (and possibly older versions too!) We can do this too without modifying any game files, users just have to copy two files into their boot directory.
I don't know enough about [the launcher API](https://wiki.xiv.zone/Launcher#Native_Communication) to launch the game _yet_, but it can already read `FFXIV_BOOT.cfg`, open the config backup tool and more. Once that's done though I'll modify our usage guide accordingly!
# Patch 7.21
This patch was released since the last report, so it's time to update those IPC opcodes! This is actually quite a fun one, so I've been busy playing the retail game again instead of working on Kawari 😄
Anyway, Kawari should now work with this version[^1]. There's a few tidbits left such as events, but I think 7.22 will release soon - I don't want to waste too much time on 7.21.
# China Region
A special interest of mine recently is exploring the [Chinese](https://wiki.xiv.zone/China_Region) and [Korean](https://wiki.xiv.zone/Korea_Region) versions of the game (well, as much as an I can without being a citizen of either country.) I have implemented the bare minimum so a Chinese client to connect to the Kawari lobby server. They use a specialized login packet that was trivial to add:
![The Chinese lobby screen.](shanda-lobby.webp)
![The custom Chinese name input, to prove that I'm not using a language mod or something?](shanda-char.webp)
This doesn't mean Chinese clients can load into a zone, unfortunately. Their client is too old and it predates any supported game version in Kawari. I suspect that even when they update, their IPC opcodes might still be different to their Global counterpart.
# Packet Obfuscation
[This is a new packet-related mess from SqEx](https://www.pcgamer.com/games/final-fantasy/i-cant-really-say-what-they-were-thinking-says-whistleblowing-modder-as-final-fantasy-14s-attempt-to-thwart-stalkers-falls-terribly-short-of-the-mark/), but fortunately doesn't require Kawari to implement it. I'm still worried will become mandatory in the future, so I'm going to work on supporting it anyway.
I have now added a toggle to the world config to tell the client we are sending obfuscated packets, but let me reiterate there's _no point_ in doing this. We don't actually obfuscate anything yet, so all it does is crash the game. If the server happens to send invalid data, I guess the client doesn't know how to handle it? Good thing that network errors don't exist!!
If you're interested in how the obfuscation works on the client, see [Perchbird's Unscrambler](https://github.com/perchbirdd/Unscrambler) which goes into a _ton_ of detail about the algorithm.
# Scripting
I have filled out more `ActionResult` fields for attacks. This is now exposed in the Lua API, and action scripts can specify whether they deal magical/physical damage, their aspect and more:
```lua
-- FastBlade.lua
function doAction(player)
effects = EffectsBuilder()
effects:damage("Normal", "Slashing", "Unaspected", 20)
return effects
end
```
# Character Backups
As I mentioned in a previous report, you could place character backups from [Auracite](https://auracite.xiv.zone/) into the server's `backups` folder to load them. This doesn't really work anymore now that we have accounts and such. Now this functionality is exposed on the account management website, where it makes more sense:
![Yes, I know the website looks terrible!](char-archive.webp)
[^1]: With that, Kawari now works against four different patches: 7.21, 7.20h, 7.20 and 7.18h! With [iolite](https://github.com/0xbbadbeef/iolite), we can use an alternative server with 7.16.

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View file

@ -0,0 +1,12 @@
---
title: "Morpho"
date: 2025-04-26
draft: false
layout: "project"
projtags:
- Qt
source: "https://invent.kde.org/redstrate/Morpho"
license: GPLv3
summary: "BlueSky client"
---

View file

@ -8,6 +8,7 @@
"program": "Procreate", "program": "Procreate",
"tags": [ "tags": [
"sketch", "sketch",
"fan art" "fan art",
"ffxiv"
] ]
} }

View file

@ -6,6 +6,7 @@
"program": "Procreate", "program": "Procreate",
"tags": [ "tags": [
"sketch", "sketch",
"fan art" "fan art",
"ffxiv"
] ]
} }

View file

@ -7,6 +7,7 @@
"program": "Procreate", "program": "Procreate",
"tags": [ "tags": [
"sketch", "sketch",
"fan art" "fan art",
"ffxiv"
] ]
} }

View file

@ -7,6 +7,7 @@
"program": "Procreate", "program": "Procreate",
"tags": [ "tags": [
"sketch", "sketch",
"fan art" "fan art",
"ffxiv"
] ]
} }

View file

@ -8,7 +8,8 @@
"newgrounds_url": "https://www.newgrounds.com/art/view/redstrate/bard-in-the-black-shroud", "newgrounds_url": "https://www.newgrounds.com/art/view/redstrate/bard-in-the-black-shroud",
"program": "Procreate, Krita", "program": "Procreate, Krita",
"tags": [ "tags": [
"fan art" "fan art",
"ffxiv"
], ],
"title": "bard in the black shroud" "title": "bard in the black shroud"
} }

View file

@ -10,7 +10,8 @@
"mastodon_url": "https://mastodon.art/@redstrate/109434559164546455", "mastodon_url": "https://mastodon.art/@redstrate/109434559164546455",
"program": "Procreate", "program": "Procreate",
"tags": [ "tags": [
"sketch" "sketch",
"ffxiv"
], ],
"title": "Sketch Dump" "title": "Sketch Dump"
} }

View file

@ -7,7 +7,8 @@
"description": "As you can probably tell, I LOVE this streetwear set in FFXIV.", "description": "As you can probably tell, I LOVE this streetwear set in FFXIV.",
"program": "Krita", "program": "Krita",
"tags": [ "tags": [
"fan art" "fan art",
"ffxiv"
], ],
"title": "Viera Streetwear" "title": "Viera Streetwear"
} }

View file

@ -8,7 +8,8 @@
"program": "Krita", "program": "Krita",
"tags": [ "tags": [
"sketch", "sketch",
"fan art" "fan art",
"ffxiv"
], ],
"title": "Viera #1" "title": "Viera #1"
} }

View file

@ -8,7 +8,8 @@
"program": "Krita", "program": "Krita",
"tags": [ "tags": [
"sketch", "sketch",
"fan art" "fan art",
"ffxiv"
], ],
"title": "Viera #2" "title": "Viera #2"
} }

View file

@ -8,7 +8,8 @@
"mastodon_url": "https://mastodon.art/@redstrate/109394255132277134", "mastodon_url": "https://mastodon.art/@redstrate/109394255132277134",
"program": "Krita", "program": "Krita",
"tags": [ "tags": [
"sketch" "sketch",
"ffxiv"
], ],
"title": "Well Fed" "title": "Well Fed"
} }

View file

@ -7,7 +7,8 @@
"description": "This is my second Knockout background, which is just a slightly touched up drawing I did last year! I still like this set.", "description": "This is my second Knockout background, which is just a slightly touched up drawing I did last year! I still like this set.",
"program": "Krita", "program": "Krita",
"tags": [ "tags": [
"fan art" "fan art",
"ffxiv"
], ],
"title": "Knockout Background #2" "title": "Knockout Background #2"
} }

View file

@ -14,7 +14,8 @@
"program": "Krita", "program": "Krita",
"tags": [ "tags": [
"sketch", "sketch",
"fan art" "fan art",
"ffxiv"
], ],
"title": "march sketches" "title": "march sketches"
} }

View file

@ -6,7 +6,7 @@
"bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lc6i7menf22b", "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lc6i7menf22b",
"program": "Krita, Blender", "program": "Krita, Blender",
"title": "commission for midnighto51", "title": "commission for midnighto51",
"tags": ["fan art", "commission"], "tags": ["fan art", "commission", "ffxiv"],
"languages": { "languages": {
"jp": { "jp": {
"title": "commission for midnighto51 (2)" "title": "commission for midnighto51 (2)"

View file

@ -6,7 +6,7 @@
"bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lbmxvdfrhk2t", "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lbmxvdfrhk2t",
"program": "Krita, Blender", "program": "Krita, Blender",
"title": "commission for midnighto51", "title": "commission for midnighto51",
"tags": ["fan art", "commission"], "tags": ["fan art", "commission", "ffxiv"],
"languages": { "languages": {
"jp": { "jp": {
"title": "commission for midnighto51" "title": "commission for midnighto51"

View file

@ -7,7 +7,8 @@
"bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lbdmhro4g22t", "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lbdmhro4g22t",
"program": "Krita", "program": "Krita",
"tags": [ "tags": [
"fan art" "fan art",
"ffxiv"
], ],
"title": "Miq'ote Sketch" "title": "Miq'ote Sketch"
} }

View file

@ -11,7 +11,8 @@
"program": "Krita", "program": "Krita",
"tags": [ "tags": [
"sketch", "sketch",
"fan art" "fan art",
"ffxiv"
], ],
"title": "Sage Sketch" "title": "Sage Sketch"
} }

View file

@ -10,7 +10,8 @@
"bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lbdmhro4g22t", "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lbdmhro4g22t",
"program": "Krita", "program": "Krita",
"tags": [ "tags": [
"fan art" "fan art",
"ffxiv"
], ],
"title": "Juritta Sketch" "title": "Juritta Sketch"
} }

View file

@ -11,7 +11,8 @@
"bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lbhxsxbzx22j", "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lbhxsxbzx22j",
"program": "Krita", "program": "Krita",
"tags": [ "tags": [
"fan art" "fan art",
"ffxiv"
], ],
"title": "Viera ID Check", "title": "Viera ID Check",
"languages": { "languages": {

View file

@ -7,7 +7,8 @@
"mastodon_url": "https://mastodon.art/@redstrate/111794271545458755", "mastodon_url": "https://mastodon.art/@redstrate/111794271545458755",
"program": "Krita", "program": "Krita",
"tags": [ "tags": [
"fan art" "fan art",
"ffxiv"
], ],
"title": "It's cold here" "title": "It's cold here"
} }

View file

@ -9,7 +9,8 @@
"pixiv_url": "https://www.pixiv.net/artworks/115516281", "pixiv_url": "https://www.pixiv.net/artworks/115516281",
"program": "Krita", "program": "Krita",
"tags": [ "tags": [
"fan art" "fan art",
"ffxiv"
], ],
"title": "Bull of Ala Mhigo", "title": "Bull of Ala Mhigo",
"languages": { "languages": {

View file

@ -1,6 +1,6 @@
{ {
"alt_text": "Drawing of my Viera warrior of light from Final Fantasy XIV. She is wearing a big light green shirt, and leaning on her right hand. The shirt has a design of a bomb on it.", "alt_text": "Drawing of my Viera warrior of light from Final Fantasy XIV. She is wearing a big light green shirt, and leaning on her right hand. The shirt has a design of a bomb on it.",
"tags": ["sketch", "fan art"], "tags": ["sketch", "fan art", "ffxiv"],
"date": "2025-02-28", "date": "2025-02-28",
"mastodon_url": "https://mastodon.art/@redstrate/114082579323219923", "mastodon_url": "https://mastodon.art/@redstrate/114082579323219923",
"bluesky_url": "https://bsky.app/profile/redstrate.com/post/3ljavgnqygc2a", "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3ljavgnqygc2a",

View file

@ -6,7 +6,7 @@
"pixiv_url": "https://www.pixiv.net/en/artworks/129208899", "pixiv_url": "https://www.pixiv.net/en/artworks/129208899",
"program": "Krita", "program": "Krita",
"title": "dress 👗", "title": "dress 👗",
"tags": ["fan art"], "tags": ["fan art", "ffxiv"],
"languages": { "languages": {
"jp": { "jp": {
"title": "ドレス" "title": "ドレス"

View file

@ -1,6 +1,6 @@
{ {
"alt_text": "Illustration of a male Viera (from Final Fantasy XIV Online.) He is wearing his usual tribal garments, which consists of a short shirt, a rug-like thing tugged around his hips and a lot of belts. He has short dark hair, brown eyes and is looking at you. Past him you can see trees that reach into the night sky, with moonlight pouring in through the green leaves.", "alt_text": "Illustration of a male Viera (from Final Fantasy XIV Online.) He is wearing his usual tribal garments, which consists of a short shirt, a rug-like thing tugged around his hips and a lot of belts. He has short dark hair, brown eyes and is looking at you. Past him you can see trees that reach into the night sky, with moonlight pouring in through the green leaves.",
"tags": ["fan art"], "tags": ["fan art", "ffxiv"],
"date": "2025-04-06", "date": "2025-04-06",
"mastodon_url": "https://mastodon.art/@redstrate/114291820012411651", "mastodon_url": "https://mastodon.art/@redstrate/114291820012411651",
"bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lm5sicqhkc2o", "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lm5sicqhkc2o",

View file

@ -3,7 +3,7 @@
"characters": [ "characters": [
"ryne" "ryne"
], ],
"tags": ["fan art"], "tags": ["fan art", "ffxiv"],
"date": "2025-01-01", "date": "2025-01-01",
"mastodon_url": "https://mastodon.art/@redstrate/113754899961557170", "mastodon_url": "https://mastodon.art/@redstrate/113754899961557170",
"bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lepfk72lj22o", "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lepfk72lj22o",

View file

@ -7,7 +7,7 @@
"program": "Krita", "program": "Krita",
"title": "undressed 🫣", "title": "undressed 🫣",
"nsfw": true, "nsfw": true,
"tags": ["fan art"], "tags": ["fan art", "ffxiv"],
"characters": ["juritta"], "characters": ["juritta"],
"languages": { "languages": {
"jp": { "jp": {

View file

@ -41,39 +41,13 @@
<div class="box"> <div class="box">
<h2>Artwork</h2> <h2>Artwork</h2>
<p>Here's some fan art of my WoL, I want to do more general FFXIV fan art in the future too!</p> <p>Here's some fan art, mostly of my own WoL. I want to do more general FFXIV fan art eventually!</p>
<div style="height: 500px; overflow: auto"> <div style="height: 500px; overflow: auto">
{{ partial "art-section" . }} {{ partial "art-section" . }}
</div> </div>
</div> </div>
</div> </div>
<input type="radio" id="tab-3" name="my-tabs">
<label for="tab-3" class="tab-label">Mods</label>
<div class="container">
<div class="box">
<h2>My Mods</h2>
<p>I have created a few mods to enhance the game:</p>
<ul>
<li><a href="https://xiv.zone/mods/rebound">Rebound</a>: Somehow even after the big graphical update, Square Enix hasn't fixed the bug where certain character physics (like the Viera ear wiggle) breaks under high framerates.</li>
<li><a href="https://xiv.zone/mods/refitter">Refitter</a>: I didn't like how some armor fit on my WoL, so I fixed it myself.</li>
<li><a href="https://xiv.zone/mods/hooky">Hooky</a>: I find this really useful during Gold Saucer events so I can leave the game running the background.</li>
<li><a href="https://xiv.zone/mods/easyfullscreen">EasyFullscreen</a>: So I can enter and exit the game with F11.</li>
</ul>
<h2>My Tools</h2>
<p>I have created some unofficial tools for the game:</p>
<ul>
<li><a href="https://xiv.zone/astra">Astra</a>: I use this on my desktop & Steam Deck to launch the game.</li>
<li><a href="https://xiv.zone/novus">Novus</a>: There was no Linux solution for working with the game's data on Linux - so I created my own.</li>
<li><a href="https://auracite.xiv.zone">Auracite</a>: This grabs portable information about your WoL. I used to display my adventurer plate here!</li>
</ul>
</div>
</div> </div>
<style> <style>

View file

@ -6,14 +6,6 @@
<p>Yes... I was a Minecraft kid growing up. I started playing during the Beta, but I'm not sure what version.</p> <p>Yes... I was a Minecraft kid growing up. I started playing during the Beta, but I'm not sure what version.</p>
<div class="container"> <div class="container">
<div class="box">
<h2>Mods</h2>
<ul>
<li><a href="https://code.ryne.moe/redstrate/realms-begone">Realms Begone</a>: Remove the Realms button on the Title Screen.</li>
</ul>
</div>
<div class="box"> <div class="box">
<h2>Worlds</h2> <h2>Worlds</h2>

View file

@ -2,14 +2,19 @@
<h2>{{ .Title }}</h2> <h2>{{ .Title }}</h2>
{{ if in .File.Dir "blog" }} {{ if in .File.Dir "blog" }}
{{ $posted := $.Date.Format "January 02, 2006" }}
{{ $modified := $.Page.Lastmod.Format "January 02, 2006" }}
<i style="margin: 0"> <i style="margin: 0">
Posted on Posted on
<time datetime="{{ .Page.Lastmod.Format "2006-01-02" }}" class="text-muted"> <time datetime="{{ .Page.Lastmod.Format "2006-01-02" }}" class="text-muted">
{{ $.Date.Format "January 02, 2006" }} {{ $posted }}
</time>
<time datetime="{{ .Page.Lastmod.Format "2006-01-02" }}" class="text-muted">
(Updated on {{ $.Page.Lastmod.Format "January 02, 2006" }})
</time> </time>
{{ if not (eq $posted $modified) }}
<time datetime="{{ .Page.Lastmod.Format "2006-01-02" }}" class="text-muted">
(Updated on {{ $modified }})
</time>
{{ end }}
</i> </i>
<br> <br>

View file

@ -4,8 +4,8 @@
<div class="grid-sizer"></div> <div class="grid-sizer"></div>
<div class="gutter-sizer"></div> <div class="gutter-sizer"></div>
{{ $p := slice "Juritta" }} {{ $p := slice "ffxiv" }}
{{ range where .Site.RegularPages "Params.characters" "intersect" $p }} {{ range where .Site.RegularPages "Params.arttags" "intersect" $p }}
{{ if not (.Params.guest) }} {{ if not (.Params.guest) }}
{{ partial "render-art" . }} {{ partial "render-art" . }}
{{ end }} {{ end }}