Hacker News new | ask | show | jobs
by patmcc 1851 days ago
A good MMO typically isn't just a large number of players walking around and not interacting with one another.

Look at Eve Online; you have a spaceship, you travel around and shoot stuff (this is simplifying it, but that's a big part of it). Sometimes there are 100 or 1000 ships all involved in one battle; what do you have to deal with in that case? You need to send all ship data (model, loadout, customizations) to every client so they can load in the right assets. You need to track where each ship is (in 3d) and where it's going at any given time. You need to track what weapons are firing, and who they might hit (there are missiles, interception missiles, "bombs" with an explosion radius, lasers that hitscan, guns that have tracking projectiles, etc). You need to compute status effects that may change based on distance between given ships. You need to send all this data to each client regularly (every second at least).

This really adds up, both in compute and memory on the server and in amount of data that needs to be sent to each client. It gets difficult quickly. Let's say all the info above can be described in 1kb/ship/tick - you get up to the larger battles, which in Eve have hit 5000+ (rarely, yes) - and you're dealing with 5000kb/tick going to every one of those clients.

2 comments

> A good MMO typically isn't just a large number of players walking around and not interacting with one another.

It is, though! In most games you're only actually interacting with one or a few people at a time - even if many more might be visible.

Part of it, of course, is that the existing MMOs are designed for small-group gameplay. But even outside MMOs - Minecraft, CoD, etc. - you're not ever going to interact with hundreds of players. A human can't manage that!

Eve runs into problems because it has large-scale PvP. That says almost nothing about PvE scenarios.

Eve online has a lot of self inflicted problems, like relaying on Python for speed sensitive code, running single threaded servers, allocating one CPU per solar system (small region around a star) instead of per grid, expanding Grids to ridiculous sizes instead of partitioning them into small microgrids with delayed group updates.

You really dont need to be send accurate per server tick information about a rocket hitting a ship 5000km away from you.