Saturday, November 30, 2019

Let's talk about ROLLBACKS!

Alrighty, I finally got annoyed enough to make another blog post, so here we go.
Let's cover rollbacks vs. lag-based networking for fighting games!

WHAT THE HECK IS "NETCODE"?

"Netcode" isn't really a thing itself - it's a word many people use to describe "the many different ways that video games can handle online play".  This means the actual online play part, during a battle/round/quarter/half/fight/skirmish/puzzle (with optional simultaneous argument over voice chat), as opposed to matchmaking/leaderboards/lobbies/ranking/messaging/voting/replays or any other non-gameplay online thing you can do in a video game.

WHAT DOES NETCODE DO?

The basis of online play is transmitting information about MY game to YOUR computer (or game console, which is a computer), and receiving information about YOUR game back to MY computer.

Information takes time to get places.

If two computers that are miles away from each other need to communicate, that information takes time to be transmitted between them.  (A full discussion of the different types of internet transmission delay is outside the scope of this article, but playing over wifi is worse! :^)  

Though things can be done to minimize the transmission lag, we physically can't eliminate 100% of the delay - there is always some lag present whenever information is transmitted across a distance.  And the bigger the distance, or the worse the infrastructure is, the bigger that lag will be.

The purpose of netcode is to handle, hide, or otherwise compensate for information transmission delay in the "best" way possible for a given type of game.

For more discussion of how games like first-person shooters can hide lag in extra-clever ways, or why servers may be used as intermediate communication points, see the Appendix.  For now, we're going to talk about fighting games, and just about the game itself.

OKAY, SO ONLINE LAG IN FIGHTING GAMES...?

To get it out of the way:  the most compact information games can send between computers is just the player's input at a given time.  Everything else about what should happen can be constructed from the previous state of the game and the new input, which is how games work offline.  :^)  So fighting games only send each other "my current player's input", which is why we talk about "inputs" arriving after a delay.  No other information is necessary, so no extra info is sent.

Let's not even talk about "frames", that mysterious unit of time - let's talk about SECONDS, because it's easier!  Imagine Angel and Blanka want to play a match of Online Punch Game, and Blanka is using his tropical-fruit-powered internet connection which has a delay of two whole seconds.  

(I picked two seconds because it is a huge long time in video game terms - all these problems still exist with smaller delays, and are just as bad, but it's easier to conceptualize "two seconds" as "really bad".)

Now, both games start at the same time - which is a whole different type of magic - and they immediately start telling the other computer about what's happening on their side.

That two-second, fruit-based delay means when the timer is at 90 seconds, Angel's game is getting Blanka's inputs from 92 seconds - two whole seconds ago.  Now we have a problem!  How do we handle that delayed, missing information and still keep the game moving?  Well...

WHY DO DIFFERENT TYPES OF NETCODE EXIST?

The short answer here is that people got cleverer over time.  The earliest online play had the simplest solution, and more intricate solutions were invented later on.  The first type of netcode created was...

LAG-BASED

With a 2-second delay between Angel and Blanka, the simplest solution is for Angel's game to also delay Angel's own inputs by two seconds.  That way, when Blanka's inputs from two seconds ago arrive, the game is also processing Angel's inputs from that same time.  Simple, yeah?

Pros:
  • Easy to make.  Super simple, doesn't require altering the game itself in any way - just keep a list of previous inputs to hold them until they are needed.
  • Doesn't affect the game's onscreen presentation at all.  The game proceeds at regular speed and nothing looks or sounds any different from offline play.  (Ignoring lag spikes for now.)
Cons:
  • Delays your inputs to your own character based on the internet delay to the opponent.  Only one downside, but it's a BIG one.
tl;dr:  Takes all the lag out of the visuals and puts it into the controls instead.
Like that Google Stadia GIF:

Let's unpack that "con" a bit.
Fighting game players care about response time - 8 frames of input lag is "unplayable".  (Don't worry if you don't know what that means.)  Under lag-based netcode, if Angel sees Blanka starting to do an attack, and Angel immediately tries to defend, Angel's own "defense" input is delayed by two seconds, which means her character gets hit even though she reacted as quickly as she could.  To properly defend, Angel would have had to guess (defending two seconds early) instead of react.

This is a big deal.

In lag-based games, viable online tactics are often very different from viable offline tactics.  Because your own character is delayed, there are situations that you simply CANNOT react to online, you must guess, where offline you could easily react properly based on seeing what's about to happen.

This very problem - lag-based online play is not a viable substitute for offline practice, even against the same person - led a very intelligent guy by the name of Tony Cannon to come up with the concept of "rollbacks", and create netcode that uses them, which he called "GGPO".  It's important to note this so I'm gonna put it in big text:

ROLLBACKS WERE INVENTED TO SPECIFICALLY IMPROVE THE PLAYABILITY OF ONLINE FIGHTING GAMES.  NOT TO PROVIDE SMOOTH VISUALS.  And they do it!  But only if you care very much about the feel of the game, instead of the visuals, which many casual players don't!  So...

WHAT THE HECK ARE ROLLBACKS?

Let's return to Angel, Blanka, and their two-second delay - but now Online Punch Game uses rollbacks!

Angel's game is still receiving Blanka's inputs two seconds late.  But now, the game saves a snapshot of the match from two seconds ago, as well as all of Angel's inputs since then...and when Blanka's delayed input finally arrives, it "rolls back" to that snapshot of the past, alters history by using Blanka's newly-received old input along with Angel's saved input, then runs itself in fast-forward until it gets back to the present.

As Doc Brown would say, the timeline has now skewed into an alternate reality where we got Blanka's delayed input "on time"!  And the game continues from there.

So what's the big deal now?

The big deal is that now Angel's inputs to her own character can happen immediately, even though Blanka's inputs to her game are still delayed!  Reactions to visual cues are once again possible even in online play.  Because we can go back and alter history, Angel can tell her character what to do in the present, immediately.

In fact, Angel can choose how much delay her inputs have, which in turn changes how much altering of history the game has to do.  If Angel chooses to experience the same amount of delay as the lag-based netcode would need, two seconds in our example, then the game doesn't have to alter history at all and the experience is exactly equivalent to the lag-based netcode.

Pros:

  • You can play the game with zero "felt" input delay, bringing online and offline reaction speeds much closer together and making online practice much more useful.
  • You can choose the delay you feel on your own character - immediate reaction for better playability, or delayed reaction for better visuals.
  • Improved handling of lag spikes - a short period of longer delay doesn't necessarily mean the game needs to stop, or increase your own lag, to continue.
Cons:

  • Altering history changes the present!  This is what a "rollback" is, a large visual change between one moment and the next.  The opponent might suddenly be in the middle of an attack, or may have blocked an attack that previously looked like it successfully hit.
tl;dr:  Takes the lag and puts it wherever you want it, either in the visuals or in the controls.

Let's unpack the "con" once again.
We still can't get rid of the lag!  We can either put it in the controls or in the visuals, or a bit of both.
Putting the lag in the visuals can indeed look (or sound) bad!  That's what people who complain about rollbacks complain about:  "I did a move and it hit but they blocked it"/"I did a super but then didn't because my meter wasn't full"/etc.

This complaint tends to be unduly effective at convincing casual players that rollbacks are bad, because bad visuals sure do look bad.  But what it ignores is that you can't SEE input lag in a video, but you sure can FEEL it when you play...and constant input lag is a way bigger barrier to improvement than occasional visual discontinuities.  (Plus, like I keep saying, if you prefer the input lag you can choose it with rollback-based netcode - but your opponent doesn't have to!)

[Technical stuff:  The game continuously saves snapshots, and any time it gets an old input from Blanka it goes back to the appropriate snapshot and alters history, so the "present" is continuously changing.  Since the opponent's inputs are always delayed, this means the "present" you see is a sort of incomplete reality, but in real-time that turns out not to matter for intermediate- or high-level play anywhere near as much as eliminating the delay on your own inputs does.]

SO WHY DO I WANT ROLLBACK NETCODE IN THE GAMES I PLAY?

Simply put, you want rollback-based netcode in your fighting game because you can play either way - with rollbacks, or with lag.  

Different people have different goals, and will want different choices.
If you want to have "game feel" that's close to offline quality but you don't care how the game looks then you choose a lower "my character" delay and more rollbacks, and if you want the game to look nice but don't care how it feels then you choose a higher "my character" delay and no rollbacks.

If the game doesn't support rollbacks, that first option is not available, so everyone suffers the constant lag on their own character, and online play deviates significantly from offline play.

THE USEFULNESS OF ROLLBACKS IS NOT RELATED TO THE DESIGN OR GAMEPLAY OF YOUR FIGHTING GAME!
The elimination of "my character" input lag is equally beneficial in Guilty Gear or Street Fighter or Samurai Shodown or Box Fighter or KI or Melty Blood or Skullgirls or Marvel.  [tm, tm, tm, tm, tm, tm, tm, tm.]

OKAY, I UNDERSTAND WHY ROLLBACKS ARE USEFUL - HOW HARD IS IT TO ADD ROLLBACK SUPPORT IN AN ENGINE?

Rollback support only needs two things from the game engine:

  1. The ability to save a snapshot of the game at a particular point in time, and to reload a snapshot later.  (Typically this is accomplished by saving the useful properties of the fighters/projectiles/etc, and not the background.)
  2. The ability to run the game in fast-forward, simulating from the altered past up to the present very quickly.  (Typically this is accomplished by just running the game logic, which is very simple for fighting games, without drawing anything or decompressing animations or doing anything visual.)

It does not matter if your game is 2D or 3D, using complicated models with cloth physics or cardboard and duct tape - those are the only two things the engine needs in order to support rollback netcode.  It does not have to be written "from the ground up" to support rollbacks.


Programmers might object anyway, because:
Adding those things, even if they're minimal work, is more work than the "no changes at all" required for lag-based netcode.
-and-
Adding those things can be more difficult depending on the architecture of the engine - however, typically things that make adding rollbacks difficult also make actually-creating-the-game more difficult, too.  For example:
If a 3D game attaches the hitboxes to the character's skeleton, then fast-forwarding the game would involve animating the skeleton over and over to compute the position of the hitboxes...but this approach has so many other downsides (for both development and gameplay!) that it is recommended the hitbox locations be "baked out" and not attached to the final animated skeleton in the first place.  :^P

If the game uses a commercial engine, for example Unreal or Unity, then saving a snapshot might be quite a large undertaking because it will require serializing objects your own way.  Additionally, lag-based netcode may already be built into the engine, which will further encourage engineers to think lag-based netcode is "good enough".

So let me say this ONE MORE TIME:

FOR HIGH-LEVEL PLAY OVER ANY SIGNIFICANT DISTANCE, "GOOD ENOUGH" IS NOT GOOD ENOUGH.

If you want your players to play their best, especially if they live in America or Europe where larger distances and worse infrastructure is common, lag-based netcode is SIMPLY NOT GOOD ENOUGH.

APPENDIX: DIFFERENT TYPES OF NETWORKING SOLUTIONS / WHAT'S THIS ABOUT "SERVER-BASED," "RELAY SERVER," OR "PEER-TO-PEER"?

[This part is for nerds, or aspiring nerds.  I know because I am one and I wrote it.]

For a two-person game, you just need to get information between two computers.
The fastest way to get information from Computer A to Computer B is by sending it directly between them.  This is called a peer-to-peer connection, and is ALWAYS preferable for 2-player fighting games when it is available.

Having any kind of server in the middle IS SLOWER.  Imagine sending a letter to your friend directly, or sending a letter to your friend by sending it to your grandma and having her forward it to your friend.  The grandma route will be slower, even if she notices the letter right away.  (Please don't be a smart alec in the comments by positing what if your grandma lives next door to your friend, or is The Flash(tm), or something.  You understand the example.  Thanks.)

There are situations where servers are useful in two-person games, but they aren't for speed!
A relay server is a server that is used simply to repeat information because Computer A has trouble reaching Computer B.  If Computer A can't talk to Computer B because of a problem with the intertubes, Computer A can talk to a relay server which then talks to Computer B.  This is only preferred because otherwise A and B can't talk at all; it does not improve the connection speed.

I've also heard an amazing theory, paraphrased as, "Amazon(tm) promises 40ms ping times from anywhere in the world to their cloud, so I'm gonna use Amazon as an intermediary and beat peer-to-peer ping times".  How do I even explain the problem here...that's like saying, "I live five minutes from the freeway, and my friend lives five minutes from the freeway, so we live ten minutes from each other even though I live in California and my friend lives in New York."  You still have to drive on the freeway.
If my ping time from LA to NY is 200ms, that's because there's a huge distance to cover.  If my ping time in LA to Amazon is 40ms, and the ping time from NY to Amazon is 40ms, we're not talking to the same server.  Those two servers still have to communicate, and THAT ping time is going to make up the rest of the 200ms...or more.
(Unless Amazon also built a super-secret, orders-of-magnitude-faster-than-the-regular-internet secondary worldwide network for their cloud to use, of course.  Which is not entirely impossible because Amazon has so much money that they should just give me $20m to make games because this article was so useful and mentioned them, hey ya hear that?  ...anyway...)

So for fighting games, speed and low latency matter, and you can get away with not having a server unless you need it for connectivity purposes.

BUT

For a three-or-more-person game, servers are not only useful, they're preferred.

If A, B, and C are playing a game and you want to do peer-to-peer connections, that's A-B and A-C and B-C that all need to send information; if you add D, then you have A-B, A-C, A-D, B-C, B-D, and C-D, and your game's performance will be dictated by the single worst connection out of all of those, and if any of them fail you can't play
.
By contrast, with a server you have A-S, B-S (heh), C-S (heh), and D-S (heh); each player only adds one connection, and the server can be put on a super good network connection for itself.  Additionally, if servers are available in many locations (hi Amazon!) then once you know all the players the game can choose a server that's somewhere between A, B, C, and D, and improve everyone's ping time to the server all at once.

As well, with the server model there is ONE authoritative computer that knows exactly "what the game is really like" - the server.  It can tell if you try to teleport or whatever, and because it is the one who decides what's "real" it becomes much harder to cheat.  Still possible, depending on where authority really is held, but much more difficult.

AND

FPSes can cheat.  A lot.  I don't mean cheat like cheat, I mean cheat like "hide lag by faking stuff and nobody can ever know".

In fighting games, your character's position matters a great deal.  Hits are directly attached to you, there's nothing between you and the opponent but your fists.

In FPSes, though, there's a bullet between the two of you.  And a server.  And combining those two things lets the game stretch the truth to players.  Very convincingly!

If I'm in the kitchen and I see you in the kitchen and I shoot you, and the server tells me I shot you (because I shot at where I saw you) and also tells you I shot you, then you got shot.  But if you were "really" outside on the lawn...nobody knows that, AND it didn't matter for all that information in the first sentence!  I saw you in the kitchen (because of lag), I shot you where I saw you, and you got shot.  The only things that would know the difference are the bullet and the server, and neither of those are the players so both of them can ignore the inconvenient facts.

Fun fact - this is a major reason why melee hits in FPSes are so much more frustrating to use than melee hits in fighting games - a "hit" in an FPS is a big stationary 'bullet' that your weapon makes, and in THAT CASE - because it's stationary and comes from your real position - the opponent's real position does matter, which may not be accurately reported to your game right this second so you may be seeing something different, and that's why they miss (or hit) in cases where you don't think they "should".

It doesn't mean people are cheating or the games are bad, but especially with bad ping times FPSes do this more than people would like to admit.  :^)  And fighting games can't do that, period.  :^P

I think that's everything!

Wednesday, March 1, 2017

Don't take unpaid internships, but don't expect to be paid for job interviews!

The other day I had an argument on Twitter abo-

Mike, don't have arguments on Twitter!
Yeah, I know.  It's an insufficient platform for thoughtful discussion and lends itself better to sharp judgment.  I learned. Thanks, Mike.
Okay, good.  As long as we're clear.

The other day I had an argument on Twitter about the fact that Lab Zero posted an animation test for applicants to complete.  A person argued that we should instead ask for reels and provide paid tests to people whose reels we liked.  The person argued that not doing so was tantamount to demanding free work, and one should never do free work, thus it was evil for us to ask and morally wrong for applicants to participate.

This bothered me, not from the company's perspective, but from my individual perspective!
It goes completely against my ethos, even though I am all for not doing work that benefits others without benefit to yourself.  So I'd like to try to explain, and this is somewhere I can do that in complete sentences.  :^P

The way I have lived my life is:
Once you have proven your value to a person/group, then at your own discretion, do not do work that benefits them without compensation which benefits yourself.  The act of proving your worth, however, is work that benefits you, not them, because you want something from them, thus at that point the onus is completely on you.  They want something general (a good employee, whoever it is) but you want something specific (the new employee at this company should be me!).

tl;dr
Assuming your own value to someone else before proving it is at best entitled and at worst arrogant.
It shows you have very little respect for the other person/group, their judgment, or the position you are applying for.  Let me give an example:

If I want to go to Harvard, I apply.  And I put everything into my application, because other people will put everything into theirs.  I do not expect Harvard to compensate me for the time I spent on the application, because the payoff is me attending Harvard instead of someone else getting in.  It is work toward a goal; I am competing against others for something I want.

However, if I didn't respect Harvard, either because of low standing as a school or because of an inflated opinion of myself relative to others, I would put very little effort into my application.  I might consider time spent on applying to be a waste, because I know I'd get in anyway.  In that case, I might wonder why they weren't paying me to apply, because of how much prestige I'd bring to their school even if they don't know it yet.  And if I didn't get in, which is likely in such cases because of the disproportionate effort I spent relative to other applicants, I'd be dismissive of the institution and their obviously-biased recruitment practices.

If someone else wants it more than I do, they'll do more than I will because they value the result more.  Simple as that.

People are free to evaluate the worth of applying for a job: If I estimate that trying to prove my worth by completing an application would take a few days, and that getting the job would not be worth that effort, then I won't apply.  That's a personal choice.  But to demand that I should be compensated for whatever time I spent applying - before successfully proving that I am of benefit to the company, even if I don't get the job! - is insulting in the extreme.  As is expecting the company to hire me without requiring some effort of proof on my part.

There is a different discussion to be had regarding whether a given job application asks too much of applicants.  When looking for a job, after deciding the position is worthwhile, I consider between one and three hours a fair amount of time to devote to arbitrarily proving my worth in order to work someplace I desire to.  Perhaps that is a larger block of time than most people would be comfortable with, but I'm used to putting hundreds or thousands of hours into things I want - making combo videos, proficiency at skills, building a game engine, etc.  Heck, I spent over three hours trying to complete a pacifist run of the Indivisible prototype during our campaign.  :^P  Given that three-hour basic threshold, I've never been subjected to anything I felt was an undue amount of work for the position, and when I exceeded that time it was because I felt the result was worth the effort*.

Certainly, it should be a company's job to compensate potential applicants for large expenses that are not related to proving their worth.  If I'm in California, and a company is in New York wants me to do an in-person interview, I rightly expect they would fly me out (and pay for a hotel if necessary).  But I would not expect a company in my same city to pay for the gas I used driving to their office, nor would I expect either company to actively pay me for the time I took completing the in-person interview, which will likely include a test of my abilities.  And certainly I would NOT expect compensation for completing an evaluation I can finish at home, in my pajamas, on my own schedule.

Equally certainly, it is an employer's requirement to pay employees for work.  If the employer benefits from the work, the employee should be compensated.  Hiring bonuses for applicants which get the job, to compensate them for previous work done after their value has been determined, are great!  Unpaid internships, where companies take advantage of low-status employees in return for "providing experience" are absolutely awful and should be abolished.  And the application process should never require applicants to do work that directly benefits the company conducting the application!

However, I would not expect to be paid to apply for a paid internship, even if the application process used my talents.

------

* Many programming tests can take six to eight hours, and I feel that's a fair evaluation period.  It is not possible to judge someone's programming ability by simply playing the result, you have to kick the tires.

------

Addendum:

Generalized proof of your ability/skill is not the same as domain-specific proof, either. An animation reel of short films doesn't mean you can animate for games; an animation reel for games doesn't mean you can animate for fighting games; experience animating at a different studio doesn't mean you can handle strict frame-count requirements, layering, or whatever else is required**.

"Proving yourself" takes many forms.  If my friend knows I'm a writer and wants me to write something for them, that can constitute proof.  If I am prolific or well-known, then my body of work can, in some instances, constitute proof.  If I have animated six feature films in a certain style and a studio wants me to animate a feature film in that style, I can present my past work.

If, however, a studio wants someone to animate a feature film, then it is up to me to prove to them that I can do what they want.  And if I want to animate that film, then it is up to me to do whatever it takes for them to choose me instead of another applicant.

Additionally, requiring generalized proof may filter out people who have domain-specific skills!  
At least two of our current full-time artists were hired without demo reels, solely on the basis of tests. Had we required reels, neither of them would have been able to apply, despite having the necessary skills. The equivalent is true of at least two designers and one programmer, as well.

------

**Disclaimer, I'm not an animator, so if any of those terms are wrong, please excuse the error.  :^P

Wednesday, July 20, 2016

KOF14 PS4 Demo Input Lag Test

KOF14 PS4 demo input lag test.
Recorded at 120fps, Asus monitor, DualShock 4.
As scientific (or unscientific) as my lag tests always are.  :^)


TL;DR


Averages 5.5 frames of lag at 60fps, 720p performs marginally worse than 1080p but that may be due to downscaling.



DATA:


1080p BUTTON:
10
11
10
11
11
10
9
11
Avg = 10.35 @120 = 5.18 frames at 60fps

1080p DIRECTION:
11
11
11
10
10
11
Avg = 10.66... @120 = 5.33... frames at 60fps

720p BUTTON:
11
12
11
12
12
12
11
11
Avg = 11.5 @120 = 5.75 frames at 60fps

720p DIRECTION:
11
11
12
12
12
12
12
12
Avg = 11.75 @120 = 5.875 frames at 60fps

Average of averages = 11.065 @120 = 5.5325 frames of lag at 60fps.

Videos, if you would like to check my work:
labzerogames.com/KOF14_lag_test_videos/KOF14_1080p_120fps.MOV
labzerogames.com/KOF14_lag_test_videos/KOF14_720p_120fps.MOV

Saturday, December 26, 2015

What I'd Change for Third Strike Upper (3s')

[I almost wrote one of these for GGXXAC++R, but this one decided to get finished first.]

I love Street Fighter III: Third Strike (3s).  I like it better than all the other Street Fighter games combined, partially because it doesn't feel like an SF2 game, which is the exact thing that a lot of people who dislike Third Strike don't like.  :^P

However, 3s has some problems - both with balance and system mechanics.  Most people who play it will readily admit this.  3s was never updated or fixed.  It has also never gotten a really "acceptable" console port, with no extra input lag and with all features intact, to the point where you could play said port and be ready to play it on an arcade setup with no adaptation.

So I figured, what the heck, if I ever got to do a 3s port - laugh it up, fuzzball - I'd like to make it 3s' (read as Third Strike Upper / Third Strike Dash, after SF2') and try to tackle tackle headbutt some of the problems the game has.

The goal of 3s' is to change the way the game is played AS LITTLE AS POSSIBLE while still fixing problems.  So you won't find any "remove Yun" type things, and I will try to justify each suggested change.  However, that does mean that things which are central to the current metagame will change, if those things are sufficiently unbalanced to warrant attention.  My aim as a designer is to only nerf super dominant tactics a tiny bit to make them less dominant, rather than removing them entirely or drastically changing them.  I much prefer to fix balance by making under-used supers useful, making the low-tier characters better, and fixing bugs or inconsistencies...so there is a lot of those things, instead.

Format:
Problem - Solution. Explanation.

OK, here goes...

System Mechanics:


Whiffing normal attacks for meter - Each successive whiffed normal now scales the whiffed-normal metergain rate by half (100%, 50%, 25%, 12.5%, etc).  Whiffed specials are not changed. The scaling is reset whenever a move touches the opponent on hit/block/parry, or your character gets hit, blocks, or parries. Blocked projectiles do not reset this scaling for either character, projectiles that hit do reset it, and projectiles that are parried reset it for the character that threw the projectile only. Whiffing normals at full screen to build large chunks of meter is a main part of 3s.  Completely removing the metergain on whiffed normals solves the problem, but fundamentally changes the game. This solution reduces the usefulness of whiffing multiple normals, but still allows one or two to build up a bar when you are close to full and allows zoning to be at least as useful as before, if not a teeny bit more useful.

Parries - +2f on the cooldown period after attempting a parry, before another parry is allowed.  During the cooldown period for a specific parry, if you are hit with an attack that is parried the same way as the parry you just missed, you suffer crouching damage bonus.  For example, if you attempt a Forward(6) parry and miss, and are then hit by an attack that can be parried with Forward(6) during the cooldown period, you take 25% extra damage.  However, if you attempt a Forward(6) parry and miss, and are hit by an attack that must be parried Down(2), you will not take any extra damage. Being thrown out of parry cooldown does not grant extra damage. This change is intended to penalize people for mis-timing parries, without penalizing them extra for guessing wrong.  If you mis-time a parry but it was the wrong parry, you take regular damage.  If you mis-time a parry but it was the correct parry, you take extra damage.  And, of course, you can still block at any time, even during parry cooldown. Successful parries are unchanged.

"Guess Parries" - Parries input during any wakeup animation, recovery roll, or air land-on-feet hitstun are only active for half as long as a regular parry, with the same cooldown period. If you are thrown during the parry window or cooldown from one of these parries, you cannot tech the throw. Parries input during throw-tech animations are not changed. Guess parries are very powerful because you sacrifice nothing by attempting one.  This allows you to still try guess-parrying, you're just required to have better timing and commit slightly more because you're open to throws.  They are still easier than red parries, but this makes varying your okizeme tactics or timing more effective against people who guess-parry. And combined with the damage bonus on missed parries, it makes guess-parrying much riskier.

"Charge Partitioning" - As soon as any charged direction (Back[4] or Down[2]) reaches 1/3 charge, the charge partition timer will be reset to maximum. Charge partitioning is a nice advanced technique that is present only in Third Strike, however the amount of time you have to partition your charge is RANDOM depending on where that hidden timer happens to be when you start charging. This is not so great, and is easily fixed. This change ensures charge partitioning is always as easy as possible.

Left-Right Unblockables - Left-right unblockables are not fixed, but any time a character is hit during block animation while they are facing the opposite direction from the hit, the damage scaling is reduced to 50% for that hit and the followup combo. Unblockables are sort of a core part of 3s at this point, so removing them is undesired because it would drastically alter some characters, even if removing unblockables is preferable from a design standpoint.  This change simply reduces the effectiveness of unblockables a bit, while still allowing them to exist.

Characters:


Chun-Li:
  • Houyoku-sen (SAII) now has a maximum of 1 stock instead of 2; the bar is now the maximum length possible, the same as Shin-Shoryuken.  Really now, she needs this.  The super still does a decent amount of stun, too.
  • Cancel window on cr.Fwd (c.MK) fixed to not allow super-late cancels.  She needs this too, perhaps these two changes together will encourage more diverse super-art choice.  She still has all her other amazing normals, kara-throw, EK SBK and Lightning Legs, etc.
  • Crouching Jab (2LP) startup increased from 2f to 3f.  She's one of the only characters in the game with a 2f normal, and she's short, and it's crouching which means it's usable as a crouch-tech.  Throws are still universal 2f punishes.  She does NOT need this.
  • Tensei Ranka (SAIII) startup hitbox reaches down to the floor so it can't be crouched; changed to pull in and downward so all hits connect vs airborne opponents more often; advantage on knockdown increased enough to allow crossup attempts afterward; maximum of 2 stocks available; bar is a bit longer, the same length as Shippu.  Trying to make this super actually useful, let's make it her setup super.
  • Middle hits of Houyoku-sen fixed to not un-combo occasionally vs crouching Makoto, etc.  Bugfix.
  • Chun-Li now goes through the mandatory one-standing-frame after wakeup, like every other character.  Bugfix.
  • Increase the height of her crouching head hurtbox (vulnerable box) by 2-3 pixels upward and 3-4 pixels backward in all applicable animations: crouching neutral, crouch-block, non-low-profile crouching attacks, etc.  Bugfix!  She's the shortest crouching character by quite a bit, and lots of things that should hit crouchers, like Remy's close Strong, Oro's standing Forward, or Dudley's EX Machine Gun Blow, miss on only Chun-Li.
Ken:
  • Shippu Jinrai Kyaku (SAIII) now has a maximum of 2 stocks instead of 3; damage reduced by 15%.  Even if Shippu didn't do any damage it would still be the most useful super in the game because it converts any normal into a setup, and 15% puts it just below Spinning Beat.  It's only helped by worse guess-parries, too.
  • Jab DP (623LP) damage reduced from 15 to 11.5.  He can still do it twice, and doing two is still more damage than doing a Strong DP (623MP) but is not twice as much.
  • Grounded opponent knockback on 2nd hit of Target Combo Strong->Fierce decreased slightly, to help DPs miss less often afterward / in the corner.  Legitimate bugfix, because this sucks.
  • Fix the crash when killing Makoto with a neutral throw.  Depending on which version of 3s we're starting with, this could still be present.  :^P
Yun:
  • Genei Jin (SAIII) no longer grants all his normals increased priority.  Yes, Third Strike has actual priority, and yes, Genei Jin makes ALL of Yun's normals count as Super hits, which crush all normals and specials during trades.  You cannot out-poke him during it, and his Jab will beat all special moves and trade with supers.  Let's fix that!
  • Genei-Jin bar length increased, now same length as Sourai Rengeki.  Duration of timer for the super is not changed.  Note that the damage scaling during Genei Jin juggles has not been changed.
  • Sourai Rengeki (SAII) now a maximum of 2 stocks instead of 3.
  • Upkicks (623K) hitbox adjusted to reach further downward, so it misses standing/crouching opponents less often.  Bugfix.
Makoto:
  • Stun damage of Abare Tosanami (SAII) reduced by 50%.  The super itself doesn't do that much stun, it's the other moves that lead to 100%, but we'd like to affect her gameplay as little as possible otherwise, and this lets us not have to adjust the stun on Fukiage as much as we'd have to if we didn't mess with the stun on SAII.
  • Stun damage of L/M/H Fukiage reduced from 29/31/31 to 27/28/31. Fixes 100% stun combo, along with above change.
  • Tanden Renki (SAIII) can be manually deactivated early by inputting QCT+K (236K) while the super art is active.  The deactivation counts as a special move, and uses the same animation as her taunt after a Hayate, but it is cancellable at any time into attacks (not blocking or movement). This super increases her damage but prevents her from blocking while it is active.  By allowing her to deactivate it and return to normal, it's buffed quite a bit because she doesn't have to suffer through 3-4 knockdowns with guess-parries.  And being able to use the deactivation to cancel normals on hit/block would be interesting.
  • Karakusa startup animation will no longer automatically throw-tech if Makoto is thrown out of it.  Bugfix, and even as a Makoto player I think this is dumb.  :^P
  • Increase vacuum effect and hitstun time on the first hit of Seichusen Godanzuki (SAI), to help it fully connect from all distances or as a juggle.  Bugfix.
  • Fix bug where EX Oroshi (214PP) will not knock down when it connects with an opponent's limb hurtbox, as opposed to a body hurtbox.  Bugfix.  It's cool but unpredictable, and she'd rather have the knockdown.
  • Fix bug where one frame of Hayate's (236[P]) startup/hold animation has a get-thrown-box that is too small compared to its' pushbox, resulting in it not being throwable even by many super throws.  Bugfix, verified the bug by checking hitboxes.  Thongboy Bebop will thank me, we still remember that match.  :^)
  • Remove invincibility on Makoto's recovery animation after a successful Karakusa (63214K); no change to invincible recovery animation on neutral throw (headbutt).  Not necessary on the Karakusa, but changing this on her neutral throw would possibly leave her at a disadvantage, so even though it's a bug it's sort of the only real solution.
  • No change on EX Oroshi xx Abare Tosanami comboing on Hugo.  With the changes to her stun, this is more for style than anything now.
Dudley:
  • Reduce stun damage on Rocket Uppercut (SAI).
  • Increase stun damage on Rolling Thunder (SAII).  Try to differentiate them somewhat.
  • Fix Rocket Uppercut's "character point" position to not knock opponent backwards as often in juggles.  Bugfix.
  • Fix Corkscrew Blow to vacuum the opponent in on hit, so that it fully hits more often in juggle situations.  Bugfix.
  • Fix Rolling Thunder (SAII) to turn around if the player makes him dash again but he goes underneath the opponent.  Bugfix.
  • See if there is some way of making Cross Counter connect against invincible moves, rather than whiffing after taking the damage.  Bugfix.  If Valentine can do it, Dudley can do it.  (^.^)
  • Dudley's pretty alright, actually.  (^.^)
Urien:
  • Fix Tyrant Slaughter/Tyrant Punish (SAI) to fully connect for maximum damage vs all characters when crouching or in most juggle situations; increase damage by 25% to match Shin Shoryuken; limit to 1 stock instead of 2; increase bar length slightly.  Bugfixes, more in line with what the intent of the super seems to be - pure damage.  Still can be linked after lots of things on the ground.
  • That's most of Urien...unblockables and charge partitioning are dealt with in System Mechanics, and vs-Alex juggles are dealt with under Alex's section.
Akuma:
  • Stun bar increased to "regular" size instead of "short" size.  His health can be left as-is, but considering one stun is basically death with that amount of health, let's make that just a teensy bit more difficult to accomplish.
  • Messatsu Gou Rasen (SAII) bar length is now shorter than SAI or SAIII.  Earlier access to Raging Demon/KKZ at the cost of having a terrible super otherwise.
  • KKZ (hidden super) motion changed from D,D,D+PPP to D,D+PP; damage reduced from 107 to 95.  First hit is still unparryable, but for the only guaranteed reset in the game let's make it slightly less amazing.
  • Towards+Strong is still invincible to throws.  This is useful, keep it!
Yang:
  • Alter the trajectory of the divekick in Target Combo 3 (jump towards MK->DF+MK) so that it hits more often; alter the trajectory of bug Target Combo 3 (jump backward MK->DF+MK) so that it lands faster.  Bugfixes.
  • Fix bug where close standing Forward (MK) will sometimes not launch the opponent.  Bugfix.
  • Fix bug where Yun/Yang can end up behind Yang after being hit by Fierce Mantis Slashes (236HPx3) with a certain timing.  Bugfix, probably Yang's pushbox.
  • Actually, Yang's pretty okay too.  (^.^)  I'm fine leaving Sei'ei Enbu with the shortest bar in the game, because it is not anywhere near as dominant as Genei Jin, and costs him the use of EX slashes.
Ryu:
  • Decrease opponent knockback from F+Strong (6MP) on hit, to make links after it more reliable.  Bugfix.
  • Increase forward movement on 2nd hit of Target Combo (far s.Fierce->s.RH), so that the s.RH will connect more reliably.  Bugfix.
  • Increase hitstun on far standing Forward, standing Roundhouse, close Fierce, crouching Fierce, crouching Short, and crouching Forward so they are not negative on hit.  Bugfixes.
  • Expand hitbox on LK Joudan Sokutou Geri (41236LK) downward so that it will not miss on some characters after close Fierce (HP) or crouching Fierce (2HP).  Bugfix, because it misses on about half the cast for no real reason.  The alternative is cr.Fierce forcing standing hitstun, but then he can always combo to Hurricane Kick so that might be too much of a buff.
  • Lower opponent's knockup height from Jab and Strong DPs (623LP/MP), and reduce knockup height on the middle hits of Shinkuu Hadoken (SAI) so that all hits of the super will connect after a DP.  Bugfix.
  • Ryu is strong.
Oro:
  • Examine pushboxes on Jinchu Nobori ("chicken kick") to help the [s.Strong xx Chicken Kick]x2 combo work on every character.  Bugfix.
  • Increase hitstop and allowed juggle time on Oniyama ([2]8P), to make super cancels out of it actually useful.  Bugfix-ish, gives him more reason to use the move.
  • Add forward throw (Towards+LP+LK) that uses the animation from his back throw but mirrored to toss them forward; only tosses them about half as far as his back throw.  Oro currently has no way to throw without switching sides, which means he has to give up the corner at all times.
  • Fix neutral throw so that it cannot be escaped before 3-4 hits, the same as all other mashable grabs.  Bugfix.
  • Increase length of the Kishi Riki (SAI) bar to match Tengu Stone's bar; make Human Pillar Driver (63214P) still be a hit-grab during Kishin Riki, so that Oro can combo into it from things like s.Forward (s.MK); increase damage of the air regular Kishi Riki grab when combo'd into; allow Oro to deactivate the regular Kishi Riki by inputting QCT+P during the super, using a shortened version of the activation animation.  Kishin Riki is his least useful super.  Human Pillar Driver change is a bugfix - you can still special cancel into it during Kishin Riki, but since it becomes a regular throw it won't combo.
Elena:
  • Allow her to chain crouching Short (2LK) into itself.  She has no confirmable lows, crouching Strong into super doesn't always combo, and she can't link supers off her command overheads like Dudley can, except in very special cases.  This gives her a confirmable low at least.
  • Make startup frames of all versions of Mallet Smash unthrowable, like they look.  Bugfix/buff, Mallet Smash has 7f of throwable startup - she's even throwable during the frame where she has already left the floor!
  • Allow cancels from the 2nd hit of standing Strong, not just the first hit.  Small buff.
  • Fix Brave Dance so it juggles properly vs airborne opponents outside the corner.  Bugfix/buff.
  • Speed up the cancel animation on Healing (SAIII), increase the rate of health recovery.  Attempt to make it useful.
  • She dances okay!  Leaving her with 3 stocks for Spinning Beat (SAIII), also.
Ibuki:
  • Health increased from 1035 to 1050, same as Twelve's health.  Buff.
  • Yami Shigure (SAIII) now has 2 stocks instead of 1.  Buff.
  • Allow Tsuiji Goe (623P, command jump) to be special- and super-cancelled much earlier in the animation, almost directly after takeoff; make Kunai cancelled from it face the correct direction if it hasn't passed over the opponent yet.  Buff and bugfix.
  • Fix the unique-animation standing Fierce in her Target Combos (B+Strong->Fierce and Jab->Strong(1)->Fierce) to never knock down, instead of sometimes resetting and sometimes knocking down.  Bugfix: there are two simultaneous hitboxes and only one is marked as knockdown, so it depends on which one the game checks first.  After feedback from more than one Ibuki player, it seems "always reset" is preferable to "always knock down".
  • Remove the ability to throw-tech her Personal Action (taunt), and allow Ibuki to parry or attack in the air once the opponent recovers.  Bugfix, and since it is currently VERY punishable on hit, might as well make it a semi-useful mixup option...
Necro:
  • Change Slam Dance (SAII) startup from 0+2 to 2+0, so the total startup time is unchanged but it can't be jumped on reaction after the superflash.  It could use improvement.
  • Fix pushbox on Electric Shock (623P), and add a slight vacuum effect to the middle hits of all versions so that all hits of it connect more reliably, since it is so unsafe.  Bugfix.
  • Add EX Electric Shock, possibly allows juggles afterward, certainly safer on block than the Fierce version.  Buff, and strange that he hasn't got it to start with.
  • There's not a lot else I can think of to buff for Necro that wouldn't immediately make him crazy good.  He has crouching Short xx Jab Tornado Hook to be safe on block and hitconfirm into super, and giving him a cancellable crouching Forward would be insane.
Alex:
  • Change Hyper Bomb (SAI) startup from 0+1 to 1+0, so the total startup time is unchanged but it can't be jumped on reaction after the superflash.  Make it slightly more useful.  POSSIBLY reduce the damage a tiny bit unless it is the Backdrop Bomb (back-turned version) to compensate.
  • Increase forward movement on Boomerang Raid's middle hits, and increase the range on the final grab, to prevent the grab from whiffing after the rest of the super has connected at medium range.  Bugfix.
  • Make all versions of Air Knee Smash not air-parryable; EX version is still ground parryable.  Bugfix. The L/M/H versions can't even hit grounded characters so they are supposed to be antiairs, but being parryable makes them all horrible.  Shootdown Backbreaker is not air-parryable, and this gives Alex standing Strong xx Air Knee Smash vs air parry-happy players.
  • Increase the cancel window for his Target Combo (cr.Short->cr.Fwd) to be longer than 1f, so that it can be done as easily as any other Target Combo in the game.  Bugfix.
  • Allow juggles after Flash Chops that connect vs airborne opponents.  Bugfix, and situational anyway.
  • Allow crouching Strong (2MP) to be special- and super-cancelled on hit/block/parry.  Buff, he sorely needs this.
  • Allow crouching Forward (2MK) to be super-cancelled on hit/block/parry, including when used as part of his Target Combo.  This and the cr.Strong change will make him miles better.
  • Fix Air Stampede ("stomp", [2]8K) not knocking down if it hits a limb-hurtbox rather than a body hurtbox.  Bugfix.
  • Fix the position of the anchor point and pushbox for his air knockdown animation to allow juggles to work properly on him.  Bugfix and stealth nerf, he's pretty much the only character with this much of a problem and it gets him out of a lot of things for free.  Elena has a weird offset but it's just visual for her, the juggles still work.
  • Fix position of hitboxes on j.D+Fierce (j.2HP) dive, to place them on his arms instead of his chest.  Bugfix.
Hugo:
  • Allow Monster Lariat (236+K) to be super-cancelled on hit, and allow supers to juggle after it.  Megaton Press is his least-used super, this would provide a reason to pick it by giving you crouching Short xx Monster Lariat xx Megaton, whereas Hammer Mountain Frenzy would not fully connect.
  • Decrease startup of EX Giant Palm Bomber (63214PP) from 22f to 17f, the same as the Jab version. Give him ANY reason to use it!  :^P
  • Increase hitstun of crouching .Jab (2LP) and crouching Short (2LK) by 1-2f, to allow combos to EX Monster Lariat from farther away.  It's pretty much his only confirm option, but is randomly blockable depending on distance.
  • Add EX Shootdown Backbreaker, which allows juggles afterwards like his 2i version; distance can be controlled with LK+MK / MK+HK / LK+HK. Improvement, his other EXs are pretty situational.
  • Reduce startup of L/M/H Meat Squasher (360K) from 21/31/44 to 18/24/30; reduce recovery on whiff from 30/33/36 to 26/29/32.  It may still not be useful, but at least it'll be less "never-ever-ever use it".
  • Fix the wrongly-offset hitboxes on frame 1 of his landing-from-air-hitstun.  Bugfix.
Q:
  • Allow crouching Jab, standing Short, and crouching Short to be special- and super-cancelled on hit/block/parry.
  • Allow crouching Forward to be super-cancelled on hit/block/parry.  These sound like a lot, but Ken (and now Elena) have way more options.  Q could use at least this.
  • Allow all overhead/low rushpunches ([4]6P/K/[P]) to be super-cancelled on hit/block/parry.  Make the riskier versions at least AS useful as the safe version.
  • Decrease the startup of far standing Jab from 6f to 4f.  It's not a super amazing move and this will help some of his problem matchups, like Akuma, quite a bit.
  • Extend the cancel window on B+RH (4HK) past the first active frame, so it can be cancelled from further away.  Bugfix.
  • Increase hitstun on crouching Short, crouching Forward, and standing Roundhouse so they are not negative on hit.  Bugfix.  Standing Roundhouse is -10 on hit, for goodness' sake.
  • Change opponent's movement when juggled with the middle hits of all High Speed Barrage ("slaps") versions, so that all of the hits will connect from more ranges and at more heights.  Bugfix.
  • Extend hitbox of first hit of EX High Speed Barrage downward so that it more consistently connects against crouching characters.
  • Add EX (PP) version of Total Destruction (SAIII) which immediately does the grab part upon activation, as with Oro's Kishi Riki.  Let's imagine we want this super to be useful.
  • Do not allow the punch version of Total Destruction to trade hits.  Bugfix, which occasionally causes Q to die.
  • Allow Q to deactivate Total Destruction by entering QCT+P while the super is active.  It might not be used, but most other timer-based things got it.
  • Decrease health bonus for having 1-3 Personal Actions (taunts) from 1200 health base/1400/1705/2050 to 1200 health base/1400/1600/1800.  To compensate for him being a decent character, need to slightly reduce his 200% health bonus for 3 taunts.
Remy:
  • Stun bar increased to "regular" size instead of "short" size.  I assume this was because he's supposed to be a zoner, but there's no reason for him to be a higher-risk character this way with how bad zoning ended up being in 3s.
  • Increase damage of crouching Strong by 6pt to almost match Ryu's.  It seriously does the wrong amount of damage.
  • Fix the earlier hitboxes on close Fierce to knock down vs airborne opponents like the later hitboxes do, rather than have them land standing; allow juggles afterward.  Bugfix, give him a consistent ability to use this move as antiair.
  • Increase hitstun of far Forward, far Roundhouse, crouching Forward, and Towards+Forward (6MK) so that they are not negative on hit.  Being punishable by Houyoku-sen after hitting Chun-Li with all these moves is seriously wrong.
  • Decrease grounded opponent knockback on standing Forward (MK), enlarge hitboxes on 2nd hit of Target Combo (standing Forward->RH) so that it connects on everyone standing and most people crouching.  Bugfix, it completely whiffs against Yun/Yang/etc at point blank when standing...how useless...
  • Allow chaining from crouching Jab->crouching Short and crouching Short->crouching Jab.  Give him some kind of low confirm, since he has to be charging already in order to use it.
  • Decrease total length of Personal Action (taunt) from 131f to ~80f.  Still situational, but no longer entirely impractical.  Makoto's is 83f or so.
  • Increase meter gain from all Light of Virtues on startup/hit/block from 0/1/1 to 1/3/2.  Give his projectile meter for executing it, and more meter when it connects, to help his zoning be actually useful.
  • Allow all strengths of Rising Rage Flash to be super-cancelled on hit/block/parry; allow juggles after all versions of Rising Rage Flash.  Make the risky reversal more useful, allow juggles in situations where it hits vs high airborne opponents.
  • Increase hit advantage of Short/Forward Cold Blue Kicks (63214K) so they are not negative on hit from up close; make Forward version +2 so that supers can be linked off it at point-blank.  Bugfix, and buffs.
  • Remove superflash on activation of Blue Nocturne (SAIII) pose, only show the superflash after it successfully counters something; still always spends the meter but not on activation, only on successful counter/recovery from pose/being thrown; increase bar length by a bit; make it properly juggle/knock down vs air.  Bugfixes, let's make it a real freakin' counter super.
Twel(e)ve:
  • Health increased from 1050 to 1120, the same as Sean/Remy/Necro/etc.
  • Increase hitstun on standing Strong, far Strong, standing Fierce, crouching Fierce, standing Short, standing Forward, standing Roundhouse, crouching Forward, and Back+Forward (4MK) so they are not negative on hit.  Really now...
  • Make crouching Strong and standing Forward only parryable high, not both ways; make crouching Fierce and Back+Forward (4MK) only parryable low, not both ways.  Bugfixes/buffs, depending on how you look at the moves.
  • Activate the earlier hitboxes in Back+Forward (4MK) that exist but cannot connect.  Bugfix.  The hit spark is positioned as if the earlier low hitboxes are supposed to connect, but they can't for some reason.
  • Allow far Strong, standing Strong, and crouching Strong to be special- and super-cancelled on hit/block/parry.
  • Allow crouching Strong to be superjump-cancelled on hit/block, like standing Forward, so that he has more options into X.F.L.A.T.
  • Allow crouching Forward to be super-cancelled on hit/block/parry.  Why is he SO limited?!
  • Increase hit and block advantage of Jab A.X.E. (214LP) so that it is at most -1 or -2 on block.  He has nothing even close to safe...
  • Allow all air normals to be special-cancelled on hit/block into A.X.E. (j.214P) or D.R.A. (j.214K) and super-cancelled into X.F.L.A.T (SAII).  Air mobility is his "thing", why not let it go a bit further...
  • Change opponent trajectory when juggled with X.N.D.L. to drag them down so that more hits of it will make contact if they are hit higher up.  Bugfix.
  • Remove low-damage air-to-air version of X.F.L.A.T., have it always do full damage even vs air; increase number of stocks to 2.  Justifiable buff, the air-to-air version is terrible.
  • During X.C.O.P.Y., allow Twelve to do EX moves, and maybe even the opponent's chosen super, by spending chunks of the remaining timer; reduce X.C.O.P.Y. startup from 12f to 1f so that comboing into and out of it is easier; when hit during X.C.O.P.Y.'s recovery, instead of taking increased damage, Twelve now takes 66% damage.
Sean:
  • Increase hitstun of close and far Fierce, crouching Fierce, standing Forward, far Roundhouse, crouching Forward, and Towards+Fierce (6HP) to not be negative on hit.  Bugfixes.
  • Allow Sean Roll (214P) to be super-cancelled during the middle.  Pretty useless move right now.
  • Decrease the startup of L/M/H Ryuubi Kyaku (236K) from all being 25f to 17/19/21f; make Roundhouse version knock down.  Currently they all have the same startup, which means parrying them is no different, and they basically all have the same use.
  • Increase hit advantage of L/M versions of Ryuubi Kyaku (236K), to allow links to supers after hitting. Currently they are all negative on hit.
  • Decrease the startup of all Tackles so that cr.Fwd xx Jab Tackle combos, standing/crouching Fierce xx Strong Tackle combos, and Fierce Tackle is 1f away from comboing in that situation.
  • Allow Fierce Tackle to be faked/cancelled by tapping K during startup.
  • Make Fierce and EX Tackles un-ground-parryable.  
  • Change EX Tackle (236PP~P) so that the hitbox is active from 8f-end and it will automatically grab whenever it reaches the opponent; allow EX Tackle to be super-cancelled on the last hit.  Tackle is also pretty crap, it's very unique so how about we make it a move he wants to choose, instead.
  • Reduce startup of L/M/H/EX Dragon Smash (623P) from 5/5/9/8f to 3/4/5/3f.  Somewhere between Ken and Ryu.
  • Fix Hyper Tornado (SAIII) so that it juggles properly vs airborne opponents.  If Goodnight Sugah in MvC2 can do it, surely Hyper Tornado can.
  • Decrease recovery on Hadou Burst from 61f to 51f.  Still unsafe, but a bit more setup time on hit.
  • I would have suggested replacing his Fierce/EX DP animation with the extra-hit dunk he had in Second Impact, but I don't know how possible that is to actually do.

Additional Bugfixes:


Make All Successful Throws Invincible for the Entire Animation - It can cause bad situations or bugs when characters are hit out of a successful throw animation, like the Remy/Urien glitch or the Q throw bug.  It's also good game design.

Fix Bug Where Characters Are Allowed To Move During The Opponent's Superflash - A rare bug that occurs if you interact with a projectile on the same frame your opponent's superflash starts. I've seen it happen in real matches, so it deserves to be fixed.

Allow Universal Overheads (MP+MK) and Personal Actions (HP+HK) to be Done While Holding Away or Towards  - Bugfix, it only works for throws. There's really no reason for this not to be possible, and it might open up some new kara-overhead options like Ryu Towards+Fierce.

Fix Bug Where Some Characters Can Attack Immediately After Teching Air Throws - Makoto, etc.  Self-explanatory.


Fix Rare Move Interaction Bugs - X.F.L.A.T. vs EX Yagyou Dama / Aegis Reflector / Tengu Stone, Critical Combo Attack / Deadly Double Combination vs Magnetic Storm, etc.  Fix soft-lock conditions or other serious problems.  Not fixing being able to OTG Dudley or Hugo with certain supers after being thrown, as all of those are rollable.

Characters Passing Through Each Other - NOT FIXABLE - Interactions such as Makoto's EX Hayate vs Chun Li's dash, or Chun Li's dash vs Yun's dash / lunge punch...are unfortunately not able to be fixed without a major rewrite of the collision system to make it "continuous collision".  As this would change the game significantly, I would rather leave them as they are.  At least it's very limited circumstances...

Move Motions - If I had my way, all special moves that are half-circle motions (41236 or 63214) would be replaced with quarter-circle motions, either on the same button if there is no overlapping special move or on another button if there is an overlapping special move.  Akuma's red fireball might stay a half-circle, but that's all.  There's no reason Karakusa/Machine Gun Blow/Ducking/Cross Counter/Capture&Deadly Blow/etc should require half-circle motions when there is no corresponding quarter-circle motion to distinguish them from.  Inputting a half-circle would still work, since it contains the quarter-circle.

--

This was pretty in-depth, but I take this kind of stuff in game design seriously.  Even if there is no chance in hell of ever actually making this, I treated it as if I were.

Special thanks to Alex Sanchez for proofreading.

Saturday, November 7, 2015

Follow your dreams, but don't ignore reality.

A few days ago our sink overflowed, and I couldn't fix it*.  When the plumber came, we ended up talking and he told me about his teenage son, who wants to be a pro gamer.  That's awesome, and I applaud the dedication and drive!  But then he told me that, as a result, his son was considering not attending college to focus on his gaming career.

This post is for his son, or anyone considering making a similar decision.

Having a dream is wonderful thing!  Work tirelessly, overcome obstacles, and if you achieve it you will feel more fulfilled than I can describe in words.  I know, because my parents encouraged me to chase my dreams - and I caught a few.  You may reach your goal and never look back, but life is an unpredictable thing, and it is unwise to forget that.

When deciding whether to bring an umbrella, a coat, or any other preparation for adverse conditions, my grandma always said, "It is better to have it and not need it, than need it and not have it."  The same applies to (for lack of a better phrase) "marketable life skills" such as a college education.

An eSports career starts young and ends young.  What will you do after it ends?  Comparing eSports to Olympic athletes, the majority of pro gamers are like gymnasts or figure skaters, who train from a young age and whose relevant competition years end well before they are 35.  Reflexes wane, and there is only so much one can age before experience will no longer compensate for the loss of ability.  Afterward, there may be the possibility of coaching or other jobs associated with the sport, but there are only so many coaches, and not everyone likes those jobs.  I have seen pro gamers with no other life experience go on to take regular minimum-wage service jobs, and that sucks.  Consider, instead, athletes like bobsledders or ski jumpers, many of whom have lives and careers outside of their sport.  They train regularly, and may even win Olympic gold, but during the off-season they are teachers, lawyers, etc.  When they get older they have the ability to survive without depending on the sport.

Attending college is a preparation for adulthood.  Being accepted into college is a privilege that not everyone has, and not everyone who enrolls will graduate.  It takes work.  The reason many jobs require a college degree, and don't necessarily care which subject you earned it in, is that having a college degree proves you can stick to something, through difficulties and setbacks, for multiple years until you accomplish your goal.  You can still compete in games while attending college, and at the end of those years you will have skills to fall back on, in addition to your gaming career.

SonicFox, a close friend of mine and one of the world's best Mortal Kombat X players, won over $100,000 by playing games this year.  He won the ESL online MKX tournament, and won MKX at Evolution, the world's largest fighting game tournament.  He is also taking multiple AP classes in high school, and applying to several colleges with his top choice already picked out.  He knows that his gaming career won't last forever, and he also knows what he wants to do after it's over.

If you are able to go to college, GO TO COLLEGE.  Your dreams will come with you.

--

* If you don't know the basics of unclogging a sink, fixing a toilet, or changing a tire, I say go learn.  All of them are useful skills that will save you and your loved ones multiple expenses throughout your life.  But when you can't do it yourself, call a professional!  Don't try something you're not sure about.

Monday, June 8, 2015

Lab Zero Stick Driver Input Lag Test, Part 2: PS3 vs PS4!

This time I did a much better test:  the first frame of Parasoul's s.LP, which is a large difference from her idle stance immediately, and is not affected by frameskip.

It's on my same laggy television, so again, the important part is the difference between the scores, not the scores themselves.

All tests performed at 720p on Class Notes, with the reported time being the difference between the first frame my finger touches the button in any way, to the first frame anything onscreen changes with Parasoul.

Remember! The results are in 120FPS frames, so 2 captured frames = 1 fighting game "frame".

---------------------------------------------------------
Lag Test 2, Parasoul s.LP 1st Frame
---------------------------------------------------------

PS3, TE:
button + 15
button + 13
button + 13
button + 14
button + 15
button + 15
button + 14
button + 15
Average: 14.25  (7.125 frames in fighting game terms)

PS3, DS3:
button + 13
button + 13
button + 12
button + 13
button + 13
button + 11   <- outlier, the reason the average is lower than the DS4
button + 13
button + 14
Average: 12.75  (6.375 frames in fighting game terms)

PS4, TE:
button + 15
button + 14
button + 14
button + 13
button + 13
button + 15
button + 15
button + 15
Average: 14.25 (!)  (7.125 frames in fighting game terms, same as PS3)

PS4, DS4:
button + 13
button + 14
button + 13
button + 13
button + 12
button + 14
button + 13
button + 13
Average: 13.125  (6.5625 frames in fighting game terms)

---------------------------------------------------------
Conclusion:
---------------------------------------------------------
On both platforms the TE is 1f slower than either the DS3 or DS4, and because that is native input on the PS3 that implies the TE itself is slower.  This is consistent with other results.  
But there is no input lag difference between PS3 and PS4 Skullgirls, or between the Lab Zero stick driver and a native controller.

Yay? Yay!

---------------------------------------------------------
Want To Check My Work?
---------------------------------------------------------

Thursday, June 4, 2015

Lab Zero PS3->PS4 Stick Driver Lag Test

I did a more comprehensive test, check it out here:

http://mikezsez.blogspot.com/2015/06/lab-zero-stick-driver-input-lag-test.html


I just did input lag tests in the PS4 development version of Skullgirls with my 120fps camera, because I'm home sick today and what else do you do when you're sick, right? :^)

-----------------
Button press to horn appearance for Big Band s.LP.
-----------------
Performed on a laggy television, but the same laggy television was used for both tests. The tests were recorded during the same round, heh.

Recorded at 120FPS, meaning 2 captured frames is 1/60th of a second, or "1 frame" in fighting game terms.

What matters is the difference in timing, not the timing itself.

-----------------
Mumbo Jumbo
-----------------
The game has frameskip, it skips every 7th frame, which is why the timings can vary by up to 2 captured frames (1/60th sec) - occasionally one game frame will not be displayed, visually shortening the move's startup by 1/60th of a second.

The horn doesn't appear on the first frame of his s.LP, it's just the most noticeable change so I used that as the benchmark, which is why frameskip even matters.

-----------------
Raw data at 120fps
-----------------
DualShock 4:
button press + 14f
button press + 15f
button press + 14f
button press + 15f
button press + 16f

PS3 MadCatz TE (Round 1) using the Lab Zero stick driver:
button press + 16f
button press + 18f
button press + 15f
button press + 16f
button press + 15f

-----------------
Conclusion
-----------------
TE is 1 to 2 captured frames slower, which in fighting game terms is "1 frame" slower.
Not bad, but not perfect. Right?

BUT!
Check out this page: http://www.teyah.net/sticklag/results.html
(Thanks Teyah!)

According to that, the TE itself is around 1 frame slower than the DualShock 4. Possibly more, since the DS4 in this case is interacting with a PS4 instead of a PS3, which improves the response time*, whereas the TE doesn't get any kind of hardware boost.

Meaning the Lab Zero stick driver likely introduces no lag, and at worst introduces 1 frame.
Tada!

* According to Teyah's page, the DS4 is ~9ms faster on PS4 compared to PS3.