Vortelli's Pizza - A 3D Multiplayer Kitchen Sim

After 1.1 million plays in soft launch and countless updates, Vortelli’s has finally been released globally on Poki. You can play it here: https://poki.com/en/g/vortellis-pizza

My Journey with PlayCanvas
I started working with PlayCanvas in July of 2021. After one year of on and off work, I released a playable version of Vortelli’s in mid-July 2022. After having spent so long working on the same project, I had no idea if it was any good. It received a small amount of attention from Twitter and the PlayCanvas forums. Around the same time, I sent a demo to Poki.com. I was absolutely delighted to learn that the Poki team loved the demo and wanted to work with me! I signed their publishing agreement and over the next few weeks, I worked with them to integrate their API and monetize the game with ads.

At the end of August, Vortelli’s was soft launched in a few test regions, Brazil, France, Italy, Sweden and Turkey. This was my first time launching a game at scale and I had no idea what to expect. On the first day, my eyes were glued to the stats dashboard and I kept checking my game server logs over and over. I didn’t get much actual work done that day! The player count peaked at 12 on the first day of soft launch.

The next day, I noticed a worrying netcode bug and players were leaving angry reviews complaining they couldn’t click on anything in the game. After hours of stressful debugging, I found a time code bug in the netcode I’d written where players with low spec devices were sometimes getting desynced and weren’t able to interact with objects in the game world. In a mild panic, I managed to implement and deploy a fix. I learned that the dt variable can drift over time making it unsuitable for precise time keeping, use performance.now() instead. Unfortunately that was just the start of my problems.
Screenshot from 2022-11-10 14-10-01

The next morning I was woken up around 4:30am by a notification that all the servers were completely full. At this point I had two servers, one in Dallas USA and another in Frankfurt Germany, each capable of supporting 40 players. At first, I thought this was a bug and maybe departing players weren’t getting disconnected correctly? Unsure, I created two more servers and within minutes they were also completely full. Vortelli’s somehow had 160 players online! I kept creating new servers and they seemed to be filling up as quickly as I could launch them. This was not a bug, Vortelli’s has been featured on the front page of Poki and there were thousands of new players finding my game. I believe Poki’s system automatically moves games with strong user engagement to the front page.

Eventually the player count settled down and I got to work on automating the server scaling. I knew I couldn’t wake up at 4:30 every morning to manage servers. I used Linode’s API to automatically create new servers as the player count increases and then automatically shut them down as the player count decreases. I didn’t get this 100% perfect on my first try, there was at least one time when I accidentally shut down servers with players still on them. My apologies if you were one of them.

Over the next few weeks, I worked to fix bugs and implement some new features. There were all kinds of helpful suggestions from the PlayCanvas community, Twitter and the Poki team. During the soft launch period, Vortelli’s was played 1.1 million times.

PlayCanvas has proven to be very reliable, especially across multiple devices of varying specs. Uploading PlayCanvas builds to Poki is very simple. In the PlayCanvas editor, I can simply download a .zip of my entire project, then upload the same .zip into Poki’s developer dashboard.

PlayCanvas and Poki work well together when it comes to error tracking. The Poki dashboard maintains a live feed of the console errors coming from players’ browsers. PlayCanvas provides very clear error messages containing script file names and line numbers, even in exported builds which has made it very easy to track down issues even in production.

Despite the occasional stressful situation, this has been a really fulfilling project. I have a few Vortelli’s updates planned and of course I’m open to suggestions from the community. If you have any questions about Poki/PlayCanvas, please let me know, I’ll do my best to help!

9 Likes

First of all congrats! I am really inspired by your success.

I have a few questions, I would be happy if you could answer them :slight_smile:

I plan to make multiplayer games using PlayCanvas but I can’t decide about the networking library.

  1. Which networking library did you use to make Vorltelli’s Pizza?

  2. Looks like you are using server auth movement, how did you manage to move players in the server (which physics library)?

  3. Does your movement use client-side prediction?

  4. What’s the average CCU you have?

  5. What was the most difficult thing you faced while developing this multiplayer game?

  6. What’s the average server rent cost you are paying to the Linode?

Sorry if this is too much!

Thank you so much! I’d be more than happy to answer all your questions.

  1. The server is written in C++ and I’m using uWebSockets as the networking library. The clients use the WebSocket API.
  2. Yes, I’m using server-auth movement. I’ve written my own collision detection on the server. It’s very simple and treats all objects and players as non rotated cuboids. It detects and resolves collisions by calculating overlaps on each of the three axes. I initially used Bullet Physics but ended up writing my own for better performance. Bullet is great if you have complex geometry or advanced physics.
  3. Yes, it uses client-side prediction. The server sends reconciliation packets regularly to correct desyncs.
  4. It has been 9 days since launch, average CCU has been close to 2,000. It touched an all time high of 3,035 yesterday.
  5. The most difficult thing has been the netcode by far. Netcode is very tricky to get right. Accounting for and testing varying pings, packet loss, high FPS clients, low FPS clients and connection drops is extremely tedious and time consuming. There are still issues with my netcode that I’d like to improve.
  6. I’m using Linode’s Nanode 1 GB instances which cost USD $5/month each. I’m also using Linode’s API to automate the horizontal scaling. The server count ranges between 40 and 60 servers depending on the player count.

Hope this helps, let me know if you have any other questions!

2 Likes

Thank you for the detailed answer! I wish you success in your future projects :smiley:

1 Like

3k CCU! Congratulations.

Is the majority of traffic coming from Poki?

1 Like

Thanks! Almost all the traffic is from Poki. Maybe 5-10 CCU via the Playcanvas URL which has now been updated to redirect to Poki.