#ifndef MAP_H #define MAP_H #include "Animation.h" #include "game_globals.h" // this looks like a job for... #include "VoidMan.h" #define CELL_BLOCKS_ENTITY 1 #define CELL_BLOCKS_PROJECTILE 2 #define CELL_BLOCKS_VISION 4 #define CELL_WALL 7 #define CYBERSPACE 0 #define MEATSPACE 1 struct PlayerMapData { int x; int y; int frame; char *anim; char *set; char *face; }; struct MapData { char *filename; char *name; char *session; int location; int width; int height; struct MapCell **cells; struct PlayerMapData player_data; int entity_count; struct VoidMan *entities; int trigger_count; struct VoidMan *triggers; int event_count; struct VoidMan *events; int path_count; struct PathMapData **paths; }; int initMapCells(struct MapData *map, int width, int height); int freeMapCells(struct MapData *map); int freeMapEntities(struct MapData *map); int freeMapTriggers(struct MapData *map); int freeMapEvents(struct MapData *map); int freeMapPaths(struct MapData *map); struct MapData *newMapData(); int freeMapData(struct MapData *map); int saveMapData(struct MapData *map); int loadMapData(struct MapData *map, const char *filename); struct MapCell { int flags; int decor_count; struct DecorMapData **decor; }; int pushDecorMapData(struct MapCell *cell, struct DecorMapData *decor); int popDecorMapData(struct MapCell *cell); struct EntityMapData { int x; int y; int w; int h; float radius; struct Sprite *sprite; // temp ref sprite :) char *name; // name of entity char *set; char *face; int frame; }; struct EntityMapData *newEntityMapData(); int freeEntityMapData(struct EntityMapData *entity); int pushEntityMapData(struct MapData *map, struct EntityMapData *entity); int delEntityMapData(struct MapData *map, int id); struct DecorMapData { int x; int y; int animated; int frame; struct Sprite *sprite; // temp ref sprite :) char *anim; char *set; char *face; }; struct DecorMapData *newDecorMapData(); int freeDecorMapData(struct DecorMapData *decor); struct TriggerMapData { int x; int y; int w; int h; int type; int activator; int behavior; int iter; // iterations int time; int event_count; char **events; }; struct TriggerMapData *newTriggerMapData(); struct TriggerMapData *freeTriggerMapData(struct TriggerMapData *trigger); int pushTriggerMapData(struct MapData *map, struct TriggerMapData *trigger); int delTriggerMapData(struct MapData *map, int id); struct EventMapData { char *name; int x; int y; int w; int h; int type; int param_count; int *param_type; void **params; }; struct EventMapData *newEventMapData(); struct EventMapData *freeEventMapData(struct EventMapData *event); int pushEventMapData(struct MapData *map, struct EventMapData *event); int delEventMapData(struct MapData *map, int id); struct PathMapData { int x; int y; int type; struct PathMapNode *start; }; struct PathMapNode { int x; int y; int type; struct PathMapNode *prev; struct PathMapNode *left; struct PathMapNode *right; }; int setDefaultTravelMap(char *name); int setCellFlags(struct MapData *map, int x, int y, int flags); int setPlayer(struct MapData *map, int x, int y, const char *anim, const char *set, const char *face, int frame); int initPlayer(struct MapData *map); int freePlayer(struct MapData *map); #endif