Looking for RTS design principals with regards to synchronized simulations

Started by
10 comments, last by hplus0603 16 years, 6 months ago
I am not sure this is exactly the right forum for this, but since this question is so closely bound to networking and multi-player, I figured this was the best place for this question. I am looking for a good solid primer, be it a book or web site (preferred) on designing an RTS game with respect to building a synchronized multi-player RTS simulation. Some points of interest to me on this are: 1. How to design game objects (a player's resource stockpile, tanks, infantry, etc...) to be used in an RTS simulation. For example, getting a game object's CRC for synchronization purposes is important. What else do they need to do? 2. What are the things I need to think about and manage that I would not need to do in a single player RTS? IE: I know I need 'turns' and command stacks and whatnot. What else do I need to know about? 3. What are some good ways to make each kind of thing from question 2? IE: What should a command stack look like, how and where should CRCs be done, etc... 4. On the network level how does all of the above tie in? Whats the best way to start a simulation? How do I handle players 'dropping'? If someone de-synchs, how can I recover or should I even try and recover? What is the best way to build network part? Peer to peer? Client-server? How do I build it in a way to minimize lockups (a client stops responding, but doesn't hang up)? Anyway I am looking for a source of information focusing on these kinds of issues. I am not so much looking for something to explain pathing or how to make terrain, etc... There is one book I saw on this sites book list on RTS game design, but no one reviewed it and amazon only has 3 reviews (of mixed results). It is "Programming an RTS Game with Direct3D" by Carl Granburg. Is it any good? I can't tell from the write up if it covers the multi-player aspect. AFAIK it is about single player RTS games, which doesn't help me at all.
Advertisement
You could start with Forum FAQ, and topics that are already posted.

While not organized reference material, it may at least introduce you to some of the applicable topics.

The rest will depend on your experience with technical side. RTS and FPS projects tend to be heavily (sometimes almost too heavily) optimized to offer any high-level insight, and much of the source and example code I've seen doesn't address high-level issues adequately, since they go into compromises on any level.

Game Programming Gems has multiple quite reasonable articles on problems encountered in general scalable game design, but neither is a silver bullet by itself.

Also - everything will be a compromise. So "good" will depend almost exclusively on your particular needs. Only the higher level concepts are generally applicable, their implementation will be almost always be very specific to that particular design.

1. Is CRC important? You can use component model, hard-coded objects, fully networked objects, you can serialize them, or synchronize their state explicitly

2. State synchronization and latency compensation. There's several different methods to deal with it. Time Warp, bucket synchronization, lock-step, fully async, transactions, all of which have up and downsides. Forum FAQ also has article on more exotic ways.

3. Too complex. There is no one answer.

4. All of this will depend on your choice. P2P tends to be much more complex due to n-way communication. But there's pros and cons. The ability to reconnect might be desirable or possible, but doesn't need to be. There is no best here, weighing pros and cons of each (physics, even collision, is much harder on P2P)
I read the forum faq, or I thought I did, before I posted here. It didn't answer these questions, maybe I read A faq, but not the right one? I read the stickied one on top.
Nope, none of this is answered in any FAQ I have found.
http://www.gamasutra.com/features/20010322/terrano_01.htm
The forum points to the 1,500 archers article (the Gamasutra link above).
I'd say that's pretty definitive when it comes to the lock-step RTS model.
enum Bool { True, False, FileNotFound };
Quote:Original post by hplus0603
The forum points to the 1,500 archers article (the Gamasutra link above).
I'd say that's pretty definitive when it comes to the lock-step RTS model.


It's also what I'd consider one of the three best articles on reasonably low level multiplayer game architecture, the other two being the Tribes 2 paper from a number of years back, and Simon Hayes brilliant presentation at OGDC this year.
I read that, it is a good article. Is there anything with a more in-depth analysis? Something with code design patterns for RTS systems? Are there any good books that anyone can recommend?
Gamasutra also has some articles about the AI design for AoE, having to do with how to write a fun AI that doesn't "cheat."

In general, you'll have more luck if you are specific about what problem you want to solve. Animating lots of characters on the screen at once? Queuing commands to the server, dispatching to all clients, and actually executing on the client when it gets back (in sync)? Designing the right level of rock-paper-scissors for enjoying gameplay? If you can formulate your questions into more specific slots, you're much more likely to get useful answers.

To answer your question, as stated: no, there is no comprehensive write-up of everything you need to write specifically an RTS, from start to end.
Except, possibly, the book "Programming an RTS Game with Direct3D," which I haven't read, so I have no idea how good it is.
enum Bool { True, False, FileNotFound };
No I am not looking for 'everything' about an RTS. Let me try and put it this way:

Take the set of everything you need to know about making a multiplayer RTS and the subtract everything you need to know about making a single player RTS.

What is left over, that is what I want to know. In a single player RTS you do not need to worry about synchronized simulations or network communications or dealing with latency and all that.

I know what a socket is and I have done some basic client-server apps, so I do not need a low level tutorial on that stuff. However just above that layer, and going all the way up to the part of RTS implementation where you are no longer concerned with multi-player issues and stopping there. It is that block of knowledge I seek.

The most ideal example for me would be a skelleton of an engine that handles all that. I do not care if it is just using X's and O's on a console screen as long as it deals with the core "multi-player and networking" issues specific to RTS games.

This topic is closed to new replies.

Advertisement