Books on MMORPG engineering

Started by
7 comments, last by Sergey Ignatchenko 6 years, 7 months ago

Are there any good books on the topic of MMORPG or RPG engineering. (like MU)

I'm more interested in the server side architecture than client side. A book concentrated on rpg server development is preferred. I understand that there are too many topics to be covered in a single book.

I'm looking for a book that will give me an idea about:

  • Principles, ideas with example code or pseudocodes...
  • Project structure
  • Code structure
  • How to properly structure the game loop
  • How to handle zoning
  • How/Where to handle AI
  • Threading (what should be in separate threads)
  • Multi servers (what should be in a separate server/machine)
  • Putting it all together

The book could also be on developing RPG's and I can just adapt it for multiplayer (server side).

I currently have these books:

Don't get me wrong they are great reads but they are mostly geared towards designing game-play, economy and solutions to common problems; some even marketing.

Except for Multiplayer Game Programming which has some of the things I'm looking for but I'm still looking for more or a more comprehensive book.

I considered looking into an open-source server for ragnarok online but it's already so matured that it's hard to follow the code and thought process of the developers.

Advertisement

I'm not aware of any books that specifically deal with those subjects in the context of an MMO.

Most of what you've listed is fairly basic game implementation and software engineering. Maybe something along those lines would be useful for you.

Wielder of the Sacred Wands
[Work - ArenaNet] [Epoch Language] [Scribblings]

I can see what you asked, but let's approach this from a different direction.  The direct question of "are there any good books" will just create a library that you'll never read.

 

One approach is the for us to play 20 questions with you.  Can you already make a "Guess the Number" game?  Can you already make a Tic Tac Toe game?  Can you make a Connect Four clone? Can you make a Pong clone? A Tetris clone? A Breakout clone? A Space Invaders clone? An Asteroids clone?  Can you make a Galaga clone? Can you make a Super Mario Bros clone? Can you make them with multiple players on a single machine? Can you make them with persistent high scores systems? Can you make network chat clients?  Can you embed a chat client into your game?  

If you answered "yes" to all of them, congratulations. you don't need those books.  Otherwise, stop at the first "no" and we can help you grow from there.

 

Or we can approach this assuming you know a bit more, with broader questions.  

On what technology scale are you looking to build? What tools are you planning on using?

You could start with RPG Maker and put together a fairly good RPG with very little work, and with minimal software development skill.  Even game development beginners can turn out a decent (yet small) game in a few days with that.  You might try building something with GameMaker:Studio or GameSalad or Construct, they're rather comprehensive and easy to use even for people not familiar with programming. You might try something even bigger requiring more skills and effort, such as using Unreal or Unity as your engine, developing on from there. You might try simpler tools and libraries, maybe leverage SDL or Marmalade or LibGDX or Cocos2D-x, or any other libraries. Or you might be considering building everything from scratch yourself, which is about the most ambitious plan.

Is anything blocking you from using those tools effectively?

Do you have what it takes to build the game you want with those tools?  If you're using tools for C++, or C#, or Java, or some other language, do you know them well enough to build what you want to build?  If not, there is your thing to learn.  Do you need more knowledge or more experience on specific topics within those tools? Only you know what you already know on the topics. Maybe you have minimal skill with the language. Maybe you're somewhat experienced with simple programming but need to learn more about specific topics, perhaps algorithms and data structures regarding containers, or searching, or graph manipulation, or state machines, or IPC, or networking, or whatever else. 

You mention learning about server side, so you may need to get comfortable working with databases, get comfortable with writing communications libraries and protocols, get comfortable working with connectivity meshes and data persistence requirements, or keeping data consistent between machines, or working with locked resources, or understanding data isolation levels.

If you already know how to use those tools effectively, then try again with the first list. Can you make "guess the number" using the tools? Connect four? Pong? Tetris-style and Breakout-style games? Networked chat? Networked Tetris-style and Breakout-style games? Galaga-style shooters? Networked Galaga-style shooters? 

 

At some point there is a boundary; one thing you are able to make today, the other thing you currently lack the skills or experience to make.  Nobody knows what you should be learning (not even you) until you understand where that boundary is.

We need to understand what it is that you want to learn. With that we can direct you to resources to help you learn it.

Adding to what has already been said...

5 hours ago, majidarif said:

I currently have these books

You have 90% of what you need to know. Given that you asked about this 3 years ago as well, I think your real problem is that you're procrastinating and waiting for the One True Book that will give you everything you need, instead of having a go right now and learning as you go along. But major software projects like this are not things you can just copy out of a book.

You have a 'shopping list' of all the things you want to know about - but almost all of them are covered to some degree in the books you have. Why do you think that the next book will give you a better answer than they already did?

Regarding those specific things, here's my very short summary:

Principles, ideas with example code or pseudocodes... - the Massively Multiplayer Game Development book has plenty of those. If they don't fit your project, start a topic here about your specifics, and how they differ from what you've read.

Project structure - start simple, and refactor as you go. You might want to consider keeping your server code and client code in separate libraries, maybe with shared code in a 3rd library. The rest is entirely up to you.

Code structure - this is the same as project structure.

How to properly structure the game loop - there are many articles on the game loop, all of which can work for you.

How to handle zoning - depends how you want zones to work. Pick something, then you can ask a specific question.

How/Where to handle AI - the server runs AI for the non-player characters. Clients will handle NPCs in a similar way to how they handle other players, i.e. the server tells the clients what they're doing.

Threading (what should be in separate threads) - whatever you like. Probably nothing, to begin with, until you get a decent understanding of what can be multithreaded. This is not MMO specific.

Multi servers (what should be in a separate server/machine) - again, whatever you like, and probably nothing to begin with.

Putting it all together - just do all the above things.

 

After reading the replies. I realized that Kylotan is right, I am procrastinating. I keep worrying that I might start with incomplete knowledge and would make bad design decisions early on which could cause huge problems when I move to production.

Now, I'm thinking I should just start and ask specific questions along the way.

Thank you to everyone who replied. Will be back with a bunch of questions soon. :)

Details on project:

  • Client: C++, not much problem here. (work in progress)
  • Server: Golang, design confusions here. (procrastinating)
  • Database: MySQL/Couchbase, not sure yet but no problem here.

I'm also collecting game programming books. Are there any books you guys can recommend?

You will make bad design decisions early on. So do the professionals. The difference between them and the rest is that the professionals just get on with things, and fix things up as they go.

Regarding your server 'procrastination', I'd suggest just getting started on receiving information from a client and broadcasting it out to other clients. Don't do too much client work until you have this working because the server controls the game, not the client.

16 hours ago, majidarif said:

I'm also collecting game programming books. Are there any books you guys can recommend?

Again, without knowing exactly what problems you are facing and what skills you currently have, recommendations are nearly useless.  With that in mind, here's my recommendations for books

Since it seems you're just looking for a collection of books, I'd recommend whatever is on the bargain bin at the bookstore and whatever you can find in secondhand stores and yard sales.  Some will have good stuff in them, you'll be just as likely to read them, and they're cheap so you don't feel as bad when you sell them yourself at a yard sale or secondhand bookstore.

Well, my book of course :-). It is titled "Development and Deployment of Multiplayer Online Games" (planned at 9 volumes, currently Vol. I is printed, and Vol. II - Vol. III are available as early beta). E-book versions are available on Leanpub: https://leanpub.com/b/development-and-deployment-of-multiplayer-online-games-part-arch, and paperback Vol. I got to Amazon a few days ago. 

A bit of bragging - "Early Praise" page within the book includes references by such people as Glenn Fiedler, Matt Pritchard, two GDC speakers, and CTO-like guys from more than one billion-dollar company...

This topic is closed to new replies.

Advertisement