rant/idea: alternative MORPG server model

Started by
10 comments, last by hplus0603 10 years, 7 months ago

hey there,

I'm a hobbyist developer (and soon to be pro employed as well, yay!) and some part of my head every now and then looks for ways to reduce the need indies might have of renting servers to host multiplayer games.

now this is something I'm most likely not going to implement (or maybe I might), but still I'd be looking to give it a better shape.

this is meant for persistent multiplayer online games (think an MMO, but without the Massive, hence why I wrote only MO - ideally for games from 2 to 64 players), with an engine where the classic server-client multiplayer model is used (my engine of choice is UE3).

so the idea is to persistently save all of the players' characters in a webserver database, and then allow players to host their own games with automatic announcement into a server list. before the game starts the players select their saved persistent character and play a game on their own realm. since any created match would be broadcasted into the server list, players would be able to join existing matches and in theory (if there's always a good amount of servers in the server list) the whole thing could be rid of privately hosted game servers rented by the developer.

no low-ping servers? just start your own listen server (and tell your friends, or wait for other players to join). lan play? of course!

the whole idea isn't new really. it's similar to what Blizzard did with Diablo1. except in Diablo1 the saved character was stored in the player's PC. Diablo3 does a similar thing, except AFAIK matches aren't hosted by the players (or are they?)

so what advantages does it bring?

well for one perhaps it might reduce some load from the game server. if character stats are stored in the database and the players' client can communicate with it, the host server/player might not even need to know anything about the characters' stats or their items' stats. therefore the server would focus on the core gameplay and some load would taken off it.

now it does bring one problem: world persistence.

while characters are kept persistent, the world isn't. the effect would be just as in Diablo2 or Diablo3: you start a new match with your saved character but the world has been reset entirely to its initial state. all trace left from your previous game sessions (besides your stats and items) are the 'completed quests' in your log.

and now I must say I'm not a fan of static game worlds. nor a fan of MMO game worlds where you complete a quest and the world remains unchanged (you even still see a new horde of orcs coming to attack the town you just saved from... a horde the orcs, for which you got thanked and let go leaving everyone happy and in peace)

but saving the whole state of the world in an online database for every player sounds overkill (as opposed to saving a few hundred characters)

so this is where the idea needs more room for improvement. how to give the impression of a non-static world that doesn't reset every time you play, when there's potential room for thousands of game realms (as opposed to online-only, persistent, always on, pre-defined realms like any MMO)

of course then comes the problem of security of the webserver, but that's beyond the scope of this rant/post :)

also just to make it clear, I'm not only looking for ways to improve this idea in particular. I'm also looking for different opinions and alternatives as to how to potentially be able to create persistent online games without spending all the budget in complex MMO network code and renting of game servers

I just think there must be some way to make the multiplayer model evolve from the AAA-only, money-demanding scheme into a more indie-friendly system that takes advantage of existing resources (mainly, the resources a client player can provide)

any thoughts?

Chosker - Developer of Elium - Prison Escape

Advertisement

of course then comes the problem of security of the webserver, but that's beyond the scope of this rant/post smile.png

That is the entire problem with the model you propose, and the reason why it is mostly abandoned.

Unless the developer has absolute control of the server, then cheaters have absolute ability to cheat.

Even when the developer has absolutely control of the server, then it only reduces (but doesn't fully eliminate) the ability to cheat.

It's like saying, let's talk about the merits of building planes without wings. How they stay afloat is beyond the scope of this discussion.

ah, the cheaters.

you are right. but then again the problem of cheaters persists in traditional multiplayer games (not so much for all-online MMO's, if there's any cheating in them at all), as well as for single player games. is it just that the temptation to cheat is higher in a multiplayer game? (moreso if competitive), and perhaps it becomes worse since cheaters would potentially ruin the game for the rest of players?

if what you say is true and this system is more prone to cheaters, it's indeed not viable. but again, cheaters are still everywhere. it's a general problem, one needed to be solved for each multiplayer game regardless of if the characters are stored in a server or in the players' computers, and regardless of if it's played in centralized servers, privately rented servers, or player-hosted ones.

either way, I'm still looking to hear alternatives :)

Chosker - Developer of Elium - Prison Escape

Cheaters can access and modify anything that's ran on their machine, and even calculate some information not given to their machine.

Users can modify singleplayer games to such an extreme extent (for cheating, or for expanding the game), that entirely new games can be made (modding).

Cheaters cheat alot in first person shooters, but almost all of their cheats are only possible because the games they are playing send data and information to the player's machines. The more information the server decides to share with the gamer's 'client', the more cheaters can cheat.

Same with MMOs. People are able to cheat in MMOs because MMOs either share too much information, or don't validate enough information coming from the client. The more information from the server is shared, the more ways of cheating there are. The less the input from the client is validated, the more ways of cheating there are.

There is absolutely zero way of getting around this, but to share less information, and validate more input.

Servers have to share some information, otherwise the clients won't know what to show on-screen. The key is to not share anything that the player shouldn't be knowing. Don't share information about enemy or ally players who aren't visible, for example. But calculating server-side who is and is not visible puts extra burden on the server.

So servers compromise and willingly share a bit more information than is needed, so the server can run faster, but also don't share other information, to reduce the power given to cheaters. There are still alot of cheaters, and a decent amount of cheats, but the cheats are less overpowered, and the cheaters have a higher percentage of being caught.

By letting users run servers, then you give cheaters 100% power, with absolutely zero way around it. Servers have to be the "authority" that says what is, or is not, the "truth" about the state of the game world. Handing that authority to cheaters makes games enjoyable to nobody except the cheaters, no matter how well designed it is. With FPSs, this is less of an issue, because persistence isn't a problem. Found a server with cheaters? Switch to another one.

With MMOs where your character progresses, nothing makes your progress seem more irrelevant than seeing cheaters max out in 15 minutes the same levels that took you 15 months.

As much as I dislike cloud computing and want software ownership for individuals, videogames streamed over the internet is the only guaranteed way to eliminate 99% of cheating and 99% of piracy, because it is the ultimate authoritarian server architecture - the server doesn't share anything except the video feed that the client displays onscreen. However, that's still a dozen years away from becoming a commonplace reality with MMOs, because it'll put way too much load on the servers.

also just to make it clear, I'm not only looking for ways to improve this idea in particular. I'm also looking for different opinions and alternatives as to how to potentially be able to create persistent online games without spending all the budget in complex MMO network code and renting of game servers

Using your players' PCs instead of game servers could make the network code even more complex. You still have to write all the code to host a game no matter what box does the work, but now you also have to transfer state from your server to the host PC, and you have to worry about things like NAT tunneling and how to choose the host. Your host is no longer just running on one platform you control, so you have to be more concerned about whatever your gamers might have on their PCs, and what Internet connections they have. A process written for your game servers can have simple, secure, fast access to your other gamer servers to call remote procedures and fetch whatever data it needs from your databases. A process written for the client needs to be isolated from game servers for security, and is also relatively isolated due to the latency and bandwidth restrictions.

The money spent on renting servers makes live easier for indie game developers. I'd rather pay for servers than deal with trying to make a peer-to-peer persistent world.

Regarding renting servers, is this really a problem?

A half-gig RAM virtual server running Linux is $6/month at interserver.net. For RPG-style games, that should be enough.

A bare-metal server, capable of doing FPS-type gameplay, is about $99 at game server hosting companies like ServerBeach, and you can find cheaper options if you look around.

For development, Amazon ECC is great, because you pay by the hour, and if you need a few hours a week, it's really cheap. Always-on hosting is not as competitive in pricing, though.

enum Bool { True, False, FileNotFound };

guess you guys are not too optimistic :/

am I over-simplifying things and not looking at the whole picture? is there really no creative way around the system?

Magicka is an example of the model I described. save for the fact that characters do not level up (and the only persistence in them is some spells you unlock along the way, and their weapon, the latter being something almost irrelevant for gameplay), players can host games and they automatically come up in the game's server browser. I remember playing co-op with a friend and having other unknown guys jump into the game.

another example is Torchlight 2. it can be played in online servers and LAN. though the torchlight wiki claims it is peer-to-peer, the description makes it sound more like server-client with seamless host migration (not an easy thing to code either). then again TL2 has no real limiting for cheaters. but it seems tolerable from what I've read.

Servers have to share some information, otherwise the clients won't know what to show on-screen. The key is to not share anything that the player shouldn't be knowing. Don't share information about enemy or ally players who aren't visible, for example. But calculating server-side who is and is not visible puts extra burden on the server.

So servers compromise and willingly share a bit more information than is needed, so the server can run faster, but also don't share other information, to reduce the power given to cheaters. There are still alot of cheaters, and a decent amount of cheats, but the cheats are less overpowered, and the cheaters have a higher percentage of being caught.

By letting users run servers, then you give cheaters 100% power, with absolutely zero way around it. Servers have to be the "authority" that says what is, or is not, the "truth" about the state of the game world. Handing that authority to cheaters makes games enjoyable to nobody except the cheaters, no matter how well designed it is. With FPSs, this is less of an issue, because persistence isn't a problem. Found a server with cheaters? Switch to another one.

With MMOs where your character progresses, nothing makes your progress seem more irrelevant than seeing cheaters max out in 15 minutes the same levels that took you 15 months.

As much as I dislike cloud computing and want software ownership for individuals, videogames streamed over the internet is the only guaranteed way to eliminate 99% of cheating and 99% of piracy, because it is the ultimate authoritarian server architecture - the server doesn't share anything except the video feed that the client displays onscreen. However, that's still a dozen years away from becoming a commonplace reality with MMOs, because it'll put way too much load on the servers.

yep I get it. the more remote and authoritative the server is and the less code it relies on clients to run, the less you can cheat. as it becomes more 'player accessible' whether in running code or even allowing a player to be the host, it gets easier to cheat.

but even if I enabled player-hosted games, what if most of the game routines still happen server-side? in terms of cheating it'd be mostly up to the host player to cheat (and the rest of non-cheater players would leave right away), and client cheats would be limited, like you said.

I also agree that cheaters are harder to catch in player-hosted servers as opposed to running it on rented servers where a developer can always admin and manage. some games give some power to the players in this regard, by allowing to vote kick others. often comes with bullying though, but most times it's better than forcing them to deal with a cheater wether they like it or not.

Using your players' PCs instead of game servers could make the network code even more complex. You still have to write all the code to host a game no matter what box does the work, but now you also have to transfer state from your server to the host PC, and you have to worry about things like NAT tunneling and how to choose the host. Your host is no longer just running on one platform you control, so you have to be more concerned about whatever your gamers might have on their PCs, and what Internet connections they have. A process written for your game servers can have simple, secure, fast access to your other gamer servers to call remote procedures and fetch whatever data it needs from your databases. A process written for the client needs to be isolated from game servers for security, and is also relatively isolated due to the latency and bandwidth restrictions.

The money spent on renting servers makes live easier for indie game developers. I'd rather pay for servers than deal with trying to make a peer-to-peer persistent world.

like I said the server-client model is still used (not real peer-to-peer). and it's aimed for engines that already support players acting like servers at the same time (a listen server, or non-dedicated server), which UE3, CryEngine and Unity support. it's like FPS's where you can go to Multiplayer and click Host Game, and start playing while you're also the server. so no extra netcode is needed, except for the part of saving/loading characters into a webserver (which I had assumed).

of course this way player-servers can cheat themselves, but so can anyone running their own UT3/BF/TF2 server can't they? it's just that like servant said, it's much more game-breaking to see someone cheat in their persistent RPG characters.

A half-gig RAM virtual server running Linux is $6/month at interserver.net. For RPG-style games, that should be enough.

A bare-metal server, capable of doing FPS-type gameplay, is about $99 at game server hosting companies like ServerBeach, and you can find cheaper options if you look around.

the $6 server won't be enough for a UDK/CryEngine/Unity game, which are the top indie/hobbyist third-party engines.

if an indie/hobbyist developer wants to put just 5 always-on servers that means almost $500 a month. sounds like a problem to me :)

even if you could find such a server for $50, it's still $250 per month. this whole thread is about thinking of an alternative to that, aimed for hobbyists or self-funded indies. $250 per month just doesn't cut it IMO.

Chosker - Developer of Elium - Prison Escape

guess you guys are not too optimistic :/

It's something we've all considered before and thought over thoroughly. We're optimistic about new ideas, but some old ideas have been abandoned for a reason.

Player-hosted servers are fine for games without persistence, but just don't work for ORPG type games.

am I over-simplifying things and not looking at the whole picture? is there really no creative way around the system?

If you want players to be able to host games for some reason other than server costs (for example, for community moderation, and player-managed sub-communities), you could still have players "create" servers that you host, or you can have players "rent" servers from you that automatically spin up a new Amazon cloud-hosted server. That could even form a minor part of your revenue stream.

but even if I enabled player-hosted games, what if most of the game routines still happen server-side? in terms of cheating it'd be mostly up to the host player to cheat (and the rest of non-cheater players would leave right away), and client cheats would be limited, like you said.

The thing with cheaters is other players can't be sure whether they are cheating or just really good.

Problems:
False-positives: I've been accused of cheating before, just because I played well in a match - I'm sure we've all had. Regardless of whether or not someone is actually cheating, the more players are aware of that cheating does occur, the more they see it around them, whether or not people are actually cheating.

False-negatives: Not every occurrence of cheating is obvious. Does your game have mini-maps with radar showing where all your enemies are? You can bet your cheaters will. Non-cheaters won't realize that, and might just think that the other players are just really good... and get frustrated that they can't ever seem to improve at the game, because everyone else is just so skilled.

Positives: Even if you do see that a player is cheating, and leave the server... and join another server that has players cheating, it'll give you the impression that the game is "filled with cheaters", and you'll start seeing false-positives everywhere, or else it'll motivate you to cheat, because "everyone else is doing it, so I need to do it to even make the game fun, and to level the playing field.", creating a self-reinforcing and growing environment of cheating in your game.

Insta-leveling: Another impact of cheating that ruins gameplay for others long-term, even if they don't play on cheater-hosted servers, is by cheaters hosting "insta-level/uber-experience" servers. Everyone else levels in 5 minutes what takes me 5 months. They get all the best items. Instantly. They get all their skills maxed, instantly.

Griefing: A cheater-ran server can be set up (easily!) to just grief players in slight ways. Make the players' bullets fly to the left, or give them spray-cones that are slightly bigger (less accurate) than other players. Make them run a very tiny fraction of an amount slower. Make them suddenly "lag" when entering a firefight (to which the players will blame you, the developer). Make them every so often accidentally flip 180-degrees around. "Chosker's game? I've played it, it was buggy like you wouldn't believe!"

player-hosted servers as opposed to running it on rented servers where a developer can always admin and manage

As I mentioned earlier in this post, just because you are hosting the server, that doesn't stop you from letting the community moderate or admin it. I think it's wise to let trusted members of the community be able to police your servers for you.

some games give some power to the players in this regard, by allowing to vote kick others.

Not if the person they are trying to kick is hosting the server. The kicking feature will be the first thing they disable. Ofcourse, the cheater can one-vote kick anyone they want to. Cheater-hosted servers disempower the community and empower the cheater. It takes away power from the very people you want to have power, and gives the power to the very person you don't want to have power.

the $6 server won't be enough for a UDK/CryEngine/Unity game, which are the top indie/hobbyist third-party engines.

Why not? UDK and CryEngine are famous for impressive graphics. Servers don't run graphics at all! The rendering engine you choose for the client doesn't determine or force the way you write your server, though it might influence it.

if an indie/hobbyist developer wants to put just 5 always-on servers that means almost $500 a month. sounds like a problem to me smile.png

Well, let's stop and think here. Are you talking indie or hobbyist? Because they are different things.
Hobbyists can run a single server, and then tell players to donate if they want more.

Indie developers can run a single server, until they get enough players that they actually need additional servers.

One physical "server" machine, can host maybe 20 of your game's software "servers", depending on how well you write your game's servers. The word "server" is often used for both the physical hardware, the virtualized operating system on the physical hardware (there may be more than one per physical machine), and then the game's server code (there may be more than one per physical machine).

It's not 1 physical machine hosts 1 software server. It could be 1 physical machine hosting 20 software servers. Or at maybe 5. Depending on how you write your code, and how powerful the machine is.

even if you could find such a server for $50, it's still $250 per month. this whole thread is about thinking of an alternative to that, aimed for hobbyists or self-funded indies. $250 per month just doesn't cut it IMO.


Again, purchase one. When you need more, purchase more. When you need more, it means you already have revenue coming in, because paying customers are already playing your game.

I am not a server architect, so take this with a grain of salt, but let's do a hypothetical scenario here.

You released your game. You charge players $5 a month (after processing fees and etc...).

Your game software server can host 30 players.
Your online-rented physical server can host 5 of your game-software-servers. This means you can host 150 players at once.
During your peak gameplay time (middle of the day on weakends, after school on weekdays), only about 10% of your total active players are online at once, statistically - I forget where I heard that statistic though. For small communities (<50 active members), my personal observation is that it's much higher as they all try to get on during 'peak time', because nobody is on during any other time and players don't want to play alone.
This means, you can support a community of about 1500 active players before you start lagging.
Because we don't want it even slightly lagging, let's say 1200 active players is the size you can support per physically rented server that costs you $100 a month.
1200 players cost you $100 a month. 1200 players pay ($5 * 1200 = $6000) a month.
For every 1200 players, less than 2% of your revenue is going to server expenditures.

But ofcourse, for every new server you add, you don't instantly poof 1200 paying customers into existence.
So how many paying customers do you need to break even on a new server?
$100 monthly / $5 per player monthly = 20 paying subscribers for each new server to break even.

These are all hypothetical numbers. But these are hypothetical numbers you can shoot towards as a goal, because the performance of your code is the driving factor. And they are on the low end of performance - honestly, unless you're running a FPS with advanced physics and everyone moving around where you having to keep every player perfectly sync'd with every other, getting 30 players per game server should be your starting situation before you optimize. With RPGs, you can easily cut corners on player synchronization that FPS's can't. And we've been having 16-32 player FPS matches running on player's machines for the past 10 years (i.e. 10-year old machines).

While your game is in the very very early state, host the servers on your own machine. That'll get you to 50 active players easily, though uptime won't be 100%.

Check the Steam stats for how many active players these million-user community games have during peak time. If you're expecting to be less popular than Ragnarok Online 2, then you probably won't encounter 2000 active users at the same time.

I was once part of a tiny hobbyist ORPG, and we were able to have 20 consecutive users on the lead developer's spare desktop. We never got above 22, merely because our community was small (too small, according to Norton Antivirus). The game server wasn't even optimized yet for large groups of players, and the thing that lagged it the most was my stupidly-large scripts written in the lead developer's custom yet-to-be-optimized scripting language. Though, one time, he had guests over in that room for a few days, so he switched to hosting the game on a laptop over wifi. That lagged. laugh.png

My basic point is, yes it costs a little, but when you need to support massive numbers of users, then you should already be receiving massive amounts of revenue. You don't launch and get 10k users unless you already have a huge public presence prior to your launch. As your customers build up gradually, or in spikes, your revenue will also build up in revenue and spikes.

Plan for those numbers of users, but don't purchase/bet on it until you see them materialize.

If you get a significant fan base, never underestimate their willingness to shell out cash and rent their own dedicated server for themselves. Of course, if you get this far you will want to encourage modding and writing plugins as much as possible to get the modders on board.

Just look at Valve multiplayer games like TF2. Not a whole lot of people play on Valve's "vanilla" TF2 servers. Most people play on community servers, and a vast percentage (not sure if majority) play on modded servers. Server mods for that game go from small changes to entirely new games.

C dominates the world of linear procedural computing, which won't advance. The future lies in MASSIVE parallelism.

if an indie/hobbyist developer wants to put just 5 always-on servers that means almost $500 a month. sounds like a problem to me


So don't build an ORPG that requires FPS-type physics to enforce the rules that matter!
enum Bool { True, False, FileNotFound };

This topic is closed to new replies.

Advertisement