Read-only archive of the Armageddon Games Forums Archive (2000–2026) · About this archive

[2.50.1/2] Spin Attack Magic Cost Glitches

7 replies · 77,200 views · Started 02 December 2015

If a user sets a magic cost on the spin attack, and does not have enough MP to use it, ZC will repeatedly swing the sword for as long as the player holds the corresponding button, trying to charge it. This may also be true of quake hammer, but I have not verified it.

Reported by Evan, video link here: https://youtu.be/GR1__1U7224

Note: I believe this is because [FONT=Courier New]paymagiccost(itemid);[/FONT] isn't set at the correct time, when determining if the sword charge should occur. I do not know if he had this problem in 2.50.1, or 2.50.2, or both; or if it affects all builds of 2.50, as I have not yet had time to test it in all three.

the current version of link.cpp gleeok gave us isn't the one that is compiled into Zelda Classic right now.

I know. I don't know if this changed, or not, but I suspect that this particular problem will be identical.

It is, AFAIK. I also made a hackish fix for it, but engine correction would be good, although Evan will disagree as he abused it for an effect in a quest.

I can confirm something is seriously wacky here. Here is the code, and i didn't change a thing.

    // charging up weapon...
//
if(((attack==wSword && attackclk==SWORDCHARGEFRAME && itemid>=0 && isWpnPressed(itype_sword)) ||
#if 0
(attack==wWand && attackclk==WANDCHARGEFRAME && itemid>=0 isWpnPressed(itype_wand)) ||
#endif
(attack==wHammer && attackclk==HAMMERCHARGEFRAME && itemid>=0 && isWpnPressed(itype_hammer))) && z==0 && checkmagiccost(itemid)) //this check prevents that
{
// Increase charging while holding down button.
if(spins==0 && charging<magiccharge)
charging++;

// Once a charging threshold is reached, play the sound.
if(charging==normalcharge)
{
paymagiccost(itemid);
sfx(WAV_ZN1CHARGE,pan(int(x)));
}
else
{
itemid = current_item_id(attack==wHammer ? itype_quakescroll2 : itype_spinscroll2);

if(itemid>-1 && charging==magiccharge && checkmagiccost(itemid))
{
paymagiccost(itemid);
charging++; // charging>magiccharge signifies a successful supercharge.
sfx(WAV_ZN1CHARGE2,pan(int(x)));
}
}
}

Tamamo wrote:I can confirm something is seriously wacky here. Here is the code, and i didn't change a thing.
    // charging up weapon...
//
if(((attack==wSword && attackclk==SWORDCHARGEFRAME && itemid>=0 && isWpnPressed(itype_sword)) ||
#if 0
(attack==wWand && attackclk==WANDCHARGEFRAME && itemid>=0 isWpnPressed(itype_wand)) ||
#endif
(attack==wHammer && attackclk==HAMMERCHARGEFRAME && itemid>=0 && isWpnPressed(itype_hammer))) && z==0 && checkmagiccost(itemid)) //this check prevents that
{
// Increase charging while holding down button.
if(spins==0 && charging<magiccharge)
charging++;

// Once a charging threshold is reached, play the sound.
if(charging==normalcharge)
{
paymagiccost(itemid);
sfx(WAV_ZN1CHARGE,pan(int(x)));
}
else
{
itemid = current_item_id(attack==wHammer ? itype_quakescroll2 : itype_spinscroll2);

if(itemid>-1 && charging==magiccharge && checkmagiccost(itemid))
{
paymagiccost(itemid);
charging++; // charging>magiccharge signifies a successful supercharge.
sfx(WAV_ZN1CHARGE2,pan(int(x)));
}
}
}

Is that the same version that I have, or did you get a fresher copy? (I need to sleep, or I;d just check.)

So, anyhow, it certainly has some problems...

I'm pretty sure that the culprit is the lack of a call to checkmagiccost() before starting the charge cycle. A call to that before this codeblock, should fix it in general, but you'd need to isolate these into individual items, as checkmagiccost() is item specific, and the charging cycle sort of combines items that have the ability. It's mandatory to split the hammer, and sword, in any event.

I'd add a call to checkmagicost() to every item use function/block, as it'd make it possible to assign a cost to anything, and ensure it works. I'd prefer to make all of these blocks into isolated functions too, but that's another matter, as it might make it easier to debug, modify, and expand them.

I'm just waiting for the open source stuff, so that I have a complete set of the absolute latest 2.50.3-ish code, before mucking with it. Not knowing what Gleeok changed, I'd rather not make changes to what I have, and need to do them over again.

[MENTION=38582]Saffith[/MENTION] [MENTION=42714]Gleeok[/MENTION]
Hiya guys get your asses your in here so we can fix this,