TL;DR: This addon stops you from getting interrupted at the beginning of your spells when you stop moving but the server still thinks you are.
Note: This is the follow-up to my original CastStill GearSwap include. Big update: CastStill is now a full standalone Windower addon. You don't need GearSwap anymore, and you don't need to touch your job luas. If you were using the old include, delete it and remove the include('CastStill.lua') line from your job luas. The addon replaces it completely.
What is it?
Ever stop moving and try to cast, but the server still thinks you're moving so it interrupts you?
It works the same way as before. It watches your character's position and holds your spell briefly until both the client and server agree you've stopped, then automatically sends it. If you haven't moved recently, your spell goes off as normal.
It covers magic, ninjutsu, songs, trusts, items, and ranged attacks and the hold is short enough that you won't notice it..
Setup: Just load and run. Nothing needs to be changed.
Gearswap Users: This addon also works with Gearswap and doesnt conflict. As a heads up though, When CastStill loads and sees GearSwap running, it reloads GearSwap once and you'll see a message about it. This is normal. CastStill needs to catch your cast before GearSwap does, and reloading GearSwap puts the two addons in the right order. After that, all your swaps behave exactly like they always have.
Ashita users: Thorny made a version for you, usable with or without LAC: CastDelay
Credit to Thorny for the 0x15 packet tracking suggestion that made this whole approach fast and reliable in the first place.
This was a game changer when I added it to my PLD lua, all the interuptions went away. moving fast in sortie trying to get spells up. 10/10 would recommend
This sounds very cool, I'll give it a try. Seems like a net positive overall for solving a long standing issue with the game. Thank you for taking the time to make it and also share it with us.
Is it possible to make this type of addon, but have it work to queue up a spell after your previous spell?
You know... after you cast a spell, there's the awkward 1~2 second period where you can't use another spell... is it possible to take a spell cast request made in this time, and just automatically defer it to the moment the window opens to use another spell? So we don't get this derpy message, but also cast the next spell the instant we are able to cast again?
Is it possible to make this type of addon, but have it work to queue up a spell after your previous spell?
You know... after you cast a spell, there's the awkward 1~2 second period where you can't use another spell... is it possible to take a spell cast request made in this time, and just automatically defer it to the moment the window opens to use another spell? So we don't get this derpy message, but also cast the next spell the instant we are able to cast again?
Just a thought/suggestion... would be nice...
Spell queuing like that shouldn't be too difficult to implement. I wonder whether an addon like this already exists though? Also, this gets a little too close to automation for my comfort. :-/
Is it possible to make this type of addon, but have it work to queue up a spell after your previous spell?
You know... after you cast a spell, there's the awkward 1~2 second period where you can't use another spell... is it possible to take a spell cast request made in this time, and just automatically defer it to the moment the window opens to use another spell? So we don't get this derpy message, but also cast the next spell the instant we are able to cast again?
Just a thought/suggestion... would be nice...
Spell queuing like that shouldn't be too difficult to implement. I wonder whether an addon like this already exists though? Also, this gets a little too close to automation for my comfort. :-/
It does sort of lean into that domain a bit... I'm not trying to like, queue up spells to try to automate gameplay, use macros, or something like that. I just find this weird "no cast time zone" to be an annoying pain point, and don't want my mistake of trying to cast too soon to delay me casting the spell I wanted to cast (manually).
Simple example, it's annoying to cast a Cure, then go to try to cast Paralyna on your party, but I went too fast and the Paralyna didn't go off cause I tried to cast it in this dumb time window, so then I have to try again, delaying it longer. This is so much worse too if you're in content with a lot of things going on, causing lag, where you sometimes don't even get to see your character do the casting animation, just the finish (if even that), so you can't even know if the spell did actually start or not.
I feel like even beyond my usage, this would solve a lot of confusion/issues for newer players, and is something that FF14 even has as is by default. If it has to only trigger if you try to cast the spell near the tail end of the window or something like that, then that is a totally fine concession to make, as I'm just trying to not get dunked by guesstimating this time window and being wrong.
It does sort of lean into that domain a bit... I'm not trying to like, queue up spells to try to automate gameplay, use macros, or something like that. I just find this weird "no cast time zone" to be an annoying pain point, and don't want my mistake of trying to cast too soon to delay me casting the spell I wanted to cast (manually).
Simple example, it's annoying to cast a heal, then go to try to cast Paralyna, but I went too fast and the Paralyna didn't go off cause I tried to cast it in this dumb time window, so then I have to try again, delaying it longer. This is so much worse too if you're in content with a lot of things going on, causing lag, where you sometimes don't even get to see your character do the casting animation, just the finish (if even that), so you can't even know if the spell did actually start or not.
I feel like even beyond my usage, this would solve a lot of confusion/issues for newer players, and is something that FF14 even has as is by default. If it has to only trigger if you try to cast the spell near the tail end of the window or something like that, then that is a totally fine concession to make, as I'm just trying to not get dunked by guesstimating this time window and being wrong.
Hmmm, i see your point.
Thinking further on it now, it would be nice to que your next spells/abilities/weaponskills to prevent issues from when you click them too quickly after the last action. I think this is something I'd be willing to start working on.
Thanks for the suggestion (Genuinely). I'm going to see if i can get a working version done in the next couple weeks.
Detecting the cooldown time for that is basically impossible to do with 100% reliability since latency is involved. One thing you can do is buffer the action, catch and block the unable to cast message, and reinject it when you get that message. You shouldn't lose any time versus timing it perfectly, but multiple injections of the same swaps/actions can definitely bog down instances so that approach isn't without downside.
You can get a reasonable guess and err on the high end, but you may still block actions that didn't need to be blocked or delay an extra packet frame when it wasn't necessary. The delay isn't static though, short spells have much shorter delay so there has to be some interpolation of how long an action will prevent further actions if using the stop/delay approach instead of multiple injection.
The delay isn't static though, short spells have much shorter delay
Didn't know this either, that's really strange. Is that tied to the base cast time of the spell or does it take into account fast cast reductions?
Even in the worst case just having a display on screen saying like "Wait..." and then changes to "Go" when you can cast would be helpful... but like you said, even that sounds like it might be difficult due to the time apparently not being static / latency.
The automatic queuing to "not lose any time versus timing it perfectly" would be amazing even if it's not 100% perfect, both for ensuring you are casting spell after spell without unnecessary delays, but also to prevent accidental mistakes of pressing it too early.
Thorny's right that you can't know with 100% certainty when the client/server will accept the next action. Latency is always going to make that impossible.
I'll have to experiment with it and see how reliable I can make it. Even if it's not 100% reliable, it still could be a huge QoL improvement over having an action simply disappear because you were a few hundred milliseconds early. If it ends up feeling janky or introduces more issues than it solves, I'll shelve it. But I think it's worth looking into.
It does sort of lean into that domain a bit... I'm not trying to like, queue up spells to try to automate gameplay, use macros, or something like that. I just find this weird "no cast time zone" to be an annoying pain point, and don't want my mistake of trying to cast too soon to delay me casting the spell I wanted to cast (manually).
Simple example, it's annoying to cast a heal, then go to try to cast Paralyna, but I went too fast and the Paralyna didn't go off cause I tried to cast it in this dumb time window, so then I have to try again, delaying it longer. This is so much worse too if you're in content with a lot of things going on, causing lag, where you sometimes don't even get to see your character do the casting animation, just the finish (if even that), so you can't even know if the spell did actually start or not.
I feel like even beyond my usage, this would solve a lot of confusion/issues for newer players, and is something that FF14 even has as is by default. If it has to only trigger if you try to cast the spell near the tail end of the window or something like that, then that is a totally fine concession to make, as I'm just trying to not get dunked by guesstimating this time window and being wrong.
Hmmm, i see your point.
Thinking further on it now, it would be nice to que your next spells/abilities/weaponskills to prevent issues from when you click them too quickly after the last action. I think this is something I'd be willing to start working on.
Thanks for the suggestion (Genuinely). I'm going to see if i can get a working version done in the next couple weeks.
To piggyback off this, I dont want automation. I play bard and I cast every song individually via a macro on my palette. THAT BEING SAID... When casting my 5 songs during my nitro window, its quite annoying to look at the time since previous cast, and eyeball / guestimate the delay window to then press the next macro in sequence. Very VERY often when doing my 5 nitro songs, i'll sing Honor March, then click a Minuet, and it doesnt go off because of the delay. Now that I didnt get the song off, there's an even further delay because I clicked too early, had to process in my head that it didnt go off, visually verify with equip viewer that my gear swapped and nothing happened, and then wait an additional moment to press the button again.
If something like this could Ease that pain point of delay windows, then that could be useful, without treading into "Just run a script that has a perfect delay". There may be a comfortable middle ground?
Or alternatively, can just keep as is. It's not such a big pain point that an addon is necessary.
TL;DR: This addon stops you from getting interrupted at the beginning of your spells when you stop moving but the server still thinks you are.
Note: This is the follow-up to my original CastStill GearSwap include. Big update: CastStill is now a full standalone Windower addon. You don't need GearSwap anymore, and you don't need to touch your job luas. If you were using the old include, delete it and remove the include('CastStill.lua') line from your job luas. The addon replaces it completely.
What is it?
Ever stop moving and try to cast, but the server still thinks you're moving so it interrupts you?
It works the same way as before. It watches your character's position and holds your spell briefly until both the client and server agree you've stopped, then automatically sends it. If you haven't moved recently, your spell goes off as normal.
It covers magic, ninjutsu, songs, trusts, items, and ranged attacks and the hold is short enough that you won't notice it..
Setup: Just load and run. Nothing needs to be changed.
Gearswap Users: This addon also works with Gearswap and doesnt conflict. As a heads up though, When CastStill loads and sees GearSwap running, it reloads GearSwap once and you'll see a message about it. This is normal. CastStill needs to catch your cast before GearSwap does, and reloading GearSwap puts the two addons in the right order. After that, all your swaps behave exactly like they always have.
Ashita users: Thorny made a version for you, usable with or without LAC: CastDelay
Credit to Thorny for the 0x15 packet tracking suggestion that made this whole approach fast and reliable in the first place.