December 6, 2016 ryanjuckett No comments

Rollback Networking in INVERSUS

INVERSUS is a fast-paced shared-screen multiplayer game for up to four players. It is the type of game that would traditionally be local-multiplayer, and for a long time I thought latency issues would make it a poor candidate for online. Late in development, I committed to adding online support with the mindset that a “playable but inferior” experience would be better than nothing, but I ended up with something hard to differentiate from its local counterpart! While the subject of networking can cover everything from matchmaking, to choosing a map, and finally playing the game, I’m only going to be discussing the gameplay portion. I want to break down how I made the split-second actions of INVERSUS into a polished online experience.

Overview

INVERSUS uses a peer-to-peer rollback system. Before getting into the implementation details, let’s review how rollback networking functions at a high-level.

Rollback networking an evolution of synchronous networking systems where every player would send input commands to every other player. In these systems, a deterministic game simulation would advance one frame every time it had received commands from each peer. This architecture had numerous benefits, but one huge caveat that drove action games away from it: input latency. In order to allow time for receiving remote player input, the local input wouldn’t be injected into the simulation for a number of frames equal to the transfer speed.

synchronousinput

Rollback fixes the latency issue by processing local inputs immediately while predicting the remote inputs. When the actual remote inputs arrive over the network, it checks if anything was mispredicted. If a misprediction was found, time will be rewound to the mispredicted frame and then simulated back to the present using the corrected input values and further predicted values. This rollback and correction process all happens in the span of a single frame such that user only sees a slight pop in the results.rollbackinput

As network latency increases, visual pops in motion will increase, but they will only be in relation to direct effects of remote player input. For example, the launching of a projectile might skip the first couple frames, but once the projectile is in flight it can be reacted to exactly as if it were in a local multiplayer game.

Rollback networking is designed to create a near zero latency experience for the local user and fair conflict resolution because every participant’s inputs are respected. When you move, you move right away. If you press a button on a specific frame to counter an attack, you will counter the attack. This architecture also creates a minimal overlap in which game and network code need to consider one another. When adding features to the game, there is almost zero concern about networking. Everything just works and that’s a rather freeing experience for the engineer.

The main downsides of rollback are that it does not easily support joining in-progress matches, and it does not scale to large player counts. It also doesn’t support a variable frame rate simulation, but I’ll discuss how it can still support variable frame rate rendering later.

Rollback is perfect for fast, twitchy, frame-accurate games that require responsive input and have short gameplay rounds. It is the standard approach for modern fighting games and should be the standard approach for any quick round-based game with direct player interaction.

Continue reading

October 19, 2016 ryanjuckett No comments

INVERSUS Newsletter – October 19, 2016

Here’s the latest edition of the INVERSUS Newsletter!

Today marks the third big INVERSUS update on Steam with version 1.3.0. The PS4 update will be coming soon after. Let’s dig into the highlights!

Online Multiplayer Refined

INVERSUS has competition at its core and today we’re making big strides towards getting players in matches more often and across more varied game modes!

Let’s talk about 2v2 battles. In the past, you could enter 2v2 as a solo player or by first making a team with a friend, but these two groups were matched up separately – solos could only match with solos and teams could only fight other teams. With the new patch, solo players and grouped teams can mix into the same 2v2 game. This means more matches for everyone!

Continuing with 2v2 improvements, I’m happy to announce that INVERSUS now supports multiple local players joining an online game! You and a friend can team up on the couch, enter matchmaking from the same computer and fight other players online. In private 2v2 games you can mix local players and online friends in any combination — even three players at your house playing with one player at a friend’s house.

The 1.3 update also changes the cadence of how public matches are played. In the past, you would search for players until the lobby was full. Then you would play continuously with that group until someone dropped out. Games would often last a long time and both players would generally leave in unison. This made it hard to find a match if you joined while all existing lobbies were full. You’ll now get prompted to search for a new opponent after every couple maps in a public game. This will either find any stragglers or rematch with your opponent for another bout.

If you want to see how all this works in practice, check out the demo video here:

IndieCade 2016

INVERSUS was on display in Los Angeles this past weekend at IndieCade! The game was setup in a theater as University of Southern California and part of a small tournament. Thank you everyone that showed up!

20% off on Steam

In celebration of the new update, INVERSUS is currently 20% off on Steam for one week! Spread the word and lets play some 2v2 matches!

 

September 16, 2016 ryanjuckett No comments

INVERSUS Newsletter – Sep 16, 2016

Here’s the latest edition of the INVERSUS Newsletter!

Lots of new features. Lots.

INVERSUS has bee getting a steady stream of patches since it launched one month ago. Today marks the release of 1.2.0 on Steam. So what’s all this new stuff?

Let’s start out with the 1.1.0 update that hit Steam and PS4 a couple weeks back:

  • A brand new seventh arcade map was added.
  • Players can now play single player arcade games while waiting for an online match. After the online battle is over, the single player arcade game is restored right where you left it!
  • Improved world wide matchmaking.

Now for today’s update (out on PC and coming to PS4 soon):

  • INVERSUS isn’t just black and white anymore. 45 unlockable color palettes are now in game! Choose the ones you like and the game will randomly shuffle between them every match.
  • Online gameplay gets more social with over 250 unlockable emotes! Equip up to four at a time and express your joy or disappointment between rounds.
  • Experience levels are tracked for arcade and versus mode. Level up by completing matches, winning games online and earning high scores. Your level is advertised in online lobbies and each level gained guarantees an unlocked emote or color after that match (unlocks are otherwise randomly awarded per match).
  • New leaderboards for versus levels, arcade level, and number of games won online.
  • Improved public matchmaking allows solo players to search across all game modes at the same time!

Showing to the World

Being part of the PAX10 at the start of the month went great. Check out that picture to the right of INVERSUS being played in the Omegathon!

INVERSUS was also recently in Busan, South Korea as part of BICFest. Unfortunately I didn’t get to go.

It would have been great to go to Tokyo Game Show this past week. If only I had known all the top PS4 players would be from Japan!

There are some more show dates forthcoming that I can’t announce yet so keep an eye out on twitter and elsewhere. (I try not to spam this list with small details).

The INVERSUS 4-Pack

You can now buy 4 Steam keys for the price of 3 over at inversusgame.com. If you’re looking to hop online with a group of friends, this the best way to get in.

August 16, 2016 ryanjuckett No comments

INVERSUS Newsletter – Aug 16, 2016

Here’s the latest edition of the INVERSUS Newsletter!

The first newsletter I sent out was in August of last year. I’m happy to mark the anniversary by saying that INVERSUS is out now! Reviews are popping up left and right online. Destructoid gave it a 9.5! Grab a copy and tell your friends!

Where to Buy

For the PC players, you can pick up your Steam key at any of these spots:

Steam Storefront

inversusgame.com

Humble Store

For all of the PlayStation players out there, you can find INVERSUS on the PlayStation Store!

Soundtrack

Today is also launch day for the official INVERSUS soundtrack! It’s only €3.99 and available directly from Lyvo himself. Pick up a copy over at bandcamp or just about anywhere else you can buy music online.

Community

If you’re looking for a place to find and meet other players, I set up an official Discord server. Click here to join!

You can also visit the Steam Community Forums to discuss the game.

August 12, 2016 ryanjuckett No comments

Analog to Digital Input Translation

It’s common to use an analog input method (control stick, trigger button) to control a digital system. Maybe you want to control menus with an analog stick. Maybe you want to detect a tap or double-tap of the analog stick. Or, as is the focus of this article, maybe you want to fire a bullet with an analog trigger. Getting this right requires more subtlety than you might expect.

While INVERSUS isn’t shipping with shooting bound to an analog trigger, it did start out that way. You can get some insight into why I changed schemes in my article on the parry system (although it might merit its own article), but the important thing to make clear is that it wasn’t changed due to trigger feel; the triggers felt great.

Let’s assume we have successfully preprocessed our controller data and have a clean floating point value from 0.0 to 1.0 representing trigger pressure. Zero represents a released trigger and one represents a fully pressed trigger.

My specific goal was to implement a single-shot fire when the player pulled in the trigger, but I’m going to abstract that goal a bit. What I really want is to translate the analog button input into a digital button input. A digital button is either in a pressed state or a released state. If we can evaluate the same pressed/released status of an analog button then it should be easy to bind it to any game action that takes digital input. For shooting, we can fire the bullet when the state transitions from released to pressed.

So how do we translate our analog button to a digital button?

Continue reading

July 20, 2016 ryanjuckett No comments

INVERSUS Newsletter – July 20, 2016

Here’s the latest edition of the INVERSUS Newsletter!

Launch Time

INVERSUS launches on August 16th for $14.99 on PlayStation 4 and Steam! That’s like, crazy soon!

On top of that, if you’re waiting for the Steam version and just can’t wait one second more to get invested, you can pre-order now for 10% off at inversusgame.com or the Humble Store.

Before you go call all your friends and share the good news, I’ve also got two (yes two!) new game play videos to share!

Excited to fight your friends in versus mode? Check out the latest in INVERSUS competition:

Dying to master the arcade? Here’s the latest in co-op and single player action:

PAX West

Did you get your PAX tickets? INVERSUS will be there full force as part of the PAX 10! On top of being insanely excited to have gotten accepted, this will also be the first time showing the game after release. I look forward to taking off the training wheels and playing hard as everyone brings their A-game to the booth.

E3, BIG and EVO

So what about all that stuff that’s been happening since the last newsletter? For starters, E3 with IndieCade was amazing. It was full of new faces, fun matches. INVERSUS also had this amazing setup with a couch:

Right after E3 the game was shown in Brazil at the BIG Festival. I didn’t get to attend, but INVERSUS won the Innovation award! I also got to head to Vegas last weekend and demo at the EVO fighting game tournament. It was my first time at EVO, and getting to demo at an event all about competition was fantastic.

 

June 1, 2016 ryanjuckett No comments

INVERSUS Newsletter – June 1, 2016

Another edition of the INVERSUS Newsletter is out!

IndieCade @ E3 showcase

E3 is as big as it gets when it comes to game conventions and INVERSUS will be joining the party. Chosen from hundreds of applicants, the it is part of the IndieCade showcase. I’ll be flying down to Los Angeles to demo the game each day alongside a TV, four controllers and a couch. If you’re attending E3, I look forward to seeing you!

Indie MEGATRAILER @ E3

What if you are in Los Angeles, but don’t have an E3 badge? I’ve got you covered. INVERSUS will be freely playable for the public on Thursday June 16. The folks over at Indie MEGABOOTH will have a trailer set up just across the street from the convention in the Devolver Digital area. There are new games on display each day and you can check out the full schedule here.

BIG Festival 2016

I’ve shown the game all over the U.S. and it’s time to let it explore more of the world. From June 25th through July 3rd, INVERSUS will be showcased at the CCSP in São Paulo as part of Brazil’s Independent Games Festival. It’s also up for the Innovation award! I won’t be able to personally attend, but if any of you are there, be sure to tweet me some pictures!

MomoCon Winner

Just this past weekend INVERSUS was one of the five winners in the Indie Game Award Showcase at MomoCon. While I was here in Washington trying to finish up the game, judges from Kotaku, Destructoid, Geek & Sundry, and Vlambeer had a great time playing it. I’m flattered and will be making time to visit MomoCon next year!

The Game

We’re pretty deep into this thing and I haven’t even talked about the game itself.

If you follow @InversusGame on twitter, you’re well aware that I’ve been heads down in online multiplayer tech. I’m happy to say that the forecast is clear and sunny. Check out this online co-op! With the help of friends in Germany and Japan, I’ve been stress testing worst case lag scenarios. Week by week the experience is getting smoother. It’s finally fun from opposite sides of the world which is a huge feat given how fast paced and twitchy the gameplay is. While Mr. Physics and his so-called “speed of light,” won’t let it be perfect, by improving the worst case, I’ve made the average case hard to discern from a local match.

I’ve also been making a bunch of targeted adjustments to polish the core game. Maps are getting final tweaks. Particles are being added. Sounds effects are being punched up. Readability is being improved with enemies highlighting the board red in areas they might smash. And on and on.

March 31, 2016 ryanjuckett No comments

INVERSUS Newsletter – March 30, 2016

The latest edition of the INVERSUS Newsletter has hit the shelves.

Online Multiplayer

Everyone has been asking for it, and I’m excited to say that INVERSUS is going to ship with online multiplayer! You no longer need a group of friends on the couch to play competitively. Even more exciting, I’ve already got the core of it working on Steam. Click here if you want to see a gif recorded from the first online match. It uses a rollback system similar to a modern fighting games and already plays great!

All that said, there is some new work ahead. I need to get the networking functional on PS4, add support for friend invites, handle four player matches, and deal with tons of error cases. I also want to try online co-op arcade mode (fingers crossed)! As a result, the release date is getting pushed out to late summer. The wait will be well worth it, however, and I appreciate your patience.

PAX East 2016

PAX East is right around the corner, andINVERSUS will again be joining the Indie MEGABOOTH! I had a great turnout with IMB at PAX Prime last fall, and can’t wait to meet everyone on the east coast this time around.

If you’re attending, stop by, say hi, and play a few rounds. I’ll be there all three days. Check out some more of the IMB selection in the trailer below.

Best of the MIX

I got to show the game at IGN this month as part of the annual Media Indie Exchange event and it was a hit! Judges Mitch Dyer of IGN, Mary Kish of GameSpot, and Alex Austin of Cryptic Sea Studios put INVERSUS as runner up for best game out of nearly 50 titles.

Everything Else

What better way to finish this off than a list of random stuff that’s been happening?

  • SXSW was a blast. I got to show the game to tons of new people and even did a live broadcast demo on the Twitch.tv stage. If you missed out and want to see me try to function on camera, I also did this short video interview with Chris Watters of GameSpot.
  • I opened a new Twitter account specifically for the game that is easier to search for than the company account. You can follow @InversusGame.
  • PCGamer had some great things to say in their roundup of local multiplayer games they saw at GDC. “Inversus is one of those games you play for less than 30 seconds before you’re totally sold and mumble something like ‘oh [expletive], that’s cool’ and feel slightly ashamed about your own contributions to the world. “

We’ll talk again before E3,
– Ryan

March 24, 2016 ryanjuckett 10 comments

Interpreting Analog Sticks

When a game supports controllers, the player is likely using an analog stick at all times. Nailing the input processing can have a substantial impact on quality throughout the experience. Let’s walk through some core concepts along with examples from INVERSUS.

Inspection

Before tuning the analog stick, you need to know how it works. What is the hardware actually reporting when you move the stick around? Here’s what the stick inspection for INVERSUS looks like. I don’t claim this to be the best possible display, but all the conveyed information is important.

inspection_view

Before I cover each part in detail, let me present a high level overview. I was using an Xbox 360 controller attached to a PC. The top row represents stages of processing on the left stick. The bottom row is the right stick. You’ll notice that the top row has more data on display than the bottom row. This is because INVERSUS only uses the left stick and it gets special treatment. I’ll only talk about that top row from hear on, but everything still applies to the right stick for games that use it.

Continue reading

February 11, 2016 ryanjuckett No comments

INVERSUS Newsletter – February 11, 2016

The latest edition of the INVERSUS Newsletter has hit the shelves. Click here to read the full print or read below for the highlights.

PlayStation 4 Announcement!

As of this morning, INVERSUS has officially been announced for PlayStation 4 and will be available for download on launch day. I got to write up a post for the PlayStation blog introducing everyone to the game. You can check it out here.

Steam Store

I’ve graduated from the old Steam Greenlight page to anofficial store page! You can click on that link to follow the game on Steam and pick it up the moment it’s released. Steam also creates their community hub for every game so INVERSUS now has Steam discussion boards and everything else. They haven’t really kicked off yet, but they are there and ready for when the game launches.

Trailer and Soundtrack

In preparation for the PS4 announcement, I updated the trailer (see below). I kept the message but polished it all up a bit and replaced all the gameplay and music.

First off, the music in the trailer is now actually pulled from a track that will ship with the game. I was previously using some free music byLyvo and when I contacted him about it he was really interested in writing something custom. Many months later, we now have a finished soundtrack which really keeps the energy up in game!

You might also notice some new levels and 2v2 versus battles in the trailer. The 2v2 mode is a huge hit when testing and leads to some great variety in chaos and tense comeback plays.

SXSW Nominee

Last month’s visit to Washington D.C. for Indie Arcade was a big success. Close to 12,000 people showed up. Next month, I’m heading back to Austin, TX for SXSW because INVERSUS is nominated for the Gamer’s Voice Multiplayer Award!

The SXSW gaming expo is free and open to the public from March 17 – 19 so come check it out if you can. Head to http://www.sxsw.com/exhibitions/gaming-expo for more info.