TLDR: i’m interested in developing mostly multiplayer games, after moving from ROBLOX, and I wanted to know what my options are and how likely I am to go insane attemping to do so as a solo dev.
Hello! I’m a developer who just moved from ROBLOX, after policy changes that requires devs on the platform to pay a monthly subscription to publish games.
One of the reason why I stuck with Roblox for so long, despite its limitation, was the great built-in community and multiplayer features available out of the box. I always enjoyed multiplayer experiences, especially those that are community driven and require communicating with others.
I want to add that Godot and GDScript seem pretty “easy” so far, as someone used to Roblox Studio’s interface and LUA. The nodes system is pretty straightforward and the interface not overwhelming at all.
Now, I was almost considering going with Unity because it seems to have pretty robust multiplayer support with stuff like client-side prediction… however, Unity and Roblox to me are two faces of the same coin: both are ran and owned by greedy corporations whose only interest is profit, so I don’t feel like putting up with the bs Roblox put me thru for ages…
Now, what are my options? How complex is multiplayer and netcode? I know that Godot has some highlevel API but I wonder how robust and scalable it is. Granted, I’m not planning to release the new gen open-world MMORPG. I always preferred more intimate RPG experiences with a tight-knit community, avatar customization, roleplay features and maaaaybe some simple combat. Nothing extensive but solid.
I recommend you find some tutorials online about it. There are certain things that are easy, like getting players and objects to show up using MultiplayerSpawner and MultiplayerSynchronizer nodes. RPCs are also pretty straightforward. NAT Punchthrough is one of the biggest problems you will encounter, and Netfox, which @wchc linked, is a good solution to that.
If you want to create an online server, you’re going to have to learn a LOT. It’s fun if you’re into that, otherwise it will be a nightmare. This is one case where I might recommend an LLM might be your best bet. However, that road comes with security concerns.
If you’re doing peer-to-peer networking, like Animal Crossing, where you can visit someone’s island, it’s a good choice. For MMOs, people have done tests and it seems right out for now. (There are posts on this forum about it if you’re interested.) In between is a fair amount of work depending on what you’re planning to do, and you haven’t really been clear on that.
Roblox gives you a server for free, that’s going to be the largest hurdle to overcome. Godot and Unity both require figuring out hosting solutions yourself. I find Godot much easier to implement multiplayer as it has one clear good solution built-in, where Unity has dozens of official and unofficial solutions each with many quirks and pitfalls. (and of course here we are on the Godot forum)
Not sure about recommending netfox, it solves some of the harder problems like rollback, physics objects, and punch through, but requires conforming to their structure and limited tutorials, it may be harder to get started.
If you found Roblox’s RemoteEvents and client-server interactions simple enough, Godot almost works that way IMO, provided you use my favorite two plugins.
NodeTunnel works like Roblox’s RemoteEvents (RPCs), Roblox’s Client and Server Scripts, and stuff like that.
Talo works like Roblox’s Async services (asynchronous APIs like data storage, player authentication, etc.)
@dragonforge-dev I’m honestly not sure what kind of experience I’m planning for - I’m asking around to gauge my options and maybe a simple p2p architecture may be more than enough for my goals lol. Can peer2peer support 50-60 people? Asking as an example, because that’s the most people I had playing one of my projects at once ahah! If it can handle that and even less, then I’m pretty much fine with p2p.
Either way, can you suggest some resources to study from regarding server development? I understand that it’s a pretty complex topic since you are basically writing the “brain” of your game from scratch…
@gertkeno - yea, another reason why I’m avoiding Unity is because it seems rather dispersive. A lot of solutions available, but seems a headache to figure out which one suits your needs AND hasn’t been left abandoned for the last 5+ years. At least, that’s my experience with web development..
“peer2peer” is just using a player’s machine as a server, the way it’s programmed isn’t too different from server-client once the connection is established. 50-60 connections sounds like a lot for a home network, and if the host leaves everybody else is dropped too (without complex re-negotiation). For large communities you may prefer to host your own server, the main programming difference would be assuming that multiplayer.is_server() isn’t a player like everyone else.
NodeTunnel resolves NAT issues so peer to peer can work easier for you and your players, it doesn’t implement RPCs as that’s built into Godot. NodeTunnel is one small easy-to-use layer for resolving one big problem, I’d say it’s a better plugin than netfox-noray for getting started if you are running into port forwarding issues.
That makes sense - the player host becomes the server basically.
Ultimately, buying server hosting\hosting my own server guarantees that the game is always up and running, whereas if I were to use p2p, I need to make sure someone can host (like me).
Coming from Roblox I would also point out there aren’t Scripts versus ClientScripts, all scripts are going to be similar to ClientScripts, everybody (hopefully) gets the same game to start, nothing is replicated by default and it’s up to you to send RPCs to the server and clients if something changes the game state.
Godot has two helper nodes for multiplayer, the MultiplayerSpawner which tracks nodes spawned in and destroyed as the game is played, anyone joining the server late will be sent all the spawned nodes to catch them up.
Multiplayer Syncrhonizer continually and optimally sends RPCs to other clients for property updates, this is great for updating position every frame. These are organized by “authority” so be sure to replicate set_multiplayer_authority(id) calls.
I agree with @gertkeno about Netfox - I hated it. It overcomplicated everything. I probably should have mentioned that.
I’d check out @ComicallyUnfunny’s link for NodeTunnel. I’m definitely going to be checking it out as I’m about to start multiplayer work on a game next week. (Thankfully I work on a team and there’s a backend/web guy I can hand most of that task off to.)
Probably, but TBH I don’t know that we have data on that. You could pioneer it and let us know.
This course was fantastic for teaching me how to make a multiplayer game in Godot. They cover MultiplayerSpawner, MultiplayerSynchronizer node and @rpc calls. (I think I hated how they did @export or @onready nodes, but you’ll find my comments about it on the lesson and how I think things can be done better.)
I’ve looked at Talo before, and I just looked at NodeTunnel, and I’m going to suggest you start there after learning the basics.
Roblox gives you a server for free, that’s going to be the largest hurdle to
overcome.
@gertkeno is right, this is the actual answer. Coming from Roblox the netcode +
nodes + RPCs side is fine, you’ll figure it out. The painful gap is everything
Roblox bundled for free that you now have to assemble yourself: hosting,
accounts, persistence, leaderboards, friends, matchmaking.
For “how do I host the server” the usual paths are running dedicated processes
yourself on a VPS (cheapest, most ops work), Agones if you want Kubernetes, or
Hathora/Edgegap for managed game-server orchestration without k8s.
For “everything else Roblox gave me for free” (accounts, save data, leaderboards,
friends, currency, live config) the options are roll your own (Postgres + auth +
REST API gets you 90% there), Nakama (open source, self-hostable, also handles
matchmaking + realtime), PlayFab (Microsoft’s, free tier exists but gets
restrictive), or Supercraft GSB - free
tier is 2k MAU + 2M API calls/mo no card, REST so it works from Godot 3 or 4.
Honest framing for solo Roblox-to-Godot devs: netcode is a learning curve but
bounded. The infinite tail is all the live-ops backend services Roblox handled
silently. Picking a BaaS for the second part lets you focus on the first.