ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/los.C
(Generate patch)

Comparing deliantra/server/common/los.C (file contents):
Revision 1.18 by root, Mon Jan 15 01:39:42 2007 UTC vs.
Revision 1.23 by root, Fri Feb 16 22:21:45 2007 UTC

1/* 1/*
2 CrossFire, A Multiplayer game for X-windows 2 * CrossFire, A Multiplayer game for X-windows
3 3 *
4 Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team 4 * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team
5 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 5 * Copyright (C) 2002 Mark Wedel & Crossfire Development Team
6 Copyright (C) 1992 Frank Tore Johansen 6 * Copyright (C) 1992 Frank Tore Johansen
7 7 *
8 This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by 9 * it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or 10 * the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version. 11 * (at your option) any later version.
12 12 *
13 This program is distributed in the hope that it will be useful, 13 * This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details. 16 * GNU General Public License for more details.
17 17 *
18 You should have received a copy of the GNU General Public License 18 * You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software 19 * along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 21 *
22 The authors can be reached via e-mail at <crossfire@schmorp.de> 22 * The authors can be reached via e-mail at <crossfire@schmorp.de>
23*/ 23 */
24 24
25/* Nov 95 - inserted USE_LIGHTING code stuff in here - b.t. */ 25/* Nov 95 - inserted USE_LIGHTING code stuff in here - b.t. */
26 26
27#include <global.h> 27#include <global.h>
28#include <funcpoint.h> 28#include <funcpoint.h>
41{ 41{
42 int x[4], y[4]; 42 int x[4], y[4];
43 int index; 43 int index;
44} blocks; 44} blocks;
45 45
46// 31/32 == a speed hack
47// we would like to use 32 for speed, but the code loops endlessly
48// then, reason not yet identified, so only make the array use 32,
49// not the define's.
46blocks block[MAP_CLIENT_X][MAP_CLIENT_Y]; 50blocks block[MAP_CLIENT_X][MAP_CLIENT_Y == 31 ? 32 : MAP_CLIENT_Y];
47 51
48static void expand_lighted_sight (object *op); 52static void expand_lighted_sight (object *op);
49 53
50/* 54/*
51 * Used to initialise the array used by the LOS routines. 55 * Used to initialise the array used by the LOS routines.
296 } 300 }
297 301
298 if (op->map->darkness > 0) /* player is on a dark map */ 302 if (op->map->darkness > 0) /* player is on a dark map */
299 expand_lighted_sight (op); 303 expand_lighted_sight (op);
300 304
301
302 /* clear mark squares */ 305 /* clear mark squares */
303 for (x = 0; x < op->contr->ns->mapx; x++) 306 for (x = 0; x < op->contr->ns->mapx; x++)
304 for (y = 0; y < op->contr->ns->mapy; y++) 307 for (y = 0; y < op->contr->ns->mapy; y++)
305 if (op->contr->blocked_los[x][y] < 0) 308 if (op->contr->blocked_los[x][y] < 0)
306 op->contr->blocked_los[x][y] = 0; 309 op->contr->blocked_los[x][y] = 0;
307} 310}
308
309
310
311 311
312/* returns true if op carries one or more lights 312/* returns true if op carries one or more lights
313 * This is a trivial function now days, but it used to 313 * This is a trivial function now days, but it used to
314 * be a bit longer. Probably better for callers to just 314 * be a bit longer. Probably better for callers to just
315 * check the op->glow_radius instead of calling this. 315 * check the op->glow_radius instead of calling this.
488 */ 488 */
489 for (x = (MAP_CLIENT_X - op->contr->ns->mapx) / 2 - 1; x < (MAP_CLIENT_X + op->contr->ns->mapx) / 2 + 1; x++) 489 for (x = (MAP_CLIENT_X - op->contr->ns->mapx) / 2 - 1; x < (MAP_CLIENT_X + op->contr->ns->mapx) / 2 + 1; x++)
490 for (y = (MAP_CLIENT_Y - op->contr->ns->mapy) / 2 - 1; y < (MAP_CLIENT_Y + op->contr->ns->mapy) / 2 + 1; y++) 490 for (y = (MAP_CLIENT_Y - op->contr->ns->mapy) / 2 - 1; y < (MAP_CLIENT_Y + op->contr->ns->mapy) / 2 + 1; y++)
491 check_wall (op, x, y); 491 check_wall (op, x, y);
492 492
493
494 /* do the los of the player. 3 (potential) cases */ 493 /* do the los of the player. 3 (potential) cases */
495 if (QUERY_FLAG (op, FLAG_BLIND)) /* player is blind */ 494 if (QUERY_FLAG (op, FLAG_BLIND)) /* player is blind */
496 blinded_sight (op); 495 blinded_sight (op);
497 else 496 else
498 expand_sight (op); 497 expand_sight (op);
499 498
499 //TODO: no range-checking whatsoever :(
500 if (QUERY_FLAG (op, FLAG_XRAYS)) 500 if (QUERY_FLAG (op, FLAG_XRAYS))
501 {
502 int x, y;
503
504 for (x = -2; x <= 2; x++) 501 for (int x = -2; x <= 2; x++)
505 for (y = -2; y <= 2; y++) 502 for (int y = -2; y <= 2; y++)
506 op->contr->blocked_los[dx + x][dy + y] = 0; 503 op->contr->blocked_los[dx + x][dy + y] = 0;
507 }
508} 504}
509 505
510/* update all_map_los is like update_all_los below, 506/* update all_map_los is like update_all_los below,
511 * but updates everyone on the map, no matter where they 507 * but updates everyone on the map, no matter where they
512 * are. This generally should not be used, as a per 508 * are. This generally should not be used, as a per

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines