[Since 2.2.0] A_CheckForReload is acting weird for my case

Fri Jun 19, 2020 6:55 pm

Seems A_CheckForReload is a little bit broken in GZDoom under certain circumstances.
I have a weapon that has sequential fire frames but may be canceled at any time.
Due to Zandronum compatibility (hurr durr I know...) my choices are limited and if I don't want the weapon animations to be ping delayed I can't use ACS calls.
I choose the next frame by using this:
Code:
ChooseFireFrame:
    QSNG # 0 A_CheckForReload(8,1)
    Goto FireFrame7
    QSNG # 0 A_CheckForReload(7,1,1)
    Goto FireFrame6
    QSNG # 0 A_CheckForReload(6,1,1)
    Goto FireFrame5
    QSNG # 0 A_CheckForReload(5,1,1)
    Goto FireFrame4
    QSNG # 0 A_CheckForReload(4,1,1)
    Goto FireFrame3
    QSNG # 0 A_CheckForReload(3,1,1)
    Goto FireFrame2
    QSNG # 0 A_CheckForReload(2,1,1)
    Goto FireFrame1
    QSNG # 0 A_ResetReloadCounter
    Goto FireFrame0

In Zandronum and GZDoom versions up to 2.1.0, the frames go 0, 1, 2, 3, 4, 5, 6, 7 as they should, but in GZDoom 2.2.0 and later it goes 1, 2, 3, 4, 5, 6, 3, 7 which isn't right. Note it starting at 1 instead of 0 and the 2nd 3 before the 7.

I've spoken to phantombeta on Discord about it and after a bit of back and fourth, they said:
phantombeta wrote:Congrats, either you've found a very old bug that no one else has been affected by, or your code was accidentally relying on undefined behaviour
You should report it on the forums now
You do not have the required permissions to view the files attached to this post.
Last edited by Dark-Assassin on Mon Jun 22, 2020 5:48 pm, edited 2 times in total.

Re: [Since 2.2.0] A_CheckForReload is acting weird for my ca

Fri Jun 19, 2020 11:46 pm

Post a runnable sample please.

Re: [Since 2.2.0] A_CheckForReload is acting weird for my ca

Mon Jun 22, 2020 4:33 pm

Attached to OP

Re: [Since 2.2.0] A_CheckForReload is acting weird for my ca

Mon Aug 30, 2021 3:40 am

Well according to the A_CheckForReload spec i can't make head and tails of your example. The second parameter is a string not an integer and you pass always the same (besides it doesn't exist).
https://zdoom.org/wiki/A_CheckForReload

Re: [Since 2.2.0] A_CheckForReload is acting weird for my ca

Mon Aug 30, 2021 4:48 am

Integers are accepted as an offset just like pretty much all other A_Jump functions.

Re: [Since 2.2.0] A_CheckForReload is acting weird for my ca

Mon Aug 30, 2021 4:59 am

Are you sure? It's not documented and it is in A_Jump.

Re: [Since 2.2.0] A_CheckForReload is acting weird for my ca

Mon Aug 30, 2021 5:27 am

This has always been possible in DECORATE. The documentation has it wrong.

Re: [Since 2.2.0] A_CheckForReload is acting weird for my ca

Mon Aug 30, 2021 5:32 am

Okay true but he's changing the counter in the middle of the loop is that right?

Re: [Since 2.2.0] A_CheckForReload is acting weird for my ca

Mon Aug 30, 2021 11:50 am

I don't think you can have several calls to A_CheckForReload inside the same loop, after all it's a generalization for A_CheckRailReload. May be before it happened to work "as intended". I know that jumps are handled differently now but the code for that function is pretty much the same as before.

Re: [Since 2.2.0] A_CheckForReload is acting weird for my ca

Mon Aug 30, 2021 11:56 am

Setting the last parameter to 1 will not increment the counter. This was definitely never meant to be used like here but it should work anyway.

Re: [Since 2.2.0] A_CheckForReload is acting weird for my ca

Mon Aug 30, 2021 12:07 pm

I dunno but this commit looks relevant:
https://github.com/coelckers/gzdoom/com ... 93bdef5e9a