Desyncs and FPU synchronization.

If you’ve ever written anything that tries to keep perfect synchronization across systems, odds are pretty good you’ve run into desyncs. Some of them sensible, some of them leading to weeks of hair pulling.

And of course, the most obtuse and unexpected one of all is dealing with floating point issues, where a single off-by-0.000000001 error will snowball up into something much larger in a quick hurry. Traditional wisdom has just been to not use floating point math for anything related to logic, but this is not practical in every situation.

It turns out that’s not entirely true and perfect synchronization is attainable, if you understand the pitfalls that are in place. Warning: This gets fairly technical.

Read more »

Understanding Fighting Game Networking

So earlier today I was talking with Zinac about timing and synchronization issues in fighting games. More specifically, the cases that need to be handled with respect to packet loss and frame loss. These are actually very different things!

Then it occurred to me that I haven’t actually written an article on how fighting game netplay really works at a nuts and bolts level, and so here we are.

Read more »

Retrospective: Hellsinker Translation Development

So I volunteered to work on a translation for Hellsinker, a game by Ruminant’s Whimper.

“It’s just a shmup, how difficult could hacking it be?”

Famous last words.

It finally got released, and you can get v1.1 over here. It fixes a few minor issues over the initial release. Check it out. Huge huge huge thanks to Nazerine and Halbarad for doing the translation and image editing respectively.

Warning: Spoilers and technical babble ahead! Do not read if you don’t want them.

Also, brace yourself. This is going to be a long one.

Read more »

How I didn’t clip the sound effects.

As a certain recently released fighting game added rollbacks and then completely screwed up the ability to handle sound effects, I think now’s a good time to go over how RollCaster‘s sound engine works.

Before I get in on it, I want to get something out of the way though. This process is not in any way CPU intensive and anyone claiming this sort of thing would be hugely draining on a computer’s resources just so happens to be full of crap.

The case of doing this in a modern game that is being run directly on the native system is often somewhat different from the case of an emulator running an old game, so GGPO itself is not perfectly applicable here. Namely, you have to deal with the sound APIs instead of just saving the state of everything, which is a somewhat more complicated affair.

Alright! So, with that done, let’s phrase the problem here.

Read more »

Investigating RollCaster’s Timing Issues

After finishing the desync fix I thought I had finally finished. Shortly after, a few Japanese guys tried it out and got back to me that the timing was unstable, causing the frame rate to jitter unnecessarily.

Sure, I thought, it can’t be that hard to fix.

This started a very long process which led me all over the codebase, analyzing every last part of the process involved in it, for over a month. I’m sure nearly everyone who put up with me begging for testing and putting out updates is sick of me by now!

Read more »

Investigating RollCaster’s Desyncs

So RollCaster has had a long-standing desync issue. This is a pretty minor thing as far as the Western player base is concerned, since the community don’t have a lot of players and it happens infrequently enough that it’s more a nuisance than anything else. They probably thought I was mad for attempting to fix it.

If I wasn’t before, I sure went mad trying!

I was moderately successful, and I’m not sure it’s even possible to be truly 100% on this one so I’m not going to worry about it too much. Instead I’ll discuss the origin, strategy used for finding it, the results, and a ridiculous case of coincidence that popped up.

Read more »