Since the discharge of the Guns of Icarus series on Steam and PC, we’ve been constantly updating the player revel. From the unique PvP most effective edition to Guns of Icarus Alliance, today’s complete edition with PvE and faction battle infused, we’ve discovered a ton over the last few years. Yet, at the very start, we had usually aimed to go past PC and take the sport to console. Bringing Guns of Icarus Alliance to the PlayStation Four became a dream we’d been running in the direction of since the beginning. Gaming on console has been, and nevertheless is, a substantial part of our lives, and we still get starry-eyed with the conclusion that our recreation will be on PS4. The adventure to get so far was winding and exhausting for us, studying and overcoming myriads of challenges. With the sport now set to launch on PS4, we wanted to take a chunk of time to reflect and share some of the training we learned in this adventure.
The foremost tenets of Guns of Icarus were teamwork and bringing people together. Therefore, pass-platform play changed into something we aspired to from the very start. Not only did we need people from the console and PC to play in the identical match, but we also desired them to communicate completely via all the approaches to be had, including voice, text, and command signals. Realizing the imaginative and prescient of absolutely included go-platform play – between PS4 and PC (Win/Mac/Linux) on Steam and different structures – brought about another set of novel demanding situations that we had to locate creative methods to conquer, as there hadn’t been precedents that we may want to comply with or emulate. The purpose of this write-up is to recount the distinctive units of issues – from cross-platform development, performance, and user interface concerns to the engine and platform-specific challenges – and summarize how we overcame them. Hopefully, this would be a beneficial reference for anyone embarking on multiplayer tasks and thinking about move-platform assist.
Limitations and Advantages
The choice to go pass-platform between console and PC changed into a complex one to make for any multiplayer identity. While our vision for the sport had guided us, this decision came with an extended listing of technical challenges. One lesson found that we couldn’t make layout adjustments impartial to the platform, which means that if we located demanding situations that had been one-of-a-kind for mouse and keyboard customers or discovered something turned into a commonplace convention on one platform now, not the other, we needed to find a unified solution that labored for each. This also restrained the way we resolve different issues, which includes performance. We realized that we needed to make a game optimized for two particular platforms. This meant that our technology needed to be bendy and that we couldn’t pass all in on any technology or hardware that wouldn’t exist on different systems. We essentially needed to optimize the game all over again for each platform we desired to launch on. For Guns of Icarus, shifting to console, we needed to take a step lower back and exchange some of the approaches we advanced new contents and functions.
Moreover, we did not have the freedom to push updates each time we felt love it, and we had to be careful, including features that failed to match on both structures. In addition, because our console odyssey took one of these long times, we needed to re-have a look at our UI/UX and make sizable redesigns with controller navigation in mind. This had outcomes in phrases of community and player reception; a part of our players who were used to or entrenched in our antique navigational go-with-the-flow did not take kindly in our redecorating efforts. The UI remodel then became a workout in network and crisis control.
With all this being stated, keeping a recreation pass-platform ultimately had some of the benefits as well. With Guns of Icarus, we had always pointed everyone from extraordinary areas or working systems to the equal match on the same server. For better or worse, we desired to make a case to bring players collectively in that way, so we’ve architected our backend to reflect that. By helping cross-platform for the console, this turned into merely a platform extension to our back give up. However, we believe maintaining an unmarried consumer base changed into generally notable for a sport. It becomes plenty simpler to hold one organization of active gamers than two. In any multiplayer assignment constructed on teamwork, letting players from one-of-a-kind platforms institution up and play may want to suggest more long-term and invested players. Cross-platform help also meant preserving a single version of the game instead of more than one discrete version that could probably be even more of a version manipulation nightmare. From our quiet, only having to hold one model of the sport became a huge benefit. We had been not balancing every object and map two times. We weren’t writing all our code twice, which changed into the same recreations.
Most importantly, though, doing cross-platform play turned into just gratifying. It was fantastic to see all the people playing together. Being capable of saying, “Come to play this game with me,” and no longer having to worry about having pals on specific systems changed into a dream come true for a terrific portion of players in our game.
Guns of Icarus began as a PC recreation (Windows, Mac, Linux) that integrated Steam’s API. Therefore, we implemented our chat on Steam’s Voice Chat gadget, completed through peer-to-peer networking. However, this voice device requires Steam jogging for all players and cannot be used for PS4 players.
PS4 has its own voice chat SDK. Unity wrapped it with Net Chat Plugin. It provided a few primary voice chat functions. However, it was no longer enough to cover all the voice chat capabilities Guns supplied. And the larger trouble became it cannot be used for PC gamers.
To support go-platform voice, the primary issue that got our thoughts was whether there might be a 3rd party voice chat solution that can paintings for both PC and PS4 players. Without it, we may want to assist both PC/PS4 players gambling together, but they cannot use voice chat to speak. Given the excessive demand for collaboration in the sport, it would not be ideal. Along the manner, we built contingencies, including a voice signaling/command device and an extra nuanced AI team command machine. However, those have been intended to be plan Bs, and the elusive grail of go-platform voice chat was what we had been after.
At the time, only a few more platform games and even fewer games supported players from each structure to play collectively, so we couldn’t locate how other games worked. There were no equipped-made third-celebration solutions, and our attempts to construct this voice chat bridge did not go far. The challenge was regarded as daunting to impossible for an extended time.
Last year, we located Photon Voice (evolved by Exit Games) as a voice chat answer that works on PC. Since we used Photon as our game server, we had a few who enjoyed it and knew its networking package works on PS4. We started talking with Photon’s group and discovered that this would be a way to make cross-platform voice a fact.
The bundle itself becomes quite straightforward to apply. However, Guns of Icarus’s existing voice chat gadget becomes complicated. We designed our in-healthy voice chat based on a multi-channel shape, taking a chunk of thought from the army. Crews onboard the same ship ought to speak to each other. Every ship’s captain had another channel to talk to other captains on the equal team. In this manner, we helped manage the drift of facts so players were not crushed and inundated with anybody’s voices, which would be relatively chaotic.
As a result, integration took us some time, as we had to guide players chatting with players within the identical suit foyer and players within the equal birthday party, which may be two exclusive groups of humans. Also, in the shape lobby, we supported fit chat, crew chat, captain chat, and group chat, and recipients had to know not the handiest who was speaking to me but which channel that player changed to use. These have been now not supported via the authentic code furnished by Photon Voice, so we tweaked some of its source code at a better level. The answer became bendy enough that we made it work precisely like Steam Voice, which worked cross-platform!
However, there was a caveat that we didn’t recognize till much later, determined via Sony’s meticulous FQA group, that PS4 gamers cannot output most of the chat audio to the headphones but retain the alternative song/sound to the TV. The feature becomes supported by Unity’s Net Chat Plugin by routing the incoming voice information to PS4’s voice tool. In contrast, Photon Voice dealt with the voice with Unity’s AudioSource magnificence so that the relaxation of the sounds inside the machine couldn’t separate them. This changed into something we pronounced to the Photon crew, and it became something that they had been actively running to assist. Hopefully, everyone using Photon as the solution will soon be able to navigate this trouble much less difficult. One super issue about diving into the unknown abyss was that we could work with extremely good people, including the Photon team, to enhance their product and platform. This turned into one of the more rewarding parts of our improvement.
The Bare Minimum: Getting the Game to Run on PS4
AoT Compilation Issues
Guns of Icarus had quite a few customary item instantiations (like List <X>) at runtime (the usage of System.Reflect), which induced us a ton of headaches because the PS4 didn’t have a real.Net runtime surroundings like PC, and might throw out a group of AoT compilation mistakes at runtime.
Our preliminary answer is to explicitly claim all those used general instructions in one of our scripts. So that Unity might know those classes exist and construct them well. However, there were so many of them, and it became very tough to list them all, not to mention making and retaining that List was extremely error susceptible.