Ashes of Creation

  • Guest, it's time once again for the massively important and exciting FoH Asshat Tournament!



    Go here and give us your nominations!
    Who's been the biggest Asshat in the last year? Give us your worst ones!

zerodahero

Golden Knight of the Realm
4
1
I need the tools to get good enough for me to build my own MMO.
MMOs are the hardest games to make by a very large margin. Find some smart folks on the forum and make a scaled down fantasy RPG, and iterate from there. Even if you don't get past prototype, you'll get a new and fun (and frustrating) hobby. Just stay clear of people with more than one hair color.
 

Neranja

<Bronze Donator>
2,754
4,459
It's not that Unreal is bad at MMOs, MMO developers almost always implement their own networking stacks. But this is a tremendous amount of work, something one would expect when developing an MMO.
[...]
Epic also has a new experimental networking stack called Iris, which fundamentally changes the networking to handle open world games and large player counts, and will completely replace the existing replication system which has its roots in the old Unreal Tournament games (push vs polling, reducing CPU load on a server).
The biggest issue I see when you don't develop your own network stack/server and try to shoehorn an existing software to develop an MMO is the underlying persistent nature of an MMO. In normal multiplayer games--even with a large number of players or objects--once the match is over you can kill the server and start a fresh one. If it crashes just that match is affected. All players also start fresh, so it may be frustrating, but the other millions players couldn't care less.

That obviously doesn't fly in MMOs, especially when it is a competitive setting. You not only have to save every little bit of progress of any character, you also have to have a central authority. Doing server meshing is a headache in this situation, because if not watertight it can open yourself to a lot of transactional problems. The most glaring issue is duping of money/items, but also things like concurrent mining of limited resources can be an issue.

To top it off, if you do the ACID thing correctly, server meshing might not even let you scale out that much because everything is limited by the database in the first place.
 

zerodahero

Golden Knight of the Realm
4
1
The DB cache for server meshing would most certainly need to use event sourcing to keep the multiple server-nodes in synch:

Event sourcing is a design approach where every change to the application state is recorded as a sequence of events, rather than just storing the current state. Each event captures the timestamp and nature of the specific change, allowing systems to reconstruct the current state or investigate past states by replaying these events.

This method is particularly useful for applications that require a complete history of operations, easy data recovery, or complex auditing. It enables systems to evolve rapidly and meet changing business needs, as it captures the journey of data rather than just the destination.


The scale of complexity grows quickly here, which is why these types of games are extremely difficult to make and run.
 
Last edited:

Neranja

<Bronze Donator>
2,754
4,459
Persistency can be accomplished through a variety of databases, with some sort of high performance cache service sitting between the database and game server(s). At some point in development, the game designers must choose how much of the world will live on between sessions (in an MMO, this is normally player states, quests, inventory, housing and perhaps some high end raid encounter timers).
Caching is not the silver bullet for transactional issues. You are just moving the fundamental issue of ACID properties from the database to the "high performance cache service". We called things like this "middleware" back in the day, and I've seen and heard about horrors with in-house developed servers like those so many times (especially from Java developers that have no database or computer science background) that I stopped counting after all my fingers and toes were used up. "That transaction number, the one that shows up on customer invoices ... shouldn't that be ... I don't know ... unique?"

Remember back in the day when playing EverQuest and you got chat messages like "Saving character", and the common wisdom was when you looted a great item to drop a copper coin to force the server to update your character in the database?

Also, the issue is exacerbated when you decide to have a non-instanced + seamless world, like in the case of Ashes of Creation, because there is no easy way to partition.

At some point in development, the game designers must choose how much of the world will live on between sessions (in an MMO, this is normally player states, quests, inventory, housing and perhaps some high end raid encounter timers).
That is a way to partition the load, but at the same time MMO systems are usually interlocking and interdependent: Quests requiring looting items (and when following the WoW design, also affecting loot tables), player states being affected by zone data (for example like M+ affixes, or jumping into water or lava), and combat being affected by items, buffs, or encounters.

The DB cache for server meshing would most certainly need to use event sourcing to keep the multiple server-nodes in synch:
You are describing a transaction log. You know, the like the ones we are using in things like ... databases and journaling filesystems? Although filesystems usually use intent logs.
 

zerodahero

Golden Knight of the Realm
4
1
Transaction logs and event sourcing aren't quite the same pattern, but they're close enough that I understand your point. Event sourcing scales better for writes, where transaction logs are excellent for reads.

Microservice architecture is widely used today even if if some people had issues using middleware with Java back in your day, whenever that was.
 

Sloan

Golden Squire
67
37
Firebrand race vs Pirates guild today

1740954926532.png