Our team has been working on a 3rd person 3D action multiplayer game and we have been using unreal’s network engine for it. It is crucial for our game to support at least 250 players per server.
My question is, is this achievable purelly by optimising network variables in the default networking system or should we create a custom version of the engine using the source code that has such networking optimisations in its core?
And if it is the latter then where do we start?
250 is a big ask, Epic themselves had to make considerable efforts to get 100 players working reliably for Fortnite Battle Royale - and even then it’s pushing things hard.
I see. Would implementing something like distributed network connections be possible? And if so, would it help at all?
Not by default - Unreal is built around a strict Server/Client architecture and the gameplay framework is built around that too.
If you want P2P, you’ll have to implement that yourself or use a third-party system I guess - but it’ll be pretty much starting from scratch. We’re talking everything, even character movement - since none of the built in functionality will work any-more. In all honesty, I doubt P2P will make life any easier.
All this aside, people are making MMO’s with UE4 so there are probably workarounds - there’s even an MMO starter kit here: https://forums.unrealengine.com/deve…mo-starter-kit
250 players in the same level all sharing gameplay data though - I don’t fancy it personally
If you mean distributed network on server side but it’s still server-client architecture, consider SpatialOS as possible solution.
I don’t know if their SDK exit beta yet.
This will tie your game with SpatialOS platform and they implement their own network replication layer.
By the way, even with SpatialOS, you should at least stress test your game play network synchronization logic.
Regardless of engine, 250 players in a fast paced multiplayer action game is quite a challenge. There will need to be compromises and you’ll have to write your own movement, prediction and replication logic, for sure.
MMO games, for example, do larger player counts by relying on several design decisions that allow them to get away with very low tick rates and lax precision enforcement.
There’s no magic bullet: you’ll have to send less information about what each player is doing to clients and find ways to make your gameplay work with that. You’ll also need to deal with aggressive client side optimization to deal with tons of characters running all over the place blowing each other.
This thread is a good place to remind people that ideas are worth nothing, the value is in the implementation. If you could turn a few knobs in UE4 or whatever engine and get yourself a fast paced shooter with hundreds simultaneous players, the market would be full of them already. If having 250 players is the main differential of your game (“secret sauce”), you’ll have to “put in the work”, as they say.
Surely it can’t be that difficult, Planetside 1 had 300p multiplayer in what? 2002-2003? When people had 1mb internet. MAG also managed 256p on decade old PS3 tech. Hardware, server quality and even household internet connections have come so far since then. Planetside 2 currently achieves 333p in one instance, 2,000 per server with AAA graphics & gameplay and only occasional minor netcode issues like warping 1 or 2 meters etc.
How to actually code it, I have no idea, but in a technological sense I don’t see why it should be at all an issue. Replicate the kind of system used by games like Battlefield for 64p multiplayer, slim it down with less server side checks & balances so it’s more efficient and introduce MMO like scaling. If you can get it to run at 3x the scale of battlefield you’re already at 200 people. Battlefield runs happily on a basic 20 euro server so it shouldn’t be difficult to do this with a beefier server set up.
With modern servers & many people having fibre I don’t see why tech would be the limitation, and if the Distributed Actor Technology is available soon it will be even less difficult. Hopefully someone will develop a more straightforward way to implement such things in EU4. In the mean time why don’t you try Spatial as suggested above, a game using Spatial apparently achieve 1000p Battle Royale at a tech demo. Alternatively there is SmartFox/Photon/RakNet. Aside from coding the main issue will probably be the bill for server bandwidth.
Having said all that, I’m not an expert.
To my knowledge, nobody has done 250+ players in a UE4 game yet - so it’s untested ground, but it only takes a minute to see the problems PUBG has had, and the sheer amount of work Epic have done to get Fortnite running at an acceptable pace (and the cutbacks they had to make to accommodate for it), it doesn’t take much interpretation to see that 250 players is going to be extremely difficult with the default engine tech. But of course, it depends what you’re doing exactly.
Planetside 2 has a huge advantage in that the engine was specifically tailored and written for that game, which allows them to really fine-tune the net and game code for better performance on the server and the client. (Try dropping 250 default UE4 characters into a level and watch your game thread kill itself). There’s also the issue that the companies and folks who develop this kind of tech very rarely share insight into the nitty-gritty of how it works, because it’s a highly valued USP for their company and not something many folks have access to.
In general, the more players you have, the less responsive the game will be for each player (generally). Don’t expect UT-level responsiveness for a 250 player game. SpatialOS certainly looks interesting, but to my knowledge it’s not available to the general public yet - and it doesn’t solve the client-side performance issues with that amount of players either. There are lots of considerations to make.
Yet this game has a mobile version which runs happily on an iPhone using 4G connection. Should it not be comparatively easy when the client has a proper PC and fiber optic instead of a cellphone?
Even Tribes 2 had 128p multiplayer in 2001. The limitation doesn’t come from hardware, it comes from a lazy games industry.
Depends on your definition of that word I guess
I’m not saying 250 isn’t possible, it almost certainly is - but OP should be prepared for what kind of game you can realistically achieve with that, and be prepared to make some heavy engine modifications. If you want a 250-player game where players can all see each other and still maintain UT-like responsiveness, you’re gonna need to undertake some serious engineering and it’s highly likely you’ll have to make some cutbacks.
We’re lucky Fortnite has been so popular because it’s encouraged Epic to focus on features which work for larger-scale multiplayer games, and there are already a lot of existing improvements to piggyback on. Just remember that UE4 is a blunt instrument designed to solve a lot of problems in one package, which sometimes makes it harder to do niche stuff like this.
The key here is client vs server authority. You can get away with a lot if you put gameplay on the client, like Planetside does. This frees up precious resources on the server which lets you have more clients, at the expense of cheating.
@Balgy you didn’t mention exactly, but are those 250 players on the same map or just sitting on the same server?
Same map it would be hard… but I have seen games where they implement on the same map feature called channels (like an instanced dungeon does), so when a player is entering a map and it is already at the max count of players there, he enters another channel at that same map. Usually this grants some sort of scalability when game launchs and there are thousands of players wanting to play around same area. A player needing to spawn in an already full area and there are no more channels available will stay queued to be able to login, until there is a spot to get into.
Do you have any sources of information or resources on how to build this kind of system? Would greatly appreciate it.
Same map. We are keeping our server traffic to a minimum as of yet (using the unreal network profiler to check that), so it runs alright. We are not hoping to achieve 250 players with unreal’s networking, that is why we already have a custom network engine on the works. Just asked the question in case there was something that could save us from the trouble of having to reinvent the wheel with server collision detection, movement etc.
We can, however, get away with quite a few cutbacks as our game is not really a fast paced scifi shooter but rather a more slow paced historical action game. Very simple at its core.
PS. Thank you all for your answers, I am happily suprised to see so many people having a conversation about my question.
I see. 250 real players in the same map is very ambitious, even with UE3 games like Lineage2 implemented cross-server sieges with 100 players from each server, totalling 200 players in open world not instanced. While I think the player data came from different servers and they probably managed to have a separate server just for the sake of that specific event to occur, there were a lot of troubles, mainly latency from connections from different parts of the world playing. Events like instanced world boss raids, which takes more than 100 players, they still have issues with connectivity. Even the best solutions at someone disposal to implement a good game, would in the end reach the bottom line: people trying to play with underspec hardware and connectivity.
Would love to know in the future more things about your project! Cheers!
Just an update.
We are trying to get to 200 players now.
We are using unreal’s replication graph to do so and we are optimistic. I will let you know of any technical details that come up.
Good luck! We looking forward to see your success!
That’s a major disservice to the developers who worked for years on both of those games, where the large player counts was a core differentiator that no doubt took a massive amount of development resources, requiring custom built engines and server tech.
I’m straining very hard to not throw expletives at you. Indeed, you are not an expert. If having arbitrary amounts of players in games “can’t be that difficult”, the market would be flooded with “it’s Fortnite, but with 500 players!” games.