How to create MMO Virtual Office with Video Chat using Elixir/Godot(?)

I’m trying to transition my career of 5 years into Elixir and I’d like to build an interesting portfolio project. The project idea that intrigued me the most was to create something like To start off the MVP would consist of:

  • customizable, shareable links to have other users join your workspace
  • the workspace consists of a 3D world where users have their own avatar
  • when users are within a specified distance to another user, video chat will be initiated

I do not want to use javascript libraries for 3D. I want to use a game engine like Godot to create the 3D workspace. Godot can export to HTML canvas. I was thinking maybe using LiveView to have a overlay for the video and video/audio options over the canvas.

  1. Could you sync in real time all the users from Godot to the Elixir backend and back? Are there some issues I need to be aware of?
  2. With some research I saw that I would need to implement ECS on the backend since Elixir is a functional programming language. Godot is not a ECS-based game engine but Unity is. Does it matter if the game engine itself is not ECS?
  3. Has anyone attempted multiplayer game made with a game engine like Godot and an elixir front/backend?

Thank you in advanced!

Hey there! I asked a difficult and open-ended question myself; so I really want to try to respond to one as well.

Interestingly, Mozilla Hubs uses Elixir (and Phoenix) to power the network and a lot of the features you’re talking about: reticulum. Might be worth a look to see how they do things.

Regarding syncing users. I’m not sure what all this entails, but using websockets with Elixir is a full-duplex way of sending and receiving information without polling (and is the backbone of LiveView). Phoenix Channels and PubSub mixes into this too as the protocol for sending/broadcasting these updates. If you want to tie into it, I understand you’ll probably have to implement your own client in Go as outlined here.

I’m a bit of a noob when it comes to ECS here, so I’ll try my best. I don’t think you necessarily need to worry about the ECS pattern in Elixir. Use Elixir as your “network” for data updates like Mozilla does with Hubs. When new data comes into a client, store it in an ECS-compatible way and can use ECS there to make sure the new data is acted upon by your systems.

There’s quite a history of people using Elixir as the background of multiplayer gaming. There’s even a talk from the recent ElixirConf US talking about game dev in Elixir that might be worth a watch.

1 Like