It is assumed that readers of the documentation are familiar with MMOSG. Most of it won't make sense if they aren't!

Introduction

Welcome to the MMOSG Client Documentation! This page attempts to be a complete and completely informative resource on all aspects of MMOSG's protocol and core concepts. This is not particularly useful for server developers; I shall have to write a separate documentation for them. Much of what you need can probably be inferred directly from other client code, but MAKE SURE TO READ THE Guarantees and Requirements! Players of your client will not appreciate being disconnected because you didn't pay attention to them.

Objects and Banners

One of the most important concepts in MMOSG is the banner system - it's the only way to tell who owns an object, or who is on what team. A banner is just a 32-bit unsigned integer - the index in a list of strings. The string it indexes is the banner text. Banners are guaranteed to be unique under any logical circumstance - they are only cleared when every client has disconnected. They are also guaranteed to be descriptive to the program itself - they are, for instance, how you determine teammates. Banners are absolute: nothing is left to chance with them, which is why there's no way to hot-delete banner entries. This ensures that they will always be stable even under ridiculous server conditions and bizarre network errors. The banner 0 is reserved - it's usually "None", but different parts of your program should handle it specifically. Such as, all chat messages from banner 0 should be treated as highest-priority and marked "SYSTEM" or "GOD" or similar. You should keep a cache of all banners the server sends at all times regardless of the state of that banner; the only valid banner lifetime is until server reset (practically until the client disconnects).

In MMOSG, objects are defined by 7 properties:

The Protocol

The MMOSG protocol is in the most memory compact possible format.