Agar Logo

Agar 1.7 Manual

(Printable Version)


#include <agar/core.h>
#include <agar/map.h>


The Agar MAP library implements a map of fixed-size tiles which allow different elements to be stacked. Built-in element types include:
MAP_ITEM_TILEGraphical surface (rendered RG_Tile(3) element).
MAP_ITEM_IMGGraphical surface (image file reference).
MAP_ITEM_LINKReference to some other node, possibly on another map.

In addition to the built-in (static) elements, dynamic map objects (instances of MAP_Object(3) or subclasses thereof) may be attached to the MAP and in the case of graphical elements, rendered either in 2D or 3D.


For 3D purposes, graphical tiles define a height h and a z coordinate (where z = 0 is referred to as the standard plane of the map).

Graphical tiles also define two 2D displacements (in pixels) of the image from the tile's origin, a centering offset typically set by the developer as part of the design (although usable programmatically to produce effects), and the motion offset for real-time animation purposes. If the map is drawn to a different scale than 1:1, the centering offset will be scaled to the new tile size, but the motion offset will not.

A chain of graphical transformations can be applied per tile. The rendering engine (i.e., the MAP_View(3) widget) will maintain a cache of transformed tiles in graphics memory for best efficiency.


AG_Object(3)-> MAP.


MAP * MAP_New (void *parent, const char *name)

int MAP_AllocNodes (MAP *map, Uint w, Uint h)

void MAP_FreeNodes (MAP *map)

void MAP_SetZoom (MAP *map, int camera, Uint factor)

MAP_New() allocates, initializes and attaches a new map.

MAP_AllocNodes() allocates w x h nodes, assuming that no node is currently allocated. MAP_AllocNodes() returns 0 on success or -1 on failure. The maximum allowable geometry is defined by MAP_WIDTH_MAX and MAP_HEIGHT_MAX.

The MAP_FreeNodes() routine releases the nodes allocated by map. The map must be locked.

MAP_Resize() reallocates the nodes arrays, initializing the new nodes and freeing the excess ones. MAP_Resize() returns 0 on sucess or -1 on failure.

MAP_SetZoom() sets the zoom factor for a given map view. Actors are displayed to this scale.


void MAP_NodeInit (MAP_Node *node)

void MAP_NodeDestroy (MAP *map, MAP_Node *node)

int MAP_NodeLoad (MAP *map, AG_DataSource *ds, MAP_Node *node)

void MAP_NodeSave (const MAP *map, AG_DataSource *ds, const MAP_Node *node)

MAP_NodeInit() initializes the node structure. MAP_NodeDestroy() frees all resources allocated by node.

MAP_NodeLoad() loads the contents of node (presumed initialized and empty), from data source ds. MAP_NodeSave() saves the contents of node to ds. Both functions are called implicitely by the load() and save() operations of MAP.


void MAP_ItemInit (MAP_Item *mi)

void MAP_ItemDestroy (MAP *map, MAP_Item *mi)

MAP_ItemInit() initializes the mi structure. MAP_ItemDestroy() frees all resources allocated for mi.


void MAP_MoveItem (MAP *mapSrc, MAP_Node *nodeSrc, MAP_Item *miSrc, MAP *mapDst, MAP_Node *nodeDst, int layerDst)

MAP_Item * MAP_CopyItem (const MAP_Item *miSrc, MAP *mapDst, MAP_Node *nodeDst, int layerDst)

void MAP_DelItem (MAP *map, MAP_Node *node, MAP_Item *mi)

MAP_Item * MAP_TileNew (MAP *map, MAP_Node *node, RG_Tileset *ts, Uint tileID)

MAP_Link * MAP_LinkNew (MAP *map, MAP_Node *nodeDst, const char *targetMap, int x, int y, Uint8 dir)

MAP_MoveItem() moves item miSrc from nodeSrc (of mapSrc) over to nodeDst (of mapDst).

MAP_CopyItem() inserts a copy of miSrc on top of nodeDst. The copy is associated with layerDst (or -1 = the source layer).

MAP_DelItem() deletes item mi from node.

MAP_TileNew() creates a reference to the RG_Tile(3) element identified by tileID in the given RG_Tileset(3).

MAP_LinkNew() Creates a link to the node x, y of targetMap. This is the pathname of the destination map (as returned by AG_ObjectCopyName()).



The MAP class first appeared in Agar 1.0. ElectronTubeStore