--- deliantra/server/common/map.C 2007/01/04 16:19:31 1.68 +++ deliantra/server/common/map.C 2007/01/04 20:29:45 1.70 @@ -733,10 +733,6 @@ bool maptile::load_header (object_thawer &thawer) { - char buf[HUGE_BUF], msgbuf[HUGE_BUF], maplorebuf[HUGE_BUF], *key = NULL, *value, *end; - int msgpos = 0; - int maplorepos = 0; - for (;;) { keyword kw = thawer.get_kv (); @@ -750,6 +746,11 @@ case KW_end: return true; + default: + case KW_ERROR: + LOG (llevError, "%s: skipping errornous line (%s) while reading map header.\n", &path, thawer.last_keyword); + break; + case KW_msg: thawer.get_ml (KW_endmsg, msg); break; @@ -809,10 +810,6 @@ case KW_tile_path_2: thawer.get (tile_path [1]); break; case KW_tile_path_3: thawer.get (tile_path [2]); break; case KW_tile_path_4: thawer.get (tile_path [3]); break; - - default: - LOG (llevError, "%s: skipping unknown key in map header: %s\n", &path, keyword_str [kw]); - break; } } @@ -1288,21 +1285,26 @@ static inline maptile * find_and_link (maptile *orig_map, int tile_num) { - maptile *mp = orig_map->find_sync (orig_map->tile_path [tile_num], orig_map); + maptile *mp = orig_map->tile_map [tile_num]; if (!mp) { - // emergency mode, manufacture a dummy map, this creates a memleak, but thats fine - LOG (llevError, "FATAL: cannot load tiled map %s from %s, leaking memory and worse!\n", - &orig_map->tile_path[tile_num], &orig_map->path); - mp = new maptile (1, 1); - mp->alloc (); - mp->in_memory = MAP_IN_MEMORY; + mp = orig_map->find_sync (orig_map->tile_path [tile_num], orig_map); + + if (!mp) + { + // emergency mode, manufacture a dummy map, this creates a memleak, but thats fine + LOG (llevError, "FATAL: cannot load tiled map %s from %s, leaking memory and worse!\n", + &orig_map->tile_path[tile_num], &orig_map->path); + mp = new maptile (1, 1); + mp->alloc (); + mp->in_memory = MAP_IN_MEMORY; + } } int dest_tile = (tile_num + 2) % 4; - orig_map->tile_map[tile_num] = mp; + orig_map->tile_map [tile_num] = mp; // optimisation: back-link map to origin map if euclidean //TODO: non-euclidean maps MUST GO