top | item 32054857

Ask HN: What stack for a multiplayer board game?

10 points| tsp | 3 years ago

What tech stack would you use today for a multiplayer board game?

- 1-6 players per game - Round based - Only one player can be active at a time - Multiple games happen at the same time - Optimally, non-technical players can spin up their own server to play on (e.g. via Electron app) - Optimally relatively cheap

For communication I was thinking about websockets, but this would limit the amount of parallel connections / games a lot.

I am thankful for every comment mentioning libraries / stacks and why I should consider them.

28 comments

order
[+] toast0|3 years ago|reply
Have you looked at Vassal? https://vassalengine.org/

It's a board game engine and has multiplayer support. There's also boardgame.io which looks hipper (npm), but I didn't see any screenshots of games being played.

Regarding scaling, there's articles about lots of stacks doing 1M websockets on a host; if that's limiting you, you've got a lot of players, so that's a nice problem to have.

[+] tsp|3 years ago|reply
I wasn’t aware that so many parallel websocket connections were possible. I would like to enable ~500 people to play at the same time. So using websockets might work after all.
[+] tsp|3 years ago|reply
Boardgame.io looks fantastic! JavaScript based frameworks / libraries without a view layer are exactly what I am looking for!
[+] andrewallbright|3 years ago|reply
If it were me, and if there is a graphical component I would use this as my stack. (Note: I am a hobbyist game dev).

- Unity + mirror (multiplayer library) for the server client. The library documentation will help with a mental model of a multiplayer game. Export the binary of whatever your target OS will be. I prefer linux. - Unity for the game client. I prefer webGL export for the client so I can host the HTML/JS/WASM like a normal static site. However; you can (also) export windows, Mac desktop apps too. - nginx to host the static site and reverse proxy to the multiplayer - systemctl units for nginx, and the multiplayer binary on some linux OS. I prefer Ubuntu.

For the code; it's all about developing a mental model of what things exist in your system and what interactions those things have with each other.

It being me, there is a CICD system somewhere running tests for pretty much anything.

[+] tsp|3 years ago|reply
This sounds like a great solution for visually complex 3d games. In my case I would take care of the UI layer on my own, so am looking more for state-syncing, management of user-turns, broadcasting and so on.
[+] dyeje|3 years ago|reply
Depending on your goals, Tabletop Simulator could be a good fit.
[+] tsp|3 years ago|reply
Nice! For my game I want full control over the UI, so this won’t be an option, but for future ones this looks like a great one!
[+] leetbulb|3 years ago|reply
Absolutely this, at least for prototyping
[+] hoofhearted|3 years ago|reply
If I was building a game side project, I would personally go:

- React Native frontend

- .Net Core backend

- NGINX webserver, on a bare metal Linux VM of course

- SignalR for web sockets

- Mysql for long term data storage

- Redis for caching

- Mailgun for sending app emails

Did I miss anything?

[+] lavishlibra0810|3 years ago|reply
You could look in peer to peer interactions for some actions on the board and websockets for keeping state of the board in sync for everyone.
[+] tsp|3 years ago|reply
Are there any peer to peer protocols in particular that you can recommend for this use-case?
[+] npretto|3 years ago|reply
You mentioned electron so I suspect you're interested in games playable via browser, in that case these two come to my mind in the javascript/typescript ecosystem:

- https://boardgame.io/

- https://www.colyseus.io/

[+] tsp|3 years ago|reply
They both look like great options! Do you know any games being made with them?
[+] TillE|3 years ago|reply
Any game engine with a decent networking component will be able to handle this (if Tabletop Simulator doesn't fit your needs). Which one you choose will depend on 2D vs 3D, language preference, etc. Unity is always a safe bet when you don't have unusual requirements.
[+] tsp|3 years ago|reply
I am planning to create a very simple game (visually), using a front-end framework like Vue or React. I don’t think I will need an engine like Unity.
[+] penner_im_auto|3 years ago|reply
I'm surprised nobody suggested Godot.

I have developed several 2d games with it, as a hobby, used a python server for mp, it was very intuitive and understandable. And it is completely free, no ads or restrictions.

[+] rtcoms|3 years ago|reply
Elixir/Phoenix should be good for backend.
[+] tsp|3 years ago|reply
Any specific reason for this?
[+] elil17|3 years ago|reply
Are you trying to make money with it? If not, just make a Tabletop Simulator mod.
[+] tsp|3 years ago|reply
No, just for fun, likely open source. Tabletop simulator looks great, but I want to create a custom 2d interface, so I don’t think this is an option.