/* The Mana World Copyright 2004 The Mana World Development Team This file is part of The Mana World. The Mana World is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. The Mana World is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with The Mana World; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _MAP_H #define _MAP_H #define MAP_WIDTH 200 #define MAP_HEIGHT 200 #define TILESET_WIDTH 30 #define WALKABLE 0 #define NOT_WALKABLE 1 /** Struct representing a tile. A tile is composed of 3 layers. 1st: Ground layer (used for grass, water, ...) -> bit 0-9 of data 2nd: Fringe layer (objects that are overlapped by the player) -> bit 10-19 of data 3rd: Over layer (roofs, tree leaves, ...) -> bit 20-29 Walk flag: tells if a tile is walkable or not -> bit 30 Animation flag: tells if a tile is animated or not -> bit 31 data field: 1st byte: [1][1][1][1][1][1][1][1] 2nd byte: [1][1][2][2][2][2][2][2] 3rd byte: [2][2][2][2][3][3][3][3] 4th byte: [3][3][3][3][3][3][W][A] Legend: 1 - First layer 2 - Second layer 3 - Third layer W - Walkability flag A - Animated tile flag flags field: [l][l][f][f][f][f][f][f][f] Legend: l - Animated layer f - future use */ struct TILE { char data[4]; char flags; }; struct MAP { TILE tiles[MAP_WIDTH][MAP_HEIGHT]; char tileset[20]; char bg_music[20]; }; bool load_map(char *map_file); void set_walk(short x_c, short y_c, bool walkable); bool get_walk(short x_c, short y_c); unsigned char get_path_walk(unsigned short x, unsigned short y); bool get_anim(short x_c, short y_c, char layer); void set_tile(short x_c, short y_c, char layer, unsigned short id); unsigned short get_tile(short x_c, short y_c, char layer); /** Return tile x coordinate in tileset */ inline int get_tile_x(int x, int y, int layer) { return get_tile(x,y,layer)%TILESET_WIDTH; } /** Return tile y coordinate in tileset */ inline int get_tile_y(int x, int y, int layer) { return get_tile(x,y,layer)/TILESET_WIDTH; } #endif