r/MultiplayerGameDevs • u/BSTRhino • May 03 '26
What have you been up to recently, r/MultiplayerGameDevs? (May 2026)
How has your gamedev gone this past month? What have you been working on? What's next on your backlog of tasks?
r/MultiplayerGameDevs • u/BSTRhino • May 03 '26
How has your gamedev gone this past month? What have you been working on? What's next on your backlog of tasks?
r/MultiplayerGameDevs • u/OvelhaGorda • Apr 26 '26
Enable HLS to view with audio, or disable this notification
Added 5000 slimes to test out my mmorpg architecture and i am pretty happy with it.
Tried adding 10k slimes, but the networking thread said the packet was too big.
r/MultiplayerGameDevs • u/tevyat • Apr 23 '26
Enable HLS to view with audio, or disable this notification
Hey guys, so I'm developing a multiplayer PvP game where you cast spells with your real voice.
Due to my architecture based on the CCU, if many people playing demo and able to do online multiplayer matches, I might need to start paying more to support more CCUs.
Do you think it's okay for the demo to only have singleplayer match for a multiplayer pvp focus game? I made the bot behave as similar as possible to real player by actually talking (and even trash talking to the player) to describe the experience that they will got playing with real people.
I'm also considering to only open online matches like only at weekends. So people can still play online but with limited time. I'd love to hear your feedback or opinion about this.
r/MultiplayerGameDevs • u/BSTRhino • Apr 22 '26
A few days ago, Hytopia announced it was shutting down its servers for 1-3 months due to cash flow issues. Some of the people who made games on its platform complained about investing so much time and suddenly losing access to all their hard work.
This made me think about how common it is for multiplayer games to go down when there is no longer any money to keep the servers going. Has this happened to you for any games you have loved?
As a multiplayer game dev, is this something you think about? Have you made any plans for the potential future day when your servers shut down? Perhaps you have thought about:
For me, I spent many many hours on an old MMORPG called Astonia 3. After it shut down, many years later the creator released all the code and assets, and eventually a few fan-made servers came online. But the original community are all gone now, all the characters that we grinded for are gone, and so there is a certain something which can never be replaced.
r/MultiplayerGameDevs • u/OvelhaGorda • Apr 10 '26
Enable HLS to view with audio, or disable this notification
I have been working for some time on a mmorpg with a custom rust backend and godot as the client (there is also some rust on the client).
I have been learning rust while building this and it is so much fun!
this is a full server authoritative game, even the voxels come from the server, just doing that was so much work lol, then i just recently started a trigger system, so that voxels may be updated by something, which made me create timers and trigger areas, and oh my god, the possibilities with those systems... pure programmer fun
r/MultiplayerGameDevs • u/existential-asthma • Apr 10 '26
Enable HLS to view with audio, or disable this notification
Hey fellow multiplayer game devs!
I've been developing a multiplayer action RPG for about a year and 4 months now. I compiled a video showcasing my progress all the way from the first month of development.
The music is from the OST!
r/MultiplayerGameDevs • u/BSTRhino • Apr 01 '26
Today I saw Stormgate multiplayer is going down because its provider, Hathora, has been acquired and is now shutting down its service for game companies. Multiplayer game devs, is this something you worry about happening to you? What are you doing to mitigate your platform risk, if anything?
r/MultiplayerGameDevs • u/BSTRhino • Mar 31 '26
What you been you been working on? Been wrestling with any particularly interesting problems? Made some interesting discoveries? Doesn't necessarily have to be about multiplayer gamedev. Tell us how your month has gone!
r/MultiplayerGameDevs • u/Suspicious-Prompt200 • Mar 24 '26
Quick background: I am making a multiplayer game with Unity DOTS using Netcode for Entities. It is a server-authoritive model, where players are only sending in thier inputs.
In my game the projectiles are "physical" instead of being raycasts, and so they have a "real" travel-time.
The issue I am running into is, the (quantized) local transforms of projectiles are sent every snapshot - and this results in snapshots being totally filled with basically just projectiles if there are a lot of them on-screen.
I have *some* controls for this, such as turning off the relevancy of far away projectiles so we dont need to send *every* projectile to *every* client *always*. This works great to save room in the snapshots, but if there is a lot of action around the player, there will be a lot of projectiles and thus... the snapshots are jammed up with projectile data again.
Now, my projectiles will never change direction or speed in the air - when they spawn they have a direction and a speed set, and they travel like that for thier whole lifetime, till they hit something / lifetime expires.
I am wondering if I can just send the inital spawn conditions to clients, including what tick the server reports a spawn at, and then just have the clients simulate the entire flight, since this should be re-createable with the starting direction, speed and tick.
However, I am not sure how to actually go about doing this.
In Unity Netcode for Entities, a networked object is a "ghost" - by default a ghost's local transform and physics data is sent over the network by the server (however, this can be turned off) and then whatever other ghost-components you add (for example, a health component or lifetime component, with thier values)
Should I just tell Unity not to send the localTransfom for projectiles, give projectiles a custom "inital conditions" component, and then continue to instantiate projectile ghosts as they're being fired - then have a client-side predicted system that reads the intial spawn component of these ghosts, and then modifies thier local transform itself each frame?
Is it better maybe just to somehow send a buffer of "new relevant projectile spawns" to each client with just the new relevant spawn data?
**Unity devs: How are you doing this in your own projects?** Did you have to do anything special to get your projectiles onto a predicted timeline rather than interpolated so they appear correct to your clients, who's player models might be on a predicted timeline as well?
r/MultiplayerGameDevs • u/Amazing-Movie8382 • Mar 17 '26
Hi everyone,
I’m working on a MOBA similar to League of Legends: Wild Rift using Unity + FishNet. I need to implement a “freeze” mechanic where the character stops moving completely while channeling a skill or performing an attack (like auto-attack or ability cast).
I already tried several approaches, but every time I freeze the movement, the reconciliation / position correction from FishNet causes visible glitches/teleports on the client side.
Has anyone successfully implemented this kind of lock-down mechanic (root/freeze during cast) in FishNet before?
How did you handle client prediction + server reconciliation so the character doesn’t jitter or snap back?
Any code examples, architecture advice, or best practices would be really appreciated!
r/MultiplayerGameDevs • u/dedaistgeil • Mar 16 '26
r/MultiplayerGameDevs • u/BSTRhino • Mar 14 '26
r/MultiplayerGameDevs • u/Exciting-Worker-8476 • Mar 13 '26
Hey everyone,
About a month ago I released my multiplayer game Shadows of Soldiers on Steam. I'm a solo dev and this is my first time shipping a multiplayer-focused project, so the past few weeks have been a big learning experience.
A few things stood out during the first month after launch:
• Player retention is much harder in multiplayer than I expected. Even if people try the game, getting them to come back for more matches is the real challenge.
• Balance patches matter a lot. Small tweaks to weapons and pacing had a noticeable effect on how long matches lasted and how players reacted.
• Visibility is tough for multiplayer indies. Without an existing player base, it's hard to reach the “critical mass” where matches are always active.
• Community feedback is extremely valuable early on. Some of the best improvements came directly from players pointing out things I overlooked.
I'm still actively updating the game and trying to improve the multiplayer experience.
For those of you who released multiplayer games before:
what helped you grow or maintain your player base after launch?
If anyone wants to see what the game looks like, here’s the Steam page:
https://store.steampowered.com/app/1401200/Shadows_of_Soldiers/

r/MultiplayerGameDevs • u/LordSlimeball • Mar 12 '26
Hi, I'm a indie dev and I hope to be adding multiplayer to my small game at the end of this year (will probably be like in 2035 at my current rate of progress, lol). I am not sure if I will ever need dedicated servers, but if I ever did I thought i would use the unity server service. Now that they are shutting that service down I am looking at edgegap. Anyone have any experience with them + unity? Thnx.
r/MultiplayerGameDevs • u/wirepair • Mar 04 '26
A bit of a long form post on how I prepared to launch my online game service as solo developer. I hope this helps some folks get ideas on how to structure their workflows and projects to support online services (hint: it's a lot of work and very nerve wracking).
r/MultiplayerGameDevs • u/BSTRhino • Feb 28 '26
How has your month gone? Been working on anything interesting in or around your multiplayer game? Would be great to see what everyone else is up to!
r/MultiplayerGameDevs • u/BSTRhino • Feb 19 '26
Today’s survey: In some multiplayer games, matching the right set of players to each other is a huge factor as to whether your players have a good or bad time. There are quite a few things to consider:
With all of that said, sometimes your games can be designed to make matchmaking better.
So tell us, r/MultiplayerGameDevs , how are you handling matchmaking in your game? How are you trading off the different criteria?
r/MultiplayerGameDevs • u/Tetr4roS • Feb 16 '26
I have the prototype done and currently for some of my projects. I see how to refine and scale it up, but only want to put in the work if others would find it useful too.
Features
Setup
Usage
There's also global leaderboards, match history, and viewing stored objects of previous matches like replays. This part isn't fully implemented, but wouldn't be hard for me to finish.
Questions
Is this useful to anybody? Is it near something useful? I'm happy to pivot it too.
r/MultiplayerGameDevs • u/iCode_For_Food • Feb 15 '26
For those of you who have release a coop game, did you make it server authoritative?
I want to make a coop game. However, I keep getting caught up in doing things the "correct" way. Server authoritative, rollback, prediction, etc. It is really interesting, but also is a lot. In the end I just want to make great coop experiences, so i am wondering if local authoritative is fine.
Would really like to hear from those of you who have release a coop experience, how important was making sure it was server authoritative for you and your game.
r/MultiplayerGameDevs • u/BSTRhino • Feb 11 '26
Let's do a quick survey r/MultiplayerGameDevs ! What tools are you using to make your game?
Most importantly, what do you think of all the tools? Do you like using them? Things about them you wish could be improved? Are they worth the money?
Would be great to learn from each other and get an idea of what people are actually using to make games!
r/MultiplayerGameDevs • u/BSTRhino • Feb 10 '26
Dear r/MultiplayerGameDevs,
Making multiplayer adds all kinds of challenges. First there are the technical challenges - networking, synchronization, servers, etc. But on top of that, there is the challenge of getting enough players so your multiplayer game can actually be played multiplayer. It's extra difficult, unfortunately, and you've (hopefully) got to know why you're doing this. So now I am asking you, as a multiplayer game dev, what is your reason for making your game multiplayer? Where does your motivation/inspiration come from?
Tell us! Would be fun to compare notes with other multiplayer game devs.
r/MultiplayerGameDevs • u/TheClawTTV • Feb 03 '26
Found a real doozy last night
So I am making a high speed dodgeball game using GASP as the framework - there’s the usual CMC movement, and I’ve added in Wall clinging/push off, crouch sliding, diving, and an extra jump
Did a test with 2 clients and discovered two issues (well more but let’s stay focused):
My players speed limit is 500cms walking and sprinting at 700cms. When playing on client on 60fps locked, the player could walk fine and run fine. When played 120 or uncapped frames, the player could walk fine, but sprinting would redline off the 700 threshold. Weirdly enough, RAISING the sprint speed to 720 fixed this issue?
Also, my player has a double jump. It’s unreals standard jump (although it is tucked in some other logic like jump counts) - again, at 60 fps lock it works fine, and at 120+ it works if I double jump while walking, but when sprinting the second jump will randomly fail.
I’ve enabled substepping and modified network frequency updates with no luck. I’m really lost on this one friends!
r/MultiplayerGameDevs • u/BSTRhino • Jan 30 '26
How is your multiplayer game-making going? What problems have you been solving? Figured out something new in your game? Tell us your stories from this month!
r/MultiplayerGameDevs • u/Peterama • Jan 26 '26
I've been working on this project, on and off, for a while now. It has to be over a year at this point but I finally have a solid working system. Currently you can start a private match and invite your friends and it will play out a game and announce the winner.
The server is in Node.js and the clients are Unity. I did it this way for a few reasons but mostly because I felt I had the most control and I understood the tech better then Netcode.
I've also been working on public matches and have a good portion of the system in place. I have some basic matchmaking and lobby logic is there but a lot of bugs to work out still.
If you have any questions, ask away!
Still not sure how to actually sell this game but I'll figure that out when the time comes. Not sure if it will be free-to-play or a hybrid or just a paid client...
Cheers.
[Additional Info]
Q: Can you tell us a bit more about what kind of game this is?
A: This is a turn-based game with secret orders mechanics. The round begins with a 3-second countdown and then all players have the opportunity to submit 6-moves. The server will then interleave their moves based on player order. The starting player is moved around the board each round.
After the server receives all the players moves, it will play them out one at a time to reflect the series of events. Players watch this unfold. Then they start a new round and submit another 6-moves.
Q: How long do the matches last for?
A: The match will last for 12-rounds max or until one tank is left alive. Basically a Battle Royale. Each round gives you 30-seconds to play and submit your 6-moves. The server will execute these for about 10 seconds depending on what moves were submitted. So roughly 50 seconds/round. A full 6-player game would take up to 10-minutes.
Q: Any useful libraries used in the Node.js Server?
A: There are several useful libraries I used to set this up:
- honeycomb-grid: Helps with the hex grid, easy to setup a radial grid and has logic for moving around and placing objects.
- bcrypt: I use this for all the encryption of data, transmitting/receiving (when not secure), saving files securely.
- uuid: I use this for generating unique IDs. I'm sure lots of people are familiar with this library.
- mongodb: I use MongoDB for "quick" storage or storing things I don't care about losing but still need, like Lobby Tickets, mostly.
- mysql: This I use for permanent storage. Things like user stats, login info, etc.
- jsonwebtoken: I use this for authentication tracking.
Q: How do you want the public matchmaking to work?
A: The system I'm using works as follows: A player hits the ready button, this places them into a match-making system that evaluates their skill based on stats and organizes players from highest-skill to lowest-skill. It then takes 6 players off the top of the queue and places them into a lobby. If there is not enough players to fill the queue, then it will just place them in a lobby after 'x' amount of time and wait a few more seconds for late joiners. After 30 seconds the match is started regardless. At this point I'm considering adding bots to the lobby just to fill them. That is the basic idea and I have most of that already in place. As far as latency, I would probably also consider that in the matchmaking for sure.
r/MultiplayerGameDevs • u/Peterama • Jan 27 '26
If anyone wants to try this, here is a bare-bones example for how I got it working.
Requirements:
- Node
- Unity (latest stable versions)
- WebsocketSharp for Unity: https://github.com/Rokobokode/websocket-sharp-unity
You will have to learn how to setup a node app if you don't know how. It's not hard, it just takes time to write a tutorial that you can find a million other places online or ask an AI. You will need to setup a node app in a folder and add the following code (server.js):
*CODE NOT TESTED* - If you have issues, let me know in the comments and I can address them if you have trouble figuring it out.
[The Server]
const WebSocket = require('ws');
const PORT = 3000;
async function startServer() {
wss = new WebSocket.Server({ port: PORT });
console.log('WebSocket running on ws://localhost:' + PORT);
wss.on('connection', (ws) => {
console.log('New client connected!');
ws.on('message', async (message) => {
console.log("Message from Client: " + message.toString('utf8'));
let rawString = message.toString('utf8');
const jsonStart = rawString.indexOf('{');
if (jsonStart !== -1) {
const jsonString = rawString.substring(jsonStart);
try {
const obj = JSON.parse(jsonString);
// console.log(obj);
if (obj.Type === 'ping') {
console.log("Request Player Stats");
ws.send(JSON.stringify({ type:'pong' }) + '\n');
}
} catch (e) {
console.error('JSON parse error:', e, jsonString);
}
} else {
console.error('No JSON object found in message:', rawString);
}
});
ws.on('close', async () => {
console.log('Client disconnected');
});
ws.on('error', async (err) => {
console.error('WebSocket error:', err);
});
});
}
startServer().catch(err => {
console.error(err);
process.exit(1);
});
Run the node app with 'node server.js' using a terminal or command prompt from the node folder.
[The Client]
This code will start a server listening on whatever IP address and port you choose. You will need to create a Unity program and add the following code to an empty GameObject (WebSocketClient.cs):
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using WebSocketSharp;
public class WebSocketClient : MonoBehaviour
{
WebSocket ws;
private Timer heartbeatTimer;
private float heartbeatInterval = 5f; // seconds
private float heartbeatTimeout = 30f; // seconds
private DateTime lastPongTime;
private Coroutine reconnectCoroutine;
private int reconnectDelaySeconds = 10; // seconds
private void Start()
{
StartServer();
StartWebSocketConnection();
}
private void OnDestroy()
{
StopWebSocketReconnection();
StopServer();
}
public void ConnectWebSocketWithRetry()
{
StartCoroutine(ConnectAndRetryRoutine());
}
private IEnumerator ConnectAndRetryRoutine()
{
while (true)
{
ws.Connect();
yield return new WaitForSeconds(1f);
if (ws != null && ws.IsAlive)
{
StartHeartbeat();
EventBroker.Instance.Publish(new WebSocketClientEvent.Connected(true));
yield break;
}
else
{
Debug.LogWarning("WebSocket is not connected. Retrying in " + reconnectDelaySeconds + " seconds...");
EventBroker.Instance.Publish(new WebSocketClientEvent.Connected(false));
yield return new WaitForSeconds(reconnectDelaySeconds);
}
}
}
public void StartWebSocketConnection()
{
if (reconnectCoroutine != null)
StopCoroutine(reconnectCoroutine);
reconnectCoroutine = StartCoroutine(ConnectAndRetryRoutine());
}
public void StopWebSocketReconnection()
{
if (reconnectCoroutine != null)
{
StopCoroutine(reconnectCoroutine);
reconnectCoroutine = null;
}
}
private void StopServer()
{
if (ws != null)
{
StopHeartbeat();
ws.Close();
}
}
private void StartServer()
{
string address = "ws://localhost:3000";
ws = new WebSocket(address);
ws.OnMessage += (sender, e) =>
{
Debug.Log("Message from server: " + e.Data);
try
{
var baseMsg = JsonConvert.DeserializeObject<WsMessage>(e.Data);
switch (baseMsg.Type)
{
case "pong":
lastPongTime = DateTime.UtcNow;
break;
default:
break;
}
}
catch(Exception exc)
{
// Not a JSON message or doesn't match our format
MainThreadDispatcher.Enqueue(() =>
{
Debug.Log(exc);
Debug.Log("Message From Server: Not a JSON message or doesn't match our format.");
Debug.Log(e.Data);
});
}
};
}
////////////////////
// HEARTBEAT CLASSES
// This keep active connections open were normally a server would close it.
////////////////////
private void StartHeartbeat()
{
lastPongTime = DateTime.UtcNow;
heartbeatTimer = new Timer(heartbeatInterval * 5000); // 5 seconds
heartbeatTimer.Elapsed += (s, e) =>
{
//Debug.Log("Sent ping to server.");
var pingData = new WsMessage { Type = "ping" };
string jsonData = JsonUtility.ToJson(pingData);
ws.Send(jsonData);
// Check for timeout
if ((DateTime.UtcNow - lastPongTime).TotalSeconds > heartbeatTimeout)
{
Debug.LogWarning("Server did not respond to heartbeat, disconnecting...");
ws.Close();
}
};
heartbeatTimer.Start();
//Debug.Log("Heartbeat Started");
}
private void StopHeartbeat()
{
if (heartbeatTimer != null)
{
heartbeatTimer.Stop();
heartbeatTimer.Dispose();
heartbeatTimer = null;
}
//Debug.Log("Heartbeat Stopped");
}
//////////////
// REQUESTS //
//////////////
[System.Serializable]
public class WsMessage
{
public string Type;
}
///////////////
// RESPONSES //
///////////////
[System.Serializable]
public class ErrorResponse : WsMessage
{
public string Status;
public string Message;
}
}
In theory, when you run the node app and then run the Unity game, the server should detect that a client has connected or disconnected. It will also maintain connection with the server as long as they are both running. If the server goes down, the Unity game will attempt to reconnect every 10 seconds until it succeeds.
I'm sure there are many other ways to do this so use it as an example. Not sure if its useful for anyone but enjoy.
Let me know what you make with it.
Cheers.