--- deliantra/server/socket/info.C 2007/01/09 21:32:43 1.31 +++ deliantra/server/socket/info.C 2007/04/24 12:32:16 1.37 @@ -1,26 +1,26 @@ /* - CrossFire, A Multiplayer game for X-windows - - Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team - Copyright (C) 2002 Mark Wedel & Crossfire Development Team - Copyright (C) 1992 Frank Tore Johansen - - This program 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 - (at your option) any later version. - - This program 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 this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - The authors can be reached via e-mail at -*/ + * CrossFire, A Multiplayer game for X-windows + * + * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team + * Copyright (C) 2002 Mark Wedel & Crossfire Development Team + * Copyright (C) 1992 Frank Tore Johansen + * + * This program 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 + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * The authors can be reached via e-mail at + */ /** * \file @@ -295,8 +295,6 @@ void new_info_map_except (int color, maptile * map, object *op, const char *str) { - player *pl; - for_all_players (pl) if (pl->ob != NULL && pl->ob->map == map && pl->ob != op) new_draw_info (color, 0, pl->ob, str); @@ -309,8 +307,6 @@ void new_info_map_except2 (int color, maptile * map, object *op1, object *op2, const char *str) { - player *pl; - for_all_players (pl) if (pl->ob != NULL && pl->ob->map == map && pl->ob != op1 && pl->ob != op2) new_draw_info (color, 0, pl->ob, str); @@ -323,8 +319,6 @@ void new_info_map (int color, maptile * map, const char *str) { - player *pl; - for_all_players (pl) if (pl->ob != NULL && pl->ob->map == map) new_draw_info (color, 0, pl->ob, str); @@ -392,8 +386,8 @@ * the player does not have a golem, reset some things. */ case range_golem: - if (pl->contr->ranges[range_golem] != NULL) - sprintf (obuf, "Range: golem (%s)", &pl->contr->ranges[range_golem]->name); + if (object *golem = pl->contr->ranges[range_golem]) + sprintf (obuf, "Range: golem (%s)", &golem->name); else { pl->contr->shoottype = range_none; @@ -427,6 +421,15 @@ sprintf (buf, "Player: %s %s", (const char *) pl->name, (const char *) pl->contr->own_title); } +// formerly a macro, used only by magic map, so optimised it out +static inline faceidx +GET_MAP_FACE (maptile *m, int x, int y, int layer) +{ + if (object *op = GET_MAP_FACE_OBJ (m, x, y, layer)) + return op->face; + else + return 0; +} /** * Helper for magic map creation. @@ -445,7 +448,6 @@ int x, y, dx, dy, mflags; sint16 nx, ny; maptile *mp; - New_Face *f; for (dx = -1; dx <= 1; dx++) { @@ -467,20 +469,24 @@ if (map_mark[MAGIC_MAP_HALF + x + MAGIC_MAP_SIZE * (MAGIC_MAP_HALF + y)] == 0) { - f = GET_MAP_FACE (mp, nx, ny, 0); - if (f == blank_face) - f = GET_MAP_FACE (mp, nx, ny, 1); + int f = GET_MAP_FACE (mp, nx, ny, 0); if (f == blank_face) - f = GET_MAP_FACE (mp, nx, ny, 2); + { + f = GET_MAP_FACE (mp, nx, ny, 1); + if (f == blank_face) + f = GET_MAP_FACE (mp, nx, ny, 2); + } + + int magicmap = faces [f].magicmap; /* Should probably have P_NO_MAGIC here also, but then shops don't * work. */ if (mflags & P_BLOCKSVIEW) - map_mark[MAGIC_MAP_HALF + x + MAGIC_MAP_SIZE * (MAGIC_MAP_HALF + y)] = FACE_WALL | (f ? f->magicmap : 0); + map_mark[MAGIC_MAP_HALF + x + MAGIC_MAP_SIZE * (MAGIC_MAP_HALF + y)] = FACE_WALL | magicmap; else { - map_mark[MAGIC_MAP_HALF + x + MAGIC_MAP_SIZE * (MAGIC_MAP_HALF + y)] = FACE_FLOOR | (f ? f->magicmap : 0); + map_mark[MAGIC_MAP_HALF + x + MAGIC_MAP_SIZE * (MAGIC_MAP_HALF + y)] = FACE_FLOOR | magicmap; magic_mapping_mark_recursive (pl, map_mark, x, y); } } @@ -488,7 +494,6 @@ } } - /** * Creates magic map for player. * @@ -504,14 +509,12 @@ * strength is an initial strength*2 rectangular area that we automatically * see in/penetrate through. */ - void magic_mapping_mark (object *pl, char *map_mark, int strength) { int x, y, mflags; sint16 nx, ny; maptile *mp; - New_Face *f; for (x = -strength; x < strength; x++) { @@ -520,23 +523,26 @@ mp = pl->map; nx = pl->x + x; ny = pl->y + y; + mflags = get_map_flags (pl->map, &mp, nx, ny, &nx, &ny); if (mflags & P_OUT_OF_MAP) continue; - else + + int f = GET_MAP_FACE (mp, nx, ny, 0); + if (f == blank_face) { - f = GET_MAP_FACE (mp, nx, ny, 0); - if (f == blank_face) - f = GET_MAP_FACE (mp, nx, ny, 1); + f = GET_MAP_FACE (mp, nx, ny, 1); if (f == blank_face) f = GET_MAP_FACE (mp, nx, ny, 2); } + int magicmap = faces [f].magicmap; + if (mflags & P_BLOCKSVIEW) - map_mark[MAGIC_MAP_HALF + x + MAGIC_MAP_SIZE * (MAGIC_MAP_HALF + y)] = FACE_WALL | (f ? f->magicmap : 0); + map_mark[MAGIC_MAP_HALF + x + MAGIC_MAP_SIZE * (MAGIC_MAP_HALF + y)] = FACE_WALL | magicmap; else { - map_mark[MAGIC_MAP_HALF + x + MAGIC_MAP_SIZE * (MAGIC_MAP_HALF + y)] = FACE_FLOOR | (f ? f->magicmap : 0); + map_mark[MAGIC_MAP_HALF + x + MAGIC_MAP_SIZE * (MAGIC_MAP_HALF + y)] = FACE_FLOOR | magicmap; magic_mapping_mark_recursive (pl, map_mark, x, y); } }