diff --git a/config.yaml b/config.yaml index 42acd71..2041484 100644 --- a/config.yaml +++ b/config.yaml @@ -126,6 +126,9 @@ menu: - name: 'Accessibility' url: 'accessibility' weight: 3 + - name: 'Source Code' + url: 'https://code.ryne.moe/redstrate/redstrate.com' + weight: 4 badges: - name: 'CC NC SA' params: diff --git a/content/blog/kawari8/index.md b/content/blog/kawari8/index.md index 86266a7..4ccee5d 100644 --- a/content/blog/kawari8/index.md +++ b/content/blog/kawari8/index.md @@ -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) 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 ` to give yourself an item. * `//gm lv ` to set your current level. diff --git a/content/blog/kawari9/char-archive.webp b/content/blog/kawari9/char-archive.webp new file mode 100644 index 0000000..8058b7c Binary files /dev/null and b/content/blog/kawari9/char-archive.webp differ diff --git a/content/blog/kawari9/index.md b/content/blog/kawari9/index.md new file mode 100644 index 0000000..5ece9b9 --- /dev/null +++ b/content/blog/kawari9/index.md @@ -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. diff --git a/content/blog/kawari9/launcher.webp b/content/blog/kawari9/launcher.webp new file mode 100644 index 0000000..ffcd7f0 Binary files /dev/null and b/content/blog/kawari9/launcher.webp differ diff --git a/content/blog/kawari9/shanda-char.webp b/content/blog/kawari9/shanda-char.webp new file mode 100644 index 0000000..582b73c Binary files /dev/null and b/content/blog/kawari9/shanda-char.webp differ diff --git a/content/blog/kawari9/shanda-lobby.webp b/content/blog/kawari9/shanda-lobby.webp new file mode 100644 index 0000000..a06a150 Binary files /dev/null and b/content/blog/kawari9/shanda-lobby.webp differ diff --git a/content/blog/kawari9/wepon.webp b/content/blog/kawari9/wepon.webp new file mode 100644 index 0000000..afc1f9a Binary files /dev/null and b/content/blog/kawari9/wepon.webp differ diff --git a/content/software/morpho.md b/content/software/morpho.md new file mode 100644 index 0000000..1270cfd --- /dev/null +++ b/content/software/morpho.md @@ -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" +--- + diff --git a/data/art/2020/ffxiv-swim.json b/data/art/2020/ffxiv-swim.json index a177370..f040248 100644 --- a/data/art/2020/ffxiv-swim.json +++ b/data/art/2020/ffxiv-swim.json @@ -8,6 +8,7 @@ "program": "Procreate", "tags": [ "sketch", - "fan art" + "fan art", + "ffxiv" ] } diff --git a/data/art/2020/viera-sketch.json b/data/art/2020/viera-sketch.json index 372d233..73c8dc8 100644 --- a/data/art/2020/viera-sketch.json +++ b/data/art/2020/viera-sketch.json @@ -6,6 +6,7 @@ "program": "Procreate", "tags": [ "sketch", - "fan art" + "fan art", + "ffxiv" ] } diff --git a/data/art/2021/jan1.json b/data/art/2021/jan1.json index ccb4bd3..9d26729 100644 --- a/data/art/2021/jan1.json +++ b/data/art/2021/jan1.json @@ -7,6 +7,7 @@ "program": "Procreate", "tags": [ "sketch", - "fan art" + "fan art", + "ffxiv" ] } diff --git a/data/art/2021/viera-dancer.json b/data/art/2021/viera-dancer.json index 79a043b..7cd099c 100644 --- a/data/art/2021/viera-dancer.json +++ b/data/art/2021/viera-dancer.json @@ -7,6 +7,7 @@ "program": "Procreate", "tags": [ "sketch", - "fan art" + "fan art", + "ffxiv" ] } diff --git a/data/art/2022/bard.json b/data/art/2022/bard.json index 73c9006..21cb31e 100644 --- a/data/art/2022/bard.json +++ b/data/art/2022/bard.json @@ -8,7 +8,8 @@ "newgrounds_url": "https://www.newgrounds.com/art/view/redstrate/bard-in-the-black-shroud", "program": "Procreate, Krita", "tags": [ - "fan art" + "fan art", + "ffxiv" ], "title": "bard in the black shroud" } diff --git a/data/art/2022/sketch-dump.json b/data/art/2022/sketch-dump.json index abdf86b..15445ca 100644 --- a/data/art/2022/sketch-dump.json +++ b/data/art/2022/sketch-dump.json @@ -10,7 +10,8 @@ "mastodon_url": "https://mastodon.art/@redstrate/109434559164546455", "program": "Procreate", "tags": [ - "sketch" + "sketch", + "ffxiv" ], "title": "Sketch Dump" } diff --git a/data/art/2022/viera-street.json b/data/art/2022/viera-street.json index 5230932..723bd6f 100644 --- a/data/art/2022/viera-street.json +++ b/data/art/2022/viera-street.json @@ -7,7 +7,8 @@ "description": "As you can probably tell, I LOVE this streetwear set in FFXIV.", "program": "Krita", "tags": [ - "fan art" + "fan art", + "ffxiv" ], "title": "Viera Streetwear" } diff --git a/data/art/2022/viera1.json b/data/art/2022/viera1.json index 3a0c913..cd6bdc7 100644 --- a/data/art/2022/viera1.json +++ b/data/art/2022/viera1.json @@ -8,7 +8,8 @@ "program": "Krita", "tags": [ "sketch", - "fan art" + "fan art", + "ffxiv" ], "title": "Viera #1" } diff --git a/data/art/2022/viera2.json b/data/art/2022/viera2.json index fbd9f79..3a12b5e 100644 --- a/data/art/2022/viera2.json +++ b/data/art/2022/viera2.json @@ -8,7 +8,8 @@ "program": "Krita", "tags": [ "sketch", - "fan art" + "fan art", + "ffxiv" ], "title": "Viera #2" } diff --git a/data/art/2022/well-fed.json b/data/art/2022/well-fed.json index f870cf5..29f0e5f 100644 --- a/data/art/2022/well-fed.json +++ b/data/art/2022/well-fed.json @@ -8,7 +8,8 @@ "mastodon_url": "https://mastodon.art/@redstrate/109394255132277134", "program": "Krita", "tags": [ - "sketch" + "sketch", + "ffxiv" ], "title": "Well Fed" } diff --git a/data/art/2023/knockout-background2.json b/data/art/2023/knockout-background2.json index 9d2ef71..e8551ef 100644 --- a/data/art/2023/knockout-background2.json +++ b/data/art/2023/knockout-background2.json @@ -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.", "program": "Krita", "tags": [ - "fan art" + "fan art", + "ffxiv" ], "title": "Knockout Background #2" } diff --git a/data/art/2023/marchsketch.json b/data/art/2023/marchsketch.json index 6aaa43d..d11c748 100644 --- a/data/art/2023/marchsketch.json +++ b/data/art/2023/marchsketch.json @@ -14,7 +14,8 @@ "program": "Krita", "tags": [ "sketch", - "fan art" + "fan art", + "ffxiv" ], "title": "march sketches" } diff --git a/data/art/2024/commission-midnighto51-2.json b/data/art/2024/commission-midnighto51-2.json index 0ae2156..79e46c1 100644 --- a/data/art/2024/commission-midnighto51-2.json +++ b/data/art/2024/commission-midnighto51-2.json @@ -6,7 +6,7 @@ "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lc6i7menf22b", "program": "Krita, Blender", "title": "commission for midnighto51", - "tags": ["fan art", "commission"], + "tags": ["fan art", "commission", "ffxiv"], "languages": { "jp": { "title": "commission for midnighto51 (2)" diff --git a/data/art/2024/commission-midnighto51.json b/data/art/2024/commission-midnighto51.json index 0a2dfd9..a055af2 100644 --- a/data/art/2024/commission-midnighto51.json +++ b/data/art/2024/commission-midnighto51.json @@ -6,7 +6,7 @@ "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lbmxvdfrhk2t", "program": "Krita, Blender", "title": "commission for midnighto51", - "tags": ["fan art", "commission"], + "tags": ["fan art", "commission", "ffxiv"], "languages": { "jp": { "title": "commission for midnighto51" diff --git a/data/art/2024/ffxiv-sketches-miqote.json b/data/art/2024/ffxiv-sketches-miqote.json index d5432c3..6960c2b 100644 --- a/data/art/2024/ffxiv-sketches-miqote.json +++ b/data/art/2024/ffxiv-sketches-miqote.json @@ -7,7 +7,8 @@ "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lbdmhro4g22t", "program": "Krita", "tags": [ - "fan art" + "fan art", + "ffxiv" ], "title": "Miq'ote Sketch" } diff --git a/data/art/2024/ffxiv-sketches-sage.json b/data/art/2024/ffxiv-sketches-sage.json index 7481928..297d076 100644 --- a/data/art/2024/ffxiv-sketches-sage.json +++ b/data/art/2024/ffxiv-sketches-sage.json @@ -11,7 +11,8 @@ "program": "Krita", "tags": [ "sketch", - "fan art" + "fan art", + "ffxiv" ], "title": "Sage Sketch" } diff --git a/data/art/2024/ffxiv-sketches-viera.json b/data/art/2024/ffxiv-sketches-viera.json index 30ac091..cacc4cd 100644 --- a/data/art/2024/ffxiv-sketches-viera.json +++ b/data/art/2024/ffxiv-sketches-viera.json @@ -10,7 +10,8 @@ "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lbdmhro4g22t", "program": "Krita", "tags": [ - "fan art" + "fan art", + "ffxiv" ], "title": "Juritta Sketch" } diff --git a/data/art/2024/idcheck.json b/data/art/2024/idcheck.json index feb05c9..d276614 100644 --- a/data/art/2024/idcheck.json +++ b/data/art/2024/idcheck.json @@ -11,7 +11,8 @@ "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lbhxsxbzx22j", "program": "Krita", "tags": [ - "fan art" + "fan art", + "ffxiv" ], "title": "Viera ID Check", "languages": { diff --git a/data/art/2024/itscoldhere.json b/data/art/2024/itscoldhere.json index 81808b9..f1c5eeb 100644 --- a/data/art/2024/itscoldhere.json +++ b/data/art/2024/itscoldhere.json @@ -7,7 +7,8 @@ "mastodon_url": "https://mastodon.art/@redstrate/111794271545458755", "program": "Krita", "tags": [ - "fan art" + "fan art", + "ffxiv" ], "title": "It's cold here" } diff --git a/data/art/2024/raubahn.json b/data/art/2024/raubahn.json index 138061d..0e5adea 100644 --- a/data/art/2024/raubahn.json +++ b/data/art/2024/raubahn.json @@ -9,7 +9,8 @@ "pixiv_url": "https://www.pixiv.net/artworks/115516281", "program": "Krita", "tags": [ - "fan art" + "fan art", + "ffxiv" ], "title": "Bull of Ala Mhigo", "languages": { diff --git a/data/art/2025/bigshirt5.json b/data/art/2025/bigshirt5.json index e53b0b9..8385ef2 100644 --- a/data/art/2025/bigshirt5.json +++ b/data/art/2025/bigshirt5.json @@ -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.", - "tags": ["sketch", "fan art"], + "tags": ["sketch", "fan art", "ffxiv"], "date": "2025-02-28", "mastodon_url": "https://mastodon.art/@redstrate/114082579323219923", "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3ljavgnqygc2a", diff --git a/data/art/2025/dress.json b/data/art/2025/dress.json index 5708b4c..649f48d 100644 --- a/data/art/2025/dress.json +++ b/data/art/2025/dress.json @@ -6,7 +6,7 @@ "pixiv_url": "https://www.pixiv.net/en/artworks/129208899", "program": "Krita", "title": "dress 👗", - "tags": ["fan art"], + "tags": ["fan art", "ffxiv"], "languages": { "jp": { "title": "ドレス" diff --git a/data/art/2025/returninghome.json b/data/art/2025/returninghome.json index 3cd599f..8b874f1 100644 --- a/data/art/2025/returninghome.json +++ b/data/art/2025/returninghome.json @@ -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.", - "tags": ["fan art"], + "tags": ["fan art", "ffxiv"], "date": "2025-04-06", "mastodon_url": "https://mastodon.art/@redstrate/114291820012411651", "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lm5sicqhkc2o", diff --git a/data/art/2025/ryne-portrait.json b/data/art/2025/ryne-portrait.json index 72160b3..348ab46 100644 --- a/data/art/2025/ryne-portrait.json +++ b/data/art/2025/ryne-portrait.json @@ -3,7 +3,7 @@ "characters": [ "ryne" ], - "tags": ["fan art"], + "tags": ["fan art", "ffxiv"], "date": "2025-01-01", "mastodon_url": "https://mastodon.art/@redstrate/113754899961557170", "bluesky_url": "https://bsky.app/profile/redstrate.com/post/3lepfk72lj22o", diff --git a/data/art/2025/undressed.json b/data/art/2025/undressed.json index 4c32787..c7ec26c 100644 --- a/data/art/2025/undressed.json +++ b/data/art/2025/undressed.json @@ -7,7 +7,7 @@ "program": "Krita", "title": "undressed 🫣", "nsfw": true, - "tags": ["fan art"], + "tags": ["fan art", "ffxiv"], "characters": ["juritta"], "languages": { "jp": { diff --git a/themes/red/layouts/_default/ffxiv.html b/themes/red/layouts/_default/ffxiv.html index 227de0b..c65df4c 100644 --- a/themes/red/layouts/_default/ffxiv.html +++ b/themes/red/layouts/_default/ffxiv.html @@ -41,39 +41,13 @@

Artwork

-

Here's some fan art of my WoL, I want to do more general FFXIV fan art in the future too!

+

Here's some fan art, mostly of my own WoL. I want to do more general FFXIV fan art eventually!

{{ partial "art-section" . }}
- - - -
-
-

My Mods

- -

I have created a few mods to enhance the game:

- -
    -
  • Rebound: 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.
  • -
  • Refitter: I didn't like how some armor fit on my WoL, so I fixed it myself.
  • -
  • Hooky: I find this really useful during Gold Saucer events so I can leave the game running the background.
  • -
  • EasyFullscreen: So I can enter and exit the game with F11.
  • -
- -

My Tools

- -

I have created some unofficial tools for the game:

- -
    -
  • Astra: I use this on my desktop & Steam Deck to launch the game.
  • -
  • Novus: There was no Linux solution for working with the game's data on Linux - so I created my own.
  • -
  • Auracite: This grabs portable information about your WoL. I used to display my adventurer plate here!
  • -
-