1 | /* |
1 | /* |
2 | * static char *rcsid_map_c = |
2 | * static char *rcsid_map_c = |
3 | * "$Id: map.c,v 1.4 2006/02/22 18:53:48 elmex Exp $"; |
3 | * "$Id: map.c,v 1.5 2006/02/22 19:08:43 root Exp $"; |
4 | */ |
4 | */ |
5 | |
5 | |
6 | /* |
6 | /* |
7 | CrossFire, A Multiplayer game for X-windows |
7 | CrossFire, A Multiplayer game for X-windows |
8 | |
8 | |
… | |
… | |
2037 | */ |
2037 | */ |
2038 | |
2038 | |
2039 | return m; |
2039 | return m; |
2040 | } |
2040 | } |
2041 | |
2041 | |
2042 | // return wether map2 is adjacent to map1 and store their distance |
|
|
2043 | // in dx/dy if yes. |
|
|
2044 | static int adjacent_map (mapstruct *map1, mapstruct *map2, int *dx, int *dy) |
|
|
2045 | { |
|
|
2046 | if (!map1 || !map2) |
|
|
2047 | return 0; |
|
|
2048 | |
|
|
2049 | else if (map1 == map2) |
|
|
2050 | *dx = *dy = 0; |
|
|
2051 | |
|
|
2052 | else if (map1->tile_map[0] == map2) // up |
|
|
2053 | (*dx = 0), (*dy = -MAP_HEIGHT (map2)); |
|
|
2054 | else if (map1->tile_map[1] == map2) // right |
|
|
2055 | (*dx = MAP_WIDTH (map2)), (*dy = 0); |
|
|
2056 | else if (map1->tile_map[2] == map2) // down |
|
|
2057 | (*dx = 0), (*dy = MAP_HEIGHT (map2)); |
|
|
2058 | else if (map1->tile_map[3] == map2) // left |
|
|
2059 | (*dx = -MAP_WIDTH (map2)), (*dy = 0); |
|
|
2060 | |
|
|
2061 | else if (map1->tile_map[0] && map1->tile_map[0]->tile_map[1] == map2) // up right |
|
|
2062 | (*dx = MAP_WIDTH (map2)), (*dy = -MAP_HEIGHT (map1->tile_map[0])); |
|
|
2063 | else if (map1->tile_map[0] && map1->tile_map[0]->tile_map[3] == map2) // up left |
|
|
2064 | (*dx = -MAP_WIDTH (map2)), (*dy = -MAP_HEIGHT (map1->tile_map[0])); |
|
|
2065 | else if (map1->tile_map[1] && map1->tile_map[1]->tile_map[0] == map2) // right up |
|
|
2066 | (*dx = MAP_HEIGHT (map1->tile_map[1])), (*dy = -MAP_WIDTH (map2)); |
|
|
2067 | else if (map1->tile_map[1] && map1->tile_map[1]->tile_map[2] == map2) // right down |
|
|
2068 | (*dx = MAP_HEIGHT (map1->tile_map[1])), (*dy = MAP_WIDTH (map2)); |
|
|
2069 | else if (map1->tile_map[2] && map1->tile_map[2]->tile_map[1] == map2) // down right |
|
|
2070 | (*dx = MAP_WIDTH (map2)), (*dy = MAP_HEIGHT (map1->tile_map[2])); |
|
|
2071 | else if (map1->tile_map[2] && map1->tile_map[2]->tile_map[3] == map2) // down left |
|
|
2072 | (*dx = -MAP_WIDTH (map2)), (*dy = MAP_HEIGHT (map1->tile_map[2])); |
|
|
2073 | else if (map1->tile_map[3] && map1->tile_map[3]->tile_map[0] == map2) // left up |
|
|
2074 | (*dx = -MAP_HEIGHT (map1->tile_map[3])), (*dy = -MAP_WIDTH (map2)); |
|
|
2075 | else if (map1->tile_map[3] && map1->tile_map[3]->tile_map[2] == map2) // left down |
|
|
2076 | (*dx = MAP_HEIGHT (map1->tile_map[3])), (*dy = MAP_WIDTH (map2)); |
|
|
2077 | |
|
|
2078 | else // not "adjacent" enough |
|
|
2079 | return 0; |
|
|
2080 | |
|
|
2081 | return 1; |
|
|
2082 | } |
|
|
2083 | |
|
|
2084 | /** |
2042 | /** |
2085 | * Return whether map2 is adjacent to map1. If so, store the distance from |
2043 | * Return whether map2 is adjacent to map1. If so, store the distance from |
2086 | * map1 to map2 in dx/dy. |
2044 | * map1 to map2 in dx/dy. |
2087 | */ |
2045 | */ |
2088 | static int adjacent_map(const mapstruct *map1, const mapstruct *map2, int *dx, int *dy) { |
2046 | static int adjacent_map(const mapstruct *map1, const mapstruct *map2, int *dx, int *dy) { |