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

Hi,
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 https://www.gather.town. 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