Race to the Finish: A Developer's Tale of Elympics-Powered Racing Game
Take a speedy spin through the development of my retro online multiplayer car racing game, powered by Elympics. Let's explore the key highlights and lessons from my journey working with Unity and Elympics' out-of-the-box online multiplayer solution.
Updated: Sep 22, 2023
Published: Sep 20, 2023
Introduction
My retro car racing game in Unity was developed during the Elympics Summer Camp of 2023, an event that offered a guaranteed prize of 600 USD to all qualified entries. Additionally, Elympics provided hosting services worth 600 USD for each participating team. In this post-mortem, we'll delve into some key aspects of my development process.
Elympics - Out of the box Online Multiplayer
Elympics proved to be a straightforward solution for online multiplayer. Its integration into my project was hassle-free, saving time and effort for all the complexity involved with online multiplayer such as prediction, reconciliation, and state synchronization. This allowed me to focus on gameplay rather than wrestling with complex networking code.
I found the Elympics SDK to be excellent, and I even received praise from colleagues about the game's smooth net-code. They were surprised the collision worked, which I owe all to Elympics. I just added a Synchroniser component on the cars in Unity, and the SDK handles everything.
While the SDK is relatively new and has room for additional features and bug fixes, I believe their product is of great help to anyone who wants to create an online multiplayer game.
Elympics Support - Milestones and Feedback
Throughout my development journey, we benefited from Elympics' continuous support. All participants established three milestones, and after each one, the Elympics team provided invaluable feedback. Their advice guided us on what aspects to emphasize and what issues to address. This feedback loop greatly contributed to the success of my multiplayer implementation. They also provides great feedback on the Discord channel, and the community has been supportive and helpful.
Milestone 1
The summer camp started in July, and I knew that I had an upcoming game jam in August that I wanted to participate in as well, so I made sure to do as much as I could in the first milestone.
I started adding assets from Kenney, and created a simple race track.
I then added some color and environments
With this, I was already far ahead of the competition. I started to include some more assets, and the basics of multiplayer. It didn't take long to add support for two players, the Elympics SDK made sure of that.
In the below video, we have two players joining the same game, running in two different browser windows. This was the final result of milestone 1.
Milestone 2
Based on the feedback I got from the first milestone, I had a few points to focus on for the second:
- Sound effects
- Music
- Particle effects
- Countdown before the game starts
- Improve jitter/lag when driving
- Skid marks on the road
- Drive slower on grass
- Improve Main Menu screen, make it pretty
- Add circle indicator below own car
- Add shadow below car (making it easier to spot its position when jumping)
- Make the track course look more pretty
- Experiment with some shaders/lights to make the game more exciting
I started to create a new race track. The current one only had left turns. I needed one with a mix of right and left turns. I sketched some courses in my notebook, which is something I recommend everyone doing if they want to prototype quickly. Once satisfied, I ended up with a course with some jumps, left and right turns:
I created two separate blog posts about the skid marks and circle below car.
I focused on polish and fixing bugs, and made the game complete with a game loop, from joining a game to winning a race.
I got some comments about steering not beeing drifty enough, making it difficult to steer, so I made some improvements there too.
The final milestone
During the final milestone, the js13kgames competition started. At this point, I knew I wouldn't be able to add a lot more improvements to the game. I decided to focus on the main feedback I could fix quickly, and had the most impact. I got great feedback as always, and was encouraged to continue working on the game even after the summer camp, which is something I will consider.
I focused improving crappy UI I put together in milestone 2, and some major bug issues related to sound.
I haven't worked much in Unity, but I remember working UI in the early days of the engine, and I have to say it was a breeze working with the new UI tools in Unity. They had proper scaling and alignment of elements, which made it quick and easy to set up.
After the final milestone, I prepared the game for release. I created a page on Itch.io, and made a short trailer about the game.
Testing Multiplayer Alone
The environment for testing the game locally is good. You boot up a copy instance of your game, and then let one instance be the server, and the other instances clients. However, this requires a lot of resources from your computer. I couldn't run two instances on my MacBook Pro 2019 model without the machine crying for help. It was slow, and I got frustrated by how long it took to test. I had to move the game development to my actual work computer (2022 M1 MacBook,) please don't tell my boss. This was a lot faster to debug.
Despite having the necessary resources, I had to test multiplayer alone. It's challenging to identify bugs and gauge the overall gameplay experience when you're the sole player. I recommend having a partner to work with, or team up with other participants helping each other out. I'm located in Japan, while the other participants were located in Europe, most from Poland. It was impossible to play a game with people from Europe. The ping was just too high.
Unity's Friendly Interface but Slow Development Cycles
Unity offers an intuitive workspace where I spend most of my time in the editor rather than writing code. However, when I do need to make a code change, I must stop the game and restart it, significantly slowing down the debugging process.
Leveraging Existing Assets for Efficiency
I didn't want to spend time making assets myself, especially in 3D, so I used assets from "Kenney assets." The assets had the look I was going for: low poly 3D car assets with a retro feel.
I bought some sound effects and some music from a Humble Bundle, but I wasn't super satisfied with the sound effects and the music itself. They worked well enough for the game, and I didn't have that much time to spend on assets. Sometimes, good enough is perfect.
More than a Game Jam
The summer camp has been more than a game jam, and I've put in a lot more effort than what I initially thought I would. I also participated in the annual js13kgames game jam from 13th of August to 13th of September. I will not participate in two "game jams" at the same time ever again. It has been exhausting to say the least.
The Road Ahead
We still have a few weeks left before the end of the summer camp, but that will include voting and playing other participants' game, which I'm really looking forward to.
Will I continue working on the game after the summer camp? I'm not sure. After Unity's recent pricing changes I've lost some will to continue working on the game itself. I know the Elympics team wants to see me succeed, and I will think about further development after the voting of all the game entries has concluded. If I get a lot of positive feedback, I will consider to continue development and make it a fully commercial, or monetized game.
Conclusion
My retro car racing game's development took place during the Elympics Summer Camp of 2023 lasting 3 months. Elympics, as an out-of-the-box solution for online multiplayer, streamlined the development process, allowing me to focus on gameplay rather than complex networking. Continuous support from Elympics, including milestone-based feedback and an active community on Discord, proved invaluable in improving the game.
The development journey consisted of three milestones, each marked by substantial improvements, from adding assets and polishing gameplay to addressing bugs and enhancing the user interface. While Unity offered a user-friendly interface, slow debugging cycles were a notable drawback.