Having a Street Fighter 3 parry system possible?

Mr.Q!

Well-known member
Currently I am experimenting with having freespecial set up with counterframe to act like parry and focus attack system from SF3:

A freespecial with counterframe when it's being hit to trigger another animation that can be cancelled into whatever, but I am still taking damage when that happens, so that's SF3 "parry" system. It uses magic meter so it's not that free to abuse. Is there any way/script to set it up just like SF3 parry system works so I cna neglect all damage taken and still get my countermove safely done?
 
I am folowing the example, and yes! You teased parry there, but how I would tell this script to funcion only in the desired freespecial parry animation? I assume the successful parry efect is still working by counterframe? But if I use this as it is, I would become "invisible" invincible, if you know what I mean :LOL:

Plus, I already have an ondoattack file for my playable characters, but just a few can parry, I'll post it in a few mins.
 
Last edited:
Ok so, this is my ondoattack script for Ryu so he doesn't gain any meter from said freespecials:

C++:
#import "data/scripts/main_ondoattack.c"


void main()
{
    hitVar();
    multihits();
    mpRate();
}


void mpRate()
{
    //WORKS FOR ATTACKER ONLY
    if(!getlocalvar("which")){
        void self    = getlocalvar("self");
        void anim    = getentityproperty(self, "animationID");
        int mpRate; //DEFAULT MP RATE


        //BEFORE EVERYTHING, SAVE THE DEFAULT MPRATE DEFINED AT THE CHARACTER HEADER
        if(getentityvar(self, "defaultMpRate") == NULL()){
            setentityvar(self, "defaultMpRate", getentityproperty(self, "mprate"));
        }
           
        //DETECT AND COMPARE ANIMATIONS, THESE ONES CAN'T INCREASE MP
        if( anim == openborconstant("ANI_FREESPECIAL3")||
            anim == openborconstant("ANI_FREESPECIAL6")||
            anim == openborconstant("ANI_FREESPECIAL12")||


            anim == openborconstant("ANI_FREESPECIAL22")||
            anim == openborconstant("ANI_FREESPECIAL32")){
           
            changeentityproperty(self, "mpset", NULL(), NULL(), NULL(), 0, NULL(), NULL());
        }
        else //DEFAULT MP RATE
        {
            mpRate = getentityvar(self, "defaultMpRate");
            changeentityproperty(self, "mpset", NULL(), NULL(), NULL(), mpRate, NULL(), NULL());
        }
    }
}

I am also attaching main_ondoattack.c which takes care of other situations.
 

Attachments

I am folowing the example, and yes! You teased parry there, but how I would tell this script to funcion only in the desired freespecial parry animation? I assume the successful parry efect is still workjing by counterframe? But if I use this as it is, I would become "invisible" invincible, if you know what I mean :LOL:

Plus, I already have an ondoattack file for my playable characters, but just a few can parry, I'll post it in a few mins.

No counterframe involved at all. There's more than one way to do it, but basically, I store current time into a variable every time you press the block button. This is done in a key script. You could replace that with forward to make it exactly like SF3 of course, but principal is the same.

Then, in the doattack, I check current time vs. recorded time of block press. If the last block press was within a specific amount and you are idle or have just parried, then I do the following:
  • Player turns to face attack if they are not already - one of the parry advantages in my project is it works in both directions.
  • Player goes into parry animation.
  • Player gets MP boost.
  • Current Player pausetime and tosstime get a small amount added.
  • Current attacker pausetime and tosstime get a small amount added - larger than player's.
  • Spawn a flash. The flash plays sound effect.
On screen, you get the SF3 effect. Both player and attacker get "frozen" briefly, but the attacker freeze is longer, and it is addition to their existing animation recovery, so player recovers first and can parry again or if there's enough time, counter attack.

If the parry fails...
  • Player goes into normal block animation. Whether or not they actually block something is up to the situation - the parry system is out at that point.
  • Mash prevention. In my game, double tapping block = back dash, so it's impossible to mash for a parry.
    • If this wasn't in place, I would introduce a penalty equal to the parry timing window where next parry attempt gets ignored.
I'm working on another project fix ATM, but I'll take a look at your script sample when I get a chance.

DC
 
Back
Top Bottom