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.4 by root, Sun Sep 10 16:00:23 2006 UTC vs.
Revision 1.8 by root, Thu Dec 14 04:30:31 2006 UTC

1
2/*
3 * static char *rcsid_los_c =
4 * "$Id: los.C,v 1.4 2006/09/10 16:00:23 root Exp $";
5 */
6
7/* 1/*
8 CrossFire, A Multiplayer game for X-windows 2 CrossFire, A Multiplayer game for X-windows
9 3
10 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 4 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
11 Copyright (C) 1992 Frank Tore Johansen 5 Copyright (C) 1992 Frank Tore Johansen
22 16
23 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
25 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 20
27 The authors can be reached via e-mail at crossfire-devel@real-time.com 21 The authors can be reached via e-mail at <crossfire@schmorp.de>
28*/ 22*/
29 23
30/* Nov 95 - inserted USE_LIGHTING code stuff in here - b.t. */ 24/* Nov 95 - inserted USE_LIGHTING code stuff in here - b.t. */
31 25
32#include <global.h> 26#include <global.h>
150 * area. l is the distance from x,y to the line. 144 * area. l is the distance from x,y to the line.
151 * r is more a curiosity - it lets us know what direction (left/right) 145 * r is more a curiosity - it lets us know what direction (left/right)
152 * the line is off 146 * the line is off
153 */ 147 */
154 148
155 d1 = (float) (pow (MAP_CLIENT_X / 2 - dx, 2) + pow (MAP_CLIENT_Y / 2 - dy, 2)); 149 d1 = (float) (pow (MAP_CLIENT_X / 2 - dx, 2.f) + pow (MAP_CLIENT_Y / 2 - dy, 2.f));
156 r = (float) ((dy - y) * (dy - MAP_CLIENT_Y / 2) - (dx - x) * (MAP_CLIENT_X / 2 - dx)) / d1; 150 r = (float) ((dy - y) * (dy - MAP_CLIENT_Y / 2) - (dx - x) * (MAP_CLIENT_X / 2 - dx)) / d1;
157 s = (float) ((dy - y) * (MAP_CLIENT_X / 2 - dx) - (dx - x) * (MAP_CLIENT_Y / 2 - dy)) / d1; 151 s = (float) ((dy - y) * (MAP_CLIENT_X / 2 - dx) - (dx - x) * (MAP_CLIENT_Y / 2 - dy)) / d1;
158 l = FABS (sqrt (d1) * s); 152 l = FABS (sqrt (d1) * s);
159 153
160 if (l <= SPACE_BLOCK) 154 if (l <= SPACE_BLOCK)
194 int dx = block[x][y].x[i], dy = block[x][y].y[i], ax, ay; 188 int dx = block[x][y].x[i], dy = block[x][y].y[i], ax, ay;
195 189
196 /* ax, ay are the values as adjusted to be in the 190 /* ax, ay are the values as adjusted to be in the
197 * socket look structure. 191 * socket look structure.
198 */ 192 */
199 ax = dx - (MAP_CLIENT_X - op->contr->socket.mapx) / 2; 193 ax = dx - (MAP_CLIENT_X - op->contr->socket->mapx) / 2;
200 ay = dy - (MAP_CLIENT_Y - op->contr->socket.mapy) / 2; 194 ay = dy - (MAP_CLIENT_Y - op->contr->socket->mapy) / 2;
201 195
202 if (ax < 0 || ax >= op->contr->socket.mapx || ay < 0 || ay >= op->contr->socket.mapy) 196 if (ax < 0 || ax >= op->contr->socket->mapx || ay < 0 || ay >= op->contr->socket->mapy)
203 continue; 197 continue;
204#if 0 198#if 0
205 LOG (llevDebug, "blocked %d %d -> %d %d\n", dx, dy, ax, ay); 199 LOG (llevDebug, "blocked %d %d -> %d %d\n", dx, dy, ax, ay);
206#endif 200#endif
207 /* we need to adjust to the fact that the socket 201 /* we need to adjust to the fact that the socket
226 220
227 if (!block[x][y].index) 221 if (!block[x][y].index)
228 return; 222 return;
229 223
230 /* ax, ay are coordinates as indexed into the look window */ 224 /* ax, ay are coordinates as indexed into the look window */
231 ax = x - (MAP_CLIENT_X - op->contr->socket.mapx) / 2; 225 ax = x - (MAP_CLIENT_X - op->contr->socket->mapx) / 2;
232 ay = y - (MAP_CLIENT_Y - op->contr->socket.mapy) / 2; 226 ay = y - (MAP_CLIENT_Y - op->contr->socket->mapy) / 2;
233 227
234 /* If the converted coordinates are outside the viewable 228 /* If the converted coordinates are outside the viewable
235 * area for the client, return now. 229 * area for the client, return now.
236 */ 230 */
237 if (ax < 0 || ay < 0 || ax >= op->contr->socket.mapx || ay >= op->contr->socket.mapy) 231 if (ax < 0 || ay < 0 || ax >= op->contr->socket->mapx || ay >= op->contr->socket->mapy)
238 return; 232 return;
239 233
240#if 0 234#if 0
241 LOG (llevDebug, "check_wall, ax,ay=%d, %d x,y = %d, %d blocksview = %d, %d\n", 235 LOG (llevDebug, "check_wall, ax,ay=%d, %d x,y = %d, %d blocksview = %d, %d\n",
242 ax, ay, x, y, op->x + x - MAP_CLIENT_X / 2, op->y + y - MAP_CLIENT_Y / 2); 236 ax, ay, x, y, op->x + x - MAP_CLIENT_X / 2, op->y + y - MAP_CLIENT_Y / 2);
280static void 274static void
281expand_sight (object *op) 275expand_sight (object *op)
282{ 276{
283 int i, x, y, dx, dy; 277 int i, x, y, dx, dy;
284 278
285 for (x = 1; x < op->contr->socket.mapx - 1; x++) /* loop over inner squares */ 279 for (x = 1; x < op->contr->socket->mapx - 1; x++) /* loop over inner squares */
286 for (y = 1; y < op->contr->socket.mapy - 1; y++) 280 for (y = 1; y < op->contr->socket->mapy - 1; y++)
287 { 281 {
288 if (!op->contr->blocked_los[x][y] && 282 if (!op->contr->blocked_los[x][y] &&
289 !(get_map_flags (op->map, NULL, 283 !(get_map_flags (op->map, NULL,
290 op->x - op->contr->socket.mapx / 2 + x, 284 op->x - op->contr->socket->mapx / 2 + x,
291 op->y - op->contr->socket.mapy / 2 + y, NULL, NULL) & (P_BLOCKSVIEW | P_OUT_OF_MAP))) 285 op->y - op->contr->socket->mapy / 2 + y, NULL, NULL) & (P_BLOCKSVIEW | P_OUT_OF_MAP)))
292 { 286 {
293 287
294 for (i = 1; i <= 8; i += 1) 288 for (i = 1; i <= 8; i += 1)
295 { /* mark all directions */ 289 { /* mark all directions */
296 dx = x + freearr_x[i]; 290 dx = x + freearr_x[i];
304 if (MAP_DARKNESS (op->map) > 0) /* player is on a dark map */ 298 if (MAP_DARKNESS (op->map) > 0) /* player is on a dark map */
305 expand_lighted_sight (op); 299 expand_lighted_sight (op);
306 300
307 301
308 /* clear mark squares */ 302 /* clear mark squares */
309 for (x = 0; x < op->contr->socket.mapx; x++) 303 for (x = 0; x < op->contr->socket->mapx; x++)
310 for (y = 0; y < op->contr->socket.mapy; y++) 304 for (y = 0; y < op->contr->socket->mapy; y++)
311 if (op->contr->blocked_los[x][y] < 0) 305 if (op->contr->blocked_los[x][y] < 0)
312 op->contr->blocked_los[x][y] = 0; 306 op->contr->blocked_los[x][y] = 0;
313} 307}
314 308
315 309
333 327
334static void 328static void
335expand_lighted_sight (object *op) 329expand_lighted_sight (object *op)
336{ 330{
337 int x, y, darklevel, ax, ay, basex, basey, mflags, light, x1, y1; 331 int x, y, darklevel, ax, ay, basex, basey, mflags, light, x1, y1;
338 mapstruct *m = op->map; 332 maptile *m = op->map;
339 sint16 nx, ny; 333 sint16 nx, ny;
340 334
341 darklevel = MAP_DARKNESS (m); 335 darklevel = MAP_DARKNESS (m);
342 336
343 /* If the player can see in the dark, lower the darklevel for him */ 337 /* If the player can see in the dark, lower the darklevel for him */
360 LOG (llevError, "Map darkness for %s on %s is too high (%d)\n", &op->name, op->map->path, darklevel); 354 LOG (llevError, "Map darkness for %s on %s is too high (%d)\n", &op->name, op->map->path, darklevel);
361 darklevel = MAX_DARKNESS; 355 darklevel = MAX_DARKNESS;
362 } 356 }
363 357
364 /* First, limit player furthest (unlighted) vision */ 358 /* First, limit player furthest (unlighted) vision */
365 for (x = 0; x < op->contr->socket.mapx; x++) 359 for (x = 0; x < op->contr->socket->mapx; x++)
366 for (y = 0; y < op->contr->socket.mapy; y++) 360 for (y = 0; y < op->contr->socket->mapy; y++)
367 if (op->contr->blocked_los[x][y] != 100) 361 if (op->contr->blocked_los[x][y] != 100)
368 op->contr->blocked_los[x][y] = MAX_LIGHT_RADII; 362 op->contr->blocked_los[x][y] = MAX_LIGHT_RADII;
369 363
370 /* the spaces[] darkness value contains the information we need. 364 /* the spaces[] darkness value contains the information we need.
371 * Only process the area of interest. 365 * Only process the area of interest.
372 * the basex, basey values represent the position in the op->contr->blocked_los 366 * the basex, basey values represent the position in the op->contr->blocked_los
373 * array. Its easier to just increment them here (and start with the right 367 * array. Its easier to just increment them here (and start with the right
374 * value) than to recalculate them down below. 368 * value) than to recalculate them down below.
375 */ 369 */
376 for (x = (op->x - op->contr->socket.mapx / 2 - MAX_LIGHT_RADII), basex = -MAX_LIGHT_RADII; 370 for (x = (op->x - op->contr->socket->mapx / 2 - MAX_LIGHT_RADII), basex = -MAX_LIGHT_RADII;
377 x <= (op->x + op->contr->socket.mapx / 2 + MAX_LIGHT_RADII); x++, basex++) 371 x <= (op->x + op->contr->socket->mapx / 2 + MAX_LIGHT_RADII); x++, basex++)
378 { 372 {
379 373
380 for (y = (op->y - op->contr->socket.mapy / 2 - MAX_LIGHT_RADII), basey = -MAX_LIGHT_RADII; 374 for (y = (op->y - op->contr->socket->mapy / 2 - MAX_LIGHT_RADII), basey = -MAX_LIGHT_RADII;
381 y <= (op->y + op->contr->socket.mapy / 2 + MAX_LIGHT_RADII); y++, basey++) 375 y <= (op->y + op->contr->socket->mapy / 2 + MAX_LIGHT_RADII); y++, basey++)
382 { 376 {
383 m = op->map; 377 m = op->map;
384 nx = x; 378 nx = x;
385 ny = y; 379 ny = y;
386 380
398#if 0 392#if 0
399 LOG (llevDebug, "expand_lighted_sight: Found light at x=%d, y=%d, basex=%d, basey=%d\n", x, y, basex, basey); 393 LOG (llevDebug, "expand_lighted_sight: Found light at x=%d, y=%d, basex=%d, basey=%d\n", x, y, basex, basey);
400#endif 394#endif
401 for (ax = basex - light; ax <= basex + light; ax++) 395 for (ax = basex - light; ax <= basex + light; ax++)
402 { 396 {
403 if (ax < 0 || ax >= op->contr->socket.mapx) 397 if (ax < 0 || ax >= op->contr->socket->mapx)
404 continue; 398 continue;
405 for (ay = basey - light; ay <= basey + light; ay++) 399 for (ay = basey - light; ay <= basey + light; ay++)
406 { 400 {
407 if (ay < 0 || ay >= op->contr->socket.mapy) 401 if (ay < 0 || ay >= op->contr->socket->mapy)
408 continue; 402 continue;
409 403
410 /* If the space is fully blocked, do nothing. Otherwise, we 404 /* If the space is fully blocked, do nothing. Otherwise, we
411 * brighten the space. The further the light is away from the 405 * brighten the space. The further the light is away from the
412 * source (basex-x), the less effect it has. Though light used 406 * source (basex-x), the less effect it has. Though light used
432 /* Outdoor should never really be completely pitch black dark like 426 /* Outdoor should never really be completely pitch black dark like
433 * a dungeon, so let the player at least see a little around themselves 427 * a dungeon, so let the player at least see a little around themselves
434 */ 428 */
435 if (op->map->outdoor && darklevel > (MAX_DARKNESS - 3)) 429 if (op->map->outdoor && darklevel > (MAX_DARKNESS - 3))
436 { 430 {
437 if (op->contr->blocked_los[op->contr->socket.mapx / 2][op->contr->socket.mapy / 2] > (MAX_DARKNESS - 3)) 431 if (op->contr->blocked_los[op->contr->socket->mapx / 2][op->contr->socket->mapy / 2] > (MAX_DARKNESS - 3))
438 op->contr->blocked_los[op->contr->socket.mapx / 2][op->contr->socket.mapy / 2] = MAX_DARKNESS - 3; 432 op->contr->blocked_los[op->contr->socket->mapx / 2][op->contr->socket->mapy / 2] = MAX_DARKNESS - 3;
439 433
440 for (x = -1; x <= 1; x++) 434 for (x = -1; x <= 1; x++)
441 for (y = -1; y <= 1; y++) 435 for (y = -1; y <= 1; y++)
442 { 436 {
443 if (op->contr->blocked_los[x + op->contr->socket.mapx / 2][y + op->contr->socket.mapy / 2] > (MAX_DARKNESS - 2)) 437 if (op->contr->blocked_los[x + op->contr->socket->mapx / 2][y + op->contr->socket->mapy / 2] > (MAX_DARKNESS - 2))
444 op->contr->blocked_los[x + op->contr->socket.mapx / 2][y + op->contr->socket.mapy / 2] = MAX_DARKNESS - 2; 438 op->contr->blocked_los[x + op->contr->socket->mapx / 2][y + op->contr->socket->mapy / 2] = MAX_DARKNESS - 2;
445 } 439 }
446 } 440 }
447 /* grant some vision to the player, based on the darklevel */ 441 /* grant some vision to the player, based on the darklevel */
448 for (x = darklevel - MAX_DARKNESS; x < MAX_DARKNESS + 1 - darklevel; x++) 442 for (x = darklevel - MAX_DARKNESS; x < MAX_DARKNESS + 1 - darklevel; x++)
449 for (y = darklevel - MAX_DARKNESS; y < MAX_DARKNESS + 1 - darklevel; y++) 443 for (y = darklevel - MAX_DARKNESS; y < MAX_DARKNESS + 1 - darklevel; y++)
450 if (!(op->contr->blocked_los[x + op->contr->socket.mapx / 2][y + op->contr->socket.mapy / 2] == 100)) 444 if (!(op->contr->blocked_los[x + op->contr->socket->mapx / 2][y + op->contr->socket->mapy / 2] == 100))
451 op->contr->blocked_los[x + op->contr->socket.mapx / 2][y + op->contr->socket.mapy / 2] -= 445 op->contr->blocked_los[x + op->contr->socket->mapx / 2][y + op->contr->socket->mapy / 2] -=
452 MAX (0, 6 - darklevel - MAX (abs (x), abs (y))); 446 MAX (0, 6 - darklevel - MAX (abs (x), abs (y)));
453} 447}
454 448
455/* blinded_sight() - sets all veiwable squares to blocked except 449/* blinded_sight() - sets all veiwable squares to blocked except
456 * for the one the central one that the player occupies. A little 450 * for the one the central one that the player occupies. A little
461static void 455static void
462blinded_sight (object *op) 456blinded_sight (object *op)
463{ 457{
464 int x, y; 458 int x, y;
465 459
466 for (x = 0; x < op->contr->socket.mapx; x++) 460 for (x = 0; x < op->contr->socket->mapx; x++)
467 for (y = 0; y < op->contr->socket.mapy; y++) 461 for (y = 0; y < op->contr->socket->mapy; y++)
468 op->contr->blocked_los[x][y] = 100; 462 op->contr->blocked_los[x][y] = 100;
469 463
470 op->contr->blocked_los[op->contr->socket.mapx / 2][op->contr->socket.mapy / 2] = 0; 464 op->contr->blocked_los[op->contr->socket->mapx / 2][op->contr->socket->mapy / 2] = 0;
471} 465}
472 466
473/* 467/*
474 * update_los() recalculates the array which specifies what is 468 * update_los() recalculates the array which specifies what is
475 * visible for the given player-object. 469 * visible for the given player-object.
476 */ 470 */
477 471
478void 472void
479update_los (object *op) 473update_los (object *op)
480{ 474{
481 int dx = op->contr->socket.mapx / 2, dy = op->contr->socket.mapy / 2, x, y; 475 int dx = op->contr->socket->mapx / 2, dy = op->contr->socket->mapy / 2, x, y;
482 476
483 if (QUERY_FLAG (op, FLAG_REMOVED)) 477 if (QUERY_FLAG (op, FLAG_REMOVED))
484 return; 478 return;
485 479
486 clear_los (op); 480 clear_los (op);
490 /* For larger maps, this is more efficient than the old way which 484 /* For larger maps, this is more efficient than the old way which
491 * used the chaining of the block array. Since many space views could 485 * used the chaining of the block array. Since many space views could
492 * be blocked by different spaces in front, this mean that a lot of spaces 486 * be blocked by different spaces in front, this mean that a lot of spaces
493 * could be examined multile times, as each path would be looked at. 487 * could be examined multile times, as each path would be looked at.
494 */ 488 */
495 for (x = (MAP_CLIENT_X - op->contr->socket.mapx) / 2 - 1; x < (MAP_CLIENT_X + op->contr->socket.mapx) / 2 + 1; x++) 489 for (x = (MAP_CLIENT_X - op->contr->socket->mapx) / 2 - 1; x < (MAP_CLIENT_X + op->contr->socket->mapx) / 2 + 1; x++)
496 for (y = (MAP_CLIENT_Y - op->contr->socket.mapy) / 2 - 1; y < (MAP_CLIENT_Y + op->contr->socket.mapy) / 2 + 1; y++) 490 for (y = (MAP_CLIENT_Y - op->contr->socket->mapy) / 2 - 1; y < (MAP_CLIENT_Y + op->contr->socket->mapy) / 2 + 1; y++)
497 check_wall (op, x, y); 491 check_wall (op, x, y);
498 492
499 493
500 /* do the los of the player. 3 (potential) cases */ 494 /* do the los of the player. 3 (potential) cases */
501 if (QUERY_FLAG (op, FLAG_BLIND)) /* player is blind */ 495 if (QUERY_FLAG (op, FLAG_BLIND)) /* player is blind */
523 * players, which is should not be. 517 * players, which is should not be.
524 * Currently, this function is called from the 518 * Currently, this function is called from the
525 * change_map_light function 519 * change_map_light function
526 */ 520 */
527void 521void
528update_all_map_los (mapstruct *map) 522update_all_map_los (maptile *map)
529{ 523{
530 player *pl; 524 player *pl;
531 525
532 for (pl = first_player; pl != NULL; pl = pl->next) 526 for (pl = first_player; pl != NULL; pl = pl->next)
533 { 527 {
549 * 543 *
550 * map is the map that changed, x and y are the coordinates. 544 * map is the map that changed, x and y are the coordinates.
551 */ 545 */
552 546
553void 547void
554update_all_los (const mapstruct *map, int x, int y) 548update_all_los (const maptile *map, int x, int y)
555{ 549{
556 player *pl; 550 player *pl;
557 551
558 for (pl = first_player; pl != NULL; pl = pl->next) 552 for (pl = first_player; pl != NULL; pl = pl->next)
559 { 553 {
572 * so by setting it up this way, we trim processing 566 * so by setting it up this way, we trim processing
573 * some. 567 * some.
574 */ 568 */
575 if (pl->ob->map == map) 569 if (pl->ob->map == map)
576 { 570 {
577 if ((abs (pl->ob->x - x) <= pl->socket.mapx / 2) && (abs (pl->ob->y - y) <= pl->socket.mapy / 2)) 571 if ((abs (pl->ob->x - x) <= pl->socket->mapx / 2) && (abs (pl->ob->y - y) <= pl->socket->mapy / 2))
578 pl->do_los = 1; 572 pl->do_los = 1;
579 } 573 }
580 /* Now we check to see if player is on adjacent 574 /* Now we check to see if player is on adjacent
581 * maps to the one that changed and also within 575 * maps to the one that changed and also within
582 * view. The tile_maps[] could be null, but in that 576 * view. The tile_maps[] could be null, but in that
593 * and then add the players location, which gives 587 * and then add the players location, which gives
594 * a distance. 588 * a distance.
595 */ 589 */
596 else if (pl->ob->map == map->tile_map[0]) 590 else if (pl->ob->map == map->tile_map[0])
597 { 591 {
598 if ((abs (pl->ob->x - x) <= pl->socket.mapx / 2) && (abs (y + MAP_HEIGHT (map->tile_map[0]) - pl->ob->y) <= pl->socket.mapy / 2)) 592 if ((abs (pl->ob->x - x) <= pl->socket->mapx / 2) && (abs (y + MAP_HEIGHT (map->tile_map[0]) - pl->ob->y) <= pl->socket->mapy / 2))
599 pl->do_los = 1; 593 pl->do_los = 1;
600 } 594 }
601 else if (pl->ob->map == map->tile_map[2]) 595 else if (pl->ob->map == map->tile_map[2])
602 { 596 {
603 if ((abs (pl->ob->x - x) <= pl->socket.mapx / 2) && (abs (pl->ob->y + MAP_HEIGHT (map) - y) <= pl->socket.mapy / 2)) 597 if ((abs (pl->ob->x - x) <= pl->socket->mapx / 2) && (abs (pl->ob->y + MAP_HEIGHT (map) - y) <= pl->socket->mapy / 2))
604 pl->do_los = 1; 598 pl->do_los = 1;
605 } 599 }
606 else if (pl->ob->map == map->tile_map[1]) 600 else if (pl->ob->map == map->tile_map[1])
607 { 601 {
608 if ((abs (pl->ob->x + MAP_WIDTH (map) - x) <= pl->socket.mapx / 2) && (abs (pl->ob->y - y) <= pl->socket.mapy / 2)) 602 if ((abs (pl->ob->x + MAP_WIDTH (map) - x) <= pl->socket->mapx / 2) && (abs (pl->ob->y - y) <= pl->socket->mapy / 2))
609 pl->do_los = 1; 603 pl->do_los = 1;
610 } 604 }
611 else if (pl->ob->map == map->tile_map[3]) 605 else if (pl->ob->map == map->tile_map[3])
612 { 606 {
613 if ((abs (x + MAP_WIDTH (map->tile_map[3]) - pl->ob->x) <= pl->socket.mapx / 2) && (abs (pl->ob->y - y) <= pl->socket.mapy / 2)) 607 if ((abs (x + MAP_WIDTH (map->tile_map[3]) - pl->ob->x) <= pl->socket->mapx / 2) && (abs (pl->ob->y - y) <= pl->socket->mapy / 2))
614 pl->do_los = 1; 608 pl->do_los = 1;
615 } 609 }
616 } 610 }
617} 611}
618 612
626{ 620{
627 int x, y; 621 int x, y;
628 char buf[50], buf2[10]; 622 char buf[50], buf2[10];
629 623
630 strcpy (buf, " "); 624 strcpy (buf, " ");
631 for (x = 0; x < op->contr->socket.mapx; x++) 625 for (x = 0; x < op->contr->socket->mapx; x++)
632 { 626 {
633 sprintf (buf2, "%2d", x); 627 sprintf (buf2, "%2d", x);
634 strcat (buf, buf2); 628 strcat (buf, buf2);
635 } 629 }
636 new_draw_info (NDI_UNIQUE, 0, op, buf); 630 new_draw_info (NDI_UNIQUE, 0, op, buf);
637 for (y = 0; y < op->contr->socket.mapy; y++) 631 for (y = 0; y < op->contr->socket->mapy; y++)
638 { 632 {
639 sprintf (buf, "%2d:", y); 633 sprintf (buf, "%2d:", y);
640 for (x = 0; x < op->contr->socket.mapx; x++) 634 for (x = 0; x < op->contr->socket->mapx; x++)
641 { 635 {
642 sprintf (buf2, " %1d", op->contr->blocked_los[x][y]); 636 sprintf (buf2, " %1d", op->contr->blocked_los[x][y]);
643 strcat (buf, buf2); 637 strcat (buf, buf2);
644 } 638 }
645 new_draw_info (NDI_UNIQUE, 0, op, buf); 639 new_draw_info (NDI_UNIQUE, 0, op, buf);
656{ 650{
657 player *pl; 651 player *pl;
658 652
659 for (pl = first_player; pl; pl = pl->next) 653 for (pl = first_player; pl; pl = pl->next)
660 if (pl->ob->map == op->map && 654 if (pl->ob->map == op->map &&
661 pl->ob->y - pl->socket.mapy / 2 <= op->y && 655 pl->ob->y - pl->socket->mapy / 2 <= op->y &&
662 pl->ob->y + pl->socket.mapy / 2 >= op->y && pl->ob->x - pl->socket.mapx / 2 <= op->x && pl->ob->x + pl->socket.mapx / 2 >= op->x) 656 pl->ob->y + pl->socket->mapy / 2 >= op->y && pl->ob->x - pl->socket->mapx / 2 <= op->x && pl->ob->x + pl->socket->mapx / 2 >= op->x)
663 pl->blocked_los[pl->socket.mapx / 2 + op->x - pl->ob->x][pl->socket.mapy / 2 + op->y - pl->ob->y] = 0; 657 pl->blocked_los[pl->socket->mapx / 2 + op->x - pl->ob->x][pl->socket->mapy / 2 + op->y - pl->ob->y] = 0;
664} 658}
665 659
666/* 660/*
667 * make_sure_not_seen: The object which is supposed to be visible through 661 * make_sure_not_seen: The object which is supposed to be visible through
668 * walls has just been removed from the map, so update the los of any 662 * walls has just been removed from the map, so update the los of any
674{ 668{
675 player *pl; 669 player *pl;
676 670
677 for (pl = first_player; pl; pl = pl->next) 671 for (pl = first_player; pl; pl = pl->next)
678 if (pl->ob->map == op->map && 672 if (pl->ob->map == op->map &&
679 pl->ob->y - pl->socket.mapy / 2 <= op->y && 673 pl->ob->y - pl->socket->mapy / 2 <= op->y &&
680 pl->ob->y + pl->socket.mapy / 2 >= op->y && pl->ob->x - pl->socket.mapx / 2 <= op->x && pl->ob->x + pl->socket.mapx / 2 >= op->x) 674 pl->ob->y + pl->socket->mapy / 2 >= op->y && pl->ob->x - pl->socket->mapx / 2 <= op->x && pl->ob->x + pl->socket->mapx / 2 >= op->x)
681 pl->do_los = 1; 675 pl->do_los = 1;
682} 676}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines