summaryrefslogtreecommitdiff
path: root/src/map.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/map.h')
-rw-r--r--src/map.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/map.h b/src/map.h
new file mode 100644
index 00000000..4c33928d
--- /dev/null
+++ b/src/map.h
@@ -0,0 +1,89 @@
+/**
+
+ 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