For people new here, I’m Roel an independent game developer focusing on making couch multiplayer games. The best gaming memories I have is with friends, some drinks, snacks and loads of yelling which is what I try to give to others by making games that facilitate such play. But as everyone is, hopefully, aware that at the time of writing we have a pandemic on our hands. And due to that I don’t think it’s a shock to anyone that with the current state of the world people aren’t coming together to play games in the same room much.
This is an obvious issue for someone making games that try to bring people together.
Normally when I need people to help me test my games I can simply ask friends, relatives and people around my village. This often results me getting invited to game nights, small parties or in rare occasions some events where I can set up the game I’m testing and see how people react. But in the Netherlands events are banned, you aren’t allowed to come together with more than 2 people, unless you’re living together, and even then you need to keep your distance.
Essentially the Dutch government banned me from testing my games the way I do normally or risk a 300 euro fine, not exactly great. Game nights are banned, parties are banned and events are banned. So when I wanted to do a playtest run for Bombs Away a week after the Corona restrictions where put in place I ran in a problem, no access to testers. While some people still offered to playtest the game at their game nights I can’t in good faith allow them to, it’s great that they want to help but breaking laws designed to limit the spread of a dangerous virus is a bit of a no-no to me. Beyond that I thought of letting people with a large household test it, but while this would be fine I don’t think this is a good long term option.
So I needed to find a way to at least test Bombs Away without people getting together, an obvious choice would be adding online functionality though seeing as I work alone and have no clue where to start with things like netcode I chose to look elsewhere. However I couldn’t come up with a good idea, until someone pointed me to Parsec. Parsec essentially streams the game to other players from the host player and sends back input commands from those other players. This creates a nice low barrier to entry to have friends play the games you own (and if they like it buy their own copy to play with different friends). Beyond that Parsec doesn’t need you to tinker with netcode, supports Rewired, a large community of players and has low latency.
>Skip this section if you don’t want nerd talk:
Implementing Parsec was quite easy simply getting your game to work with it is almost as simple as copying the files from the example project and editing them a little to fit with your game, especially if you’re using Rewired. To get some very basic functionality working you can simply add and change the action names in the example ones in your game.
Doing anything more complex then simply having online player function as a local player is a lot harder though. For example in Bombs Away I use a “press A to join” system for controllers, this means rather then a controller being directly associated with an in-game player I have to make the connection that can switch during use. Well when dealing with parsec a online player is assigned the first free controller for online use and then based on the join menu assigned to a in-game player. This is all fine and dandy until an online player disconnects.
Parsec has a specific function that is called when someone is connecting or disconnects, this only gives me their online ID number, but due to them being given an unknown controller and can be any in-game player this gives some issues. Within Bombs Away ever in-game player has either directly or indirectly a controller associated with it, this means I can ignore their in-game player ID or easily fetch it. However however that still means it is impossible to easily get an controller ID, and by extension in-game Player ID, from their online ID. To circumvent this issue I created an class that creates a list with an online ID and their respective controller ID which is updated every time someone gets an online controller associated with them or disconnects. I feel like this method of maintaining which online player is which in-game player is a bit to over engineered.
Beyond that there as some relative minor issues with implementing parsec and rewired, like when disabling controls when the game is not in focus. This gave me many hours of debugging and asking for help in the Parsec SDK Discord only to find out it was a simple toggle in rewired. (Thanks Skippy)
All in all Parsec is great it’s just that their implementation of Rewired isn’t ideal and has little support in my experience. Especially if your use of rewired is more involved than simply managing controller inputs.
>Nerd talk over.
Well so what do I do now, I still can’t go to people to see how they react and interact with the game. However with Parsec I can test at pretty much every time I’d like. I’d simply need to give people a link and then they can play. I’ve already done some rudimentary play tests with friends and found some obvious balancing issues which have since been fixed. Furthermore I can now much more easily plan open playtests either by making it a public game in Parsec Arcade or posting a link to the game somewhere online, this way I’ll also get more people to play. And of course Bombs Away will try to keep having Parsec in the game at release so that everyone can set up their own game sessions with friends.
If someone is interested in playing the game now, shoot me a message on social media and we can work something out.
If you want to know more about Bombs Away and future projects or to be notified of any news around me, feel free to follow me on twitter (@GamesAndCompani), Facebook (GamesAndCompany) or Instagram (GamesAndCompany). I’ll try to keep it updated and post new stuff on Bombs Away and future projects. And if you want to be part of any future playtests and big news regarding Bombs Away and future projects keep an eye out on the before mentioned social media channels or subscribe to the mailinglist here.