--- deliantra/server/common/map.c 2006/02/22 18:53:48 1.4 +++ deliantra/server/common/map.c 2006/03/20 23:07:50 1.8 @@ -40,6 +40,9 @@ extern int nrofallocobjects,nroffreeobjects; +void (*load_original_map_callback)(mapstruct *map); +void (*load_temporary_map_callback)(mapstruct *map); +void (*clean_temporary_map_callback)(mapstruct *map); /* * Returns the mapstruct which has a name matching the given argument. @@ -678,7 +681,7 @@ fatal(OUT_OF_MEMORY); } -/* Creatures and returns a map of the specific size. Used +/* Create and returns a map of the specific size. Used * in random map code and the editor. */ mapstruct *get_empty_map(int sizex, int sizey) { @@ -1051,6 +1054,8 @@ if (!MAP_DIFFICULTY(m)) MAP_DIFFICULTY(m)=calculate_difficulty(m); set_map_reset_time(m); + if (load_original_map_callback) + load_original_map_callback(m); return (m); } @@ -1100,6 +1105,8 @@ load_objects (m, fp, 0); close_and_delete(fp, comp); m->in_memory=MAP_IN_MEMORY; + if (load_temporary_map_callback) + load_temporary_map_callback(m); return m; } @@ -1145,7 +1152,7 @@ /* This goes through map 'm' and removed any unique items on the map. */ static void delete_unique_items(mapstruct *m) { - int i,j,unique=0; + int i,j,unique; object *op, *next; for(i=0; itmpname == NULL) return; + if (clean_temporary_map_callback) + clean_temporary_map_callback (m); (void) unlink(m->tmpname); } @@ -2039,48 +2048,6 @@ return m; } -// return wether map2 is adjacent to map1 and store their distance -// in dx/dy if yes. -static int adjacent_map (mapstruct *map1, mapstruct *map2, int *dx, int *dy) -{ - if (!map1 || !map2) - return 0; - - else if (map1 == map2) - *dx = *dy = 0; - - else if (map1->tile_map[0] == map2) // up - (*dx = 0), (*dy = -MAP_HEIGHT (map2)); - else if (map1->tile_map[1] == map2) // right - (*dx = MAP_WIDTH (map2)), (*dy = 0); - else if (map1->tile_map[2] == map2) // down - (*dx = 0), (*dy = MAP_HEIGHT (map2)); - else if (map1->tile_map[3] == map2) // left - (*dx = -MAP_WIDTH (map2)), (*dy = 0); - - else if (map1->tile_map[0] && map1->tile_map[0]->tile_map[1] == map2) // up right - (*dx = MAP_WIDTH (map2)), (*dy = -MAP_HEIGHT (map1->tile_map[0])); - else if (map1->tile_map[0] && map1->tile_map[0]->tile_map[3] == map2) // up left - (*dx = -MAP_WIDTH (map2)), (*dy = -MAP_HEIGHT (map1->tile_map[0])); - else if (map1->tile_map[1] && map1->tile_map[1]->tile_map[0] == map2) // right up - (*dx = MAP_HEIGHT (map1->tile_map[1])), (*dy = -MAP_WIDTH (map2)); - else if (map1->tile_map[1] && map1->tile_map[1]->tile_map[2] == map2) // right down - (*dx = MAP_HEIGHT (map1->tile_map[1])), (*dy = MAP_WIDTH (map2)); - else if (map1->tile_map[2] && map1->tile_map[2]->tile_map[1] == map2) // down right - (*dx = MAP_WIDTH (map2)), (*dy = MAP_HEIGHT (map1->tile_map[2])); - else if (map1->tile_map[2] && map1->tile_map[2]->tile_map[3] == map2) // down left - (*dx = -MAP_WIDTH (map2)), (*dy = MAP_HEIGHT (map1->tile_map[2])); - else if (map1->tile_map[3] && map1->tile_map[3]->tile_map[0] == map2) // left up - (*dx = -MAP_HEIGHT (map1->tile_map[3])), (*dy = -MAP_WIDTH (map2)); - else if (map1->tile_map[3] && map1->tile_map[3]->tile_map[2] == map2) // left down - (*dx = MAP_HEIGHT (map1->tile_map[3])), (*dy = MAP_WIDTH (map2)); - - else // not "adjacent" enough - return 0; - - return 1; -} - /** * Return whether map2 is adjacent to map1. If so, store the distance from * map1 to map2 in dx/dy.