aesop.h

Go to the documentation of this file.
00001 /*
00002  * aesop.h
00003  *
00004  * Bogus header file for doxygen documentation.
00005  *
00006  * Don't use this file!
00007  */
00008 
00009 ////////////////////////////////////////////////////////////////////////////////
00010 ///
00011 /// \page aesop-mgf-page AESOP Multiplayer Game Framework
00012 ///
00013 /// \n
00014 /// <b>WARNING:</b> This framework is still in pre-alpha and is subject to
00015 /// a high rate of churn.  I am anticipating an alpha release in or around
00016 /// November of 2010.  Until then I can't support this for anything but my own
00017 /// development!
00018 ///
00019 /// \n
00020 /// The AESOP project is a framework for storytellers.  In particular, it is
00021 /// designed for creating multiplayer networked 3D games.  It has these
00022 /// objectives:
00023 ///
00024 ///  - <b>Cooperative:</b> a primary goal is to make it easy for storytellers
00025 ///     to allow multiple people to experience the \story together.  This
00026 ///     includes multiple people participating on the same client (\e e.g,
00027 ///     shared or split-screen).  
00028 ///
00029 ///  - <b>Open:</b> this is an open source project and uses open (well, public)
00030 ///     protocols.
00031 ///
00032 ///  - <b>Story-driven:</b> AESOP is intended for storytellers.  This means
00033 ///     the data model is designed around providing \story elements, not just
00034 ///     physical rendering.  AESOP is not a deathmatch engine!  It is built
00035 ///     for non-linear plot evolution.
00036 ///
00037 ///  - <b>Extendible:</b> A purpose of the project is to provide a simple
00038 ///     but easily extendable framework so storytellers can
00039 ///     create immersive experiences.  The existing framework is a game
00040 ///     engine on its own, but new capabilities can be swapped in or added.
00041 ///
00042 /// \n
00043 /// AESOP as a framework is built to be highly extendible.  In fact, most of
00044 /// the engineering involves incorporating as many already-available libraries
00045 /// as possible, while keeping coupling between components to zero.
00046 /// See \ref reqs.
00047 ///
00048 /// For instance, all of these should be trivial to swap out or extend:
00049 ///   - 3D models including animation
00050 ///   - physics engine
00051 ///   - rendering system
00052 ///   - artificial intelligence
00053 ///
00054 /// The core AESOP package includes default implementations of all of the
00055 /// above, so it is immediately usable.  The defaults use Bullet
00056 /// (http://www.continuousphysics.com/) for physics, there are a
00057 /// combination of 3D model formats supported, OpenGL and \glut are used
00058 /// for rendering.
00059 ///
00060 /// The basic, non-swappable pieces of AESOP are the core client/server
00061 /// communications framework.  These are client and server libraries which
00062 /// establish the basic communication protocols, deal with discovery
00063 /// and lag, and provide easy means for client game code to talk to the
00064 /// server.  This is built to be as general as possible, so that games needing
00065 /// custom communication with the server can add it easily.
00066 ///
00067 /// In addition to tools and utilities, there are two key binaries that the
00068 /// framework supports, intended for distribution with the final game:
00069 ///
00070 ///  - \b server: This is designed to be run on hosts without any graphics
00071 ///     capability.  So the core data models and decoupling help ensure that
00072 ///     server code does not pick up any dependencies on rendering libraries.
00073 ///     Physics is run authoritatively on the server.  All AI runs on the
00074 ///     server.  
00075 ///
00076 ///  - \b client: This is the code that runs on a player's machine, including
00077 ///     full graphics and sound.  The client also runs the physics engine
00078 ///     in a predictive mode to accommodate network lag.
00079 ///
00080 /// \n
00081 /// This is the main intended use case for players:
00082 ///  - A group of people decide they'd like to play a game.
00083 ///  - The group finds the gzip'd package containing the executables and
00084 ///      data files for the game they want to play.
00085 ///  - One of them installs the server on an accessible host.
00086 ///  - Everyone installs the client on their local machines.  Some
00087 ///     players could share the same client (play in
00088 ///     split screen or a shared screen, depending on the \story).
00089 ///  - The person running the server starts the server, and lets everyone
00090 ///     know the server address and port.
00091 ///  - All players start their local client, and connect to the server.
00092 ///  - Everyone plays the game!
00093 ///
00094 /// \n
00095 /// This is the main intended use case for storytellers:
00096 ///  - The storyteller thinks of a \story to tell.
00097 ///  - The \story is fully specified in a directory structure.  In AESOP, you
00098 ///     can think of the \story as a large rich database that contains everything
00099 ///     the client and server need to present the \story.  This
00100 ///     includes things such as:
00101 ///     - maps
00102 ///     - objects
00103 ///     - 3D models and textures for display (only used by client)
00104 ///     - events and triggers
00105 ///     - \story state (objectives accomplished, triggers hit, \e etc.)
00106 ///  - The storyteller picks or builds the appropriate server and client
00107 ///     binaries to run.
00108 ///  - The storyteller tests out their \story. 
00109 ///  - When ready, the storyteller gzip's their \story directory tree
00110 ///     (including the media and executable binaries)
00111 ///     and makes it publicly available for playing.
00112 ///
00113 /// \n
00114 /// Massively-multiplayer mode (such as MMOPRGs, see
00115 /// http://en.wikipedia.org/wiki/MMORPG) is not supported.  AESOP aims
00116 /// to support around 16 players at once.  The primary use case is a shared
00117 /// experience with a small group immersed in a story-driven world.
00118 /// If you are looking for a MMORPG experience, try WorldForge
00119 /// (http://www.worldforge.org/).
00120 ///
00121 /// AESOP is probably best for LAN play, although the wire protocol is
00122 /// kept as spartan as possible to allow WAN play.  AESOP uses standard but
00123 /// simple techniques to accommodate some network lag.
00124 ///
00125 /// \n
00126 /// AESOP is released freely to the community under the BSD license
00127 /// (see http://en.wikipedia.org/BSD_licenses).  Some portions of
00128 /// the code are from other authors and those areas may be subject to other
00129 /// licenses.  Those exceptions are called out clearly.
00130 ///
00131 /// \n
00132 /// Starting points:
00133 ///  - <b>Overall Documentation:</b> See \ref aesop
00134 ///  - <b>Storytellers:</b> if you want to start creating your own stories
00135 ///        using existing binaries, start with the \ref storytellers
00136 ///  - <b>Developers:</b> if you want to start extending the framework to build
00137 ///        your own binaries, see \ref dev_guide
00138 ///  - <b>Players:</b> if you want to start playing games, see \ref users_guide
00139 ///  - <b>Frequently Asked Questions:</b> see \ref faq
00140 ///
00141 ////////////////////////////////////////////////////////////////////////////////
00142 
00143 
00144 ////////////////////////////////////////////////////////////////////////////////
00145 ///
00146 /// \defgroup aesop AESOP Documentation
00147 ///
00148 /// \n
00149 /// This is the root of all AESOP Documentation.
00150 ///
00151 /// See the home page at http://aesop-mgf.sourceforge.net/ ,
00152 /// or the Source Forge page at https://sourceforge.net/projects/aesop-mgf/ .
00153 ///
00154 ////////////////////////////////////////////////////////////////////////////////
00155