× Phaseshift FCOM Tutorials

Phaseshift: Evolved is now online with 0.0.4.3!



Now featuring PvP multiplayer!

Prototyping online multiplayer solutions for PS:E! After much deliberation, Netcode for GameObjects was our choice with Lobby and Relay as authentication, parties and connection. This update took...a while. A lot of research was done on the types of service that would be best for PS:E. As it's a fast paced racing game, we would need something that was fast, could handle prediction, protected against cheating, and offered a strong experience for all parties. We also had to take into consideration our experience with building online multiplayer games, which was obviously nil. Thankfully my best friend is a network engineer and a handy devops technician (and a brilliant one!) and was on hand to provide advice. Time permitting he will also be providing assistance as when he can with all things online and server side.  

Netcode for GameObjects


After playing around with Photon Quantum, and other services, we decided to go with Netcode for GameObjects. This decision was made after playing around and coding in both, as well as their pricing structures. We found NGO far cheaper and more affordable in the long run, and the community support was far more accessible, with more tutorials available. There was also an issue with ability too, and we perhaps thought the learning curve at this stage was too steep for a data-driven entity based multiplayer engine. The physics engine for Photon Quantum was also vastly different, and was hard to capture the same feel as the initial prototype did. 

Getting the hang of how it worked was tough. I will admit, my head did not get around the whole RPC thing for a while. Am I sending this from the server to the client? Or is this being sent to the server? Yeah. Head was in a pickle. But like all things, the more you do it the more you get it. After integrating both Lobby and Relay, and creating some cool Party functionality with UI, we had some great looking Party features, with player names and character selection being automatically synced across the network. The host could then beam everyone into a game, with everyone able to drive around, positions being correctly calculated. 

The multiplayer menu with a party overlay. This overlay can be seen in session too.
The multiplayer menu with a party overlay. This overlay can be seen in session too.

The idea behind multiplayer both online and local is to create a seamless experience. The Party feature is to create a constant 'continuous flow' to gameplay sessions. Two games that spring to mind for cracking multiplayer features is Disney's Speedstorm (may have had a slight addiction to this more recently) and the old arcade game Hot Rod. Hot Rod especially has this continuous flow of gameplay, once you've finished one race, you dip into the garage, buy some upgrades and you're back out again on a new track. I want this for PS:E; the combination of the ease of parties found in Disney Speedstorm, and the continuous flow of gameplay and progression of Hot Rod. I have ideas on how to achieve this, but for now I will keep it to myself!

Going Forward


This was more of an exploration attempt into online multiplayer. We managed to get vehicles working in sync with each other, we could race, data was shared on each players preferences, and the party system worked great. This is bare bones for now, but we can expand and improve on the experience with future updates. For now we don't have a proper gameplay loop! This will be priority before concrete multiplayer. But for now, we know we can do it. 

Next, an issue with ever increasing compile times! I would like to work on improving tooling, data structures and getting that code compilation time down!

Online Multiplayerv0.0.4.3


Jun 2, 2025
  • Created a ClientStateHandler object that keeps track of each client's state, and shareable data
  • Created Party functionality, clients can join and leave using a quick join or join with code feature
  • Each client has their own version of a party overlay UI, to keep track on connected clients
  • Camera and UI prefabs now instantiate and initialise on session creation
  • Player objects are now created and built up at runtime
  • Built a customisable menu navigation framework with simple scene management
  • Player positions in game are synced across network, and host determines who is in what position
  • Played with server authoritative syncing and movement

Liked this article?

Please consider sharing!
Author

Josh Lyell

Game Developer

Other Combat Racing games

A futuristic bike races past a logo of the game titled Phaseshift

Phaseshift


Developer: Bubblehead Game Dev

Genres: Combat RacingRacingAction

Platforms: PC


Release date: Apr 8, 2022