Code documentation
Allegiance Code Documentation
Overview
The key components of Allegiance are:
The client - Allegiance.exe the server - AllSrv.exe and the UI tool AllSrvUI.exe the lobby - AllLobby.exe
In a typical configuration, there are many servers and clients which connect to a single lobby. A server can host many games at once and a client can join only one server and one game at a time. The lobby is the central communication place where servers announce themselves (and the games they're hosting) and where clients can find, join or create games on a choosen server.
These keys components share many lines of code thru the use of common libraries. The most notable ones are the messsaging API library which is built on Microsoft DirectPlay and the IGC library which handles the game logic.
Stub This article is incomplete This is an article about a topic that should be covered in more detail by the FreeAllegiance Wiki, but is lacking in content.
You can help by improving it!
ZLib and Utility libraries
IGC library
IGC stands for Internet Game Core. It's the game logic libray (API) and it's shared between clients and servers.
IGC is accessed with of a set of hierarchical abstract classes (interfaces) that hold all the game objects (ships, stations, sectors,...) and their current properties (position, speed, ...).The top interface is ImissionIGC which represents a game. ImissionIGC is implemented in the CmissionIGC class (src\Igc\missionigc.cpp). It holds lists of all other objets (ships,stations,...) and provides methods for accessing them. These lists are all implemented with template classes (Slist_utl<> and Slink_utl<> which can be found in the Utility library).
The most notable method of ImissionIGC is the the 'Update' member method. It is called every ticks on the server and it's propagated in the various IGC object lists and update their states according to the game logic.
When the game needs to create a new object, instead of instancing the object from scratch, the IGC library usually provides a 'template' for this object. The template holds several attributes that are used are initial values for the corresponding attributes of the new object. There can be many different templates for a given object type, the game must tell which template to use when creating an object. This how there can be different factions with different stations, ships and weapons. For example, the class representing active missiles is CmissileIGC, it uses the ImissileIGC interface and a new missile is initialized from a chosen CmissileTypeIGC (ImissileTypeIGC interface).
All these templates are stored in static lists of IGC objects and since they are statics, they're not transmitted between the server and the clients but instead are stored into what we call a core file. So a server only tells a client the core file name the game uses and the client will load it from its local artwork folder instead of receiving it over the network.
Consumers of the IGC library implement the IsiteIGC interface in order to called upon game state change. For instance, the game client will be called upon destruction of a ship in order to display the explosion where as the server will only propagate this event to all clients in that sectors. TBC
Stub This article is incomplete This is an article about a topic that should be covered in more detail by the FreeAllegiance Wiki, but is lacking in content.
You can help by improving it!
WinTrek - Allegiance Client
clintlib
graphic engine
effect engine
sound engine
FedSvr - Allegiance Game Server
The AGC Library
Lobby - Allegiance Lobby Server
Tools
XMunge
Pigs
mdlc
For how to use see mdlc.
