We think you’ll learn a ton and have fun with this one; we certainly did! This is our first-ever three person stream, with guest Stephen Foot dropping knowledge gained across 15 years in the game industry. We play Manchester with 3 players for the first time ever (there are, aheam, some kinks to work out). Then we review our multiplayer architecture and ask Steve for thoughts and suggestions. Of course, it turns out he has studied everything we have, and more. We’re super excited to follow up on the resources Steve mentions–check out the notes for links. We close out pondering future changes: sending state snapshots, using cheaper spatial indexes, and maybe, just maybe, a move to Web Assembly (!!!).
Notes/highlights
- J2ME, a legacy mobile app platform: https://en.wikipedia.org/wiki/Java_Platform,_Micro_Edition
- Brew, another legacy mobile app platform: https://en.wikipedia.org/wiki/Binary_Runtime_Environment_for_Wireless
- Steve’s first professional venture was a Nightmare Before Christmas mobile game: https://www.mobygames.com/game/tim-burtons-the-nightmare-before-christmas
- N-Gage (Nokia game-centric mobile phone): https://en.wikipedia.org/wiki/N-Gage_(device)
- Overwatch Gameplay and Netcode, the main inspiration for Manchester’s multiplayer design: https://youtu.be/W3aieHjyNvw
- Steve suggested avoiding WebSockets, and avoiding TCP in general. For more on this, check out Glenn Fiedler’s discussion on UDP vs TCP for game use cases: https://www.gafferongames.com/post/udp_vs_tcp/
- In our discussion on deterministic random number generation, we glossed over the incredible story of how speedrunners were able to overcome a randomly-generated minigame using statistical reasoning and a whole lot of ingenuity. Here’s an excellent video explainer of their techniques: https://youtu.be/1hs451PfFzQ
- Fixed-point arithmetic: https://en.wikipedia.org/wiki/Fixed-point_arithmetic
- To avoid floating point issues, The Outer Wilds team kept the player at the origin of world space: https://www.youtube.com/watch?v=LbY0mBXKKT0&t=1907
- How Netherrealm Games implemented rollback and resimulation for Mortal Kombat and other games: https://youtu.be/7jb0FOcImdg
- Web Workers allow you to get true parallel execution within a JavaScript program: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API
- We’re all excited by Web Assembly: https://webassembly.org/
- Retrofitting a game for multiplayer is one of the hardest things in game development. One famous example was the original Diablo. Here’s Pat Wyatt, Diablo’s network programmer, discussing his work, including Diablo and Guild Wars: https://youtu.be/1faaOrtHJ-A?t=495