COAL - Client Object Aggregation Library


COAL is a C++ utility library for client and editor developers. It provides:

Client developers can use COAL to handle data storage and to act as a layer between the application and the Atlas libraries. As map updates come in from the server, COAL will process them and update its internal database. The client app can then query COAL as it needs, for map rendering and so forth. COAL may eventually also handle character inventory data caching and other useful object handling features.

COAL stores map data as 3D regions. If the client app enables COAL's 2D mode, COAL will also translate the regions into a map of 2D tiles which a 2D client can render as it sees fit, using whatever media repository it wants.

NOTE: COAL and related components like libAtlas and the map format are still in flux, so the focus, goals, and dependencies of COAL may change in response to its changing environment. If you see anything that's silly or downright wrong with the code and its implementation, please let me know. The purpose of COAL is to make life easier for client developers, so anything I can do to make it more useful is a step in the right direction.


COAL is actually divided into two discrete libraries, depending on what functionality you need:

Generic database for storing and accessing objects (uses void*) in a 3D space. Includes coordinate system management, automated culling of old regions, and an abstract query mechanism. Also adds support functions for converting Atlas's polygonal map shapes into filled 2D tile grids. (Could be used outside of WF.)

Provides an easy-to-use wrapper around libAtlas, including automated map-loading (see libcoal) and other higher-level manipulations of Atlas::Object and friends. (Requires WF/Atlas.)

Getting COAL

Latest development sources are in CVS.

John R. Sheets