… | |
… | |
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> |
29 | #include <math.h> |
29 | #include <math.h> |
30 | |
|
|
31 | |
30 | |
32 | /* Distance must be less than this for the object to be blocked. |
31 | /* Distance must be less than this for the object to be blocked. |
33 | * An object is 1.0 wide, so if set to 0.5, it means the object |
32 | * An object is 1.0 wide, so if set to 0.5, it means the object |
34 | * that blocks half the view (0.0 is complete block) will |
33 | * that blocks half the view (0.0 is complete block) will |
35 | * block view in our tables. |
34 | * block view in our tables. |
… | |
… | |
395 | #endif |
394 | #endif |
396 | for (ax = basex - light; ax <= basex + light; ax++) |
395 | for (ax = basex - light; ax <= basex + light; ax++) |
397 | { |
396 | { |
398 | if (ax < 0 || ax >= op->contr->ns->mapx) |
397 | if (ax < 0 || ax >= op->contr->ns->mapx) |
399 | continue; |
398 | continue; |
|
|
399 | |
400 | for (ay = basey - light; ay <= basey + light; ay++) |
400 | for (ay = basey - light; ay <= basey + light; ay++) |
401 | { |
401 | { |
402 | if (ay < 0 || ay >= op->contr->ns->mapy) |
402 | if (ay < 0 || ay >= op->contr->ns->mapy) |
403 | continue; |
403 | continue; |
404 | |
404 | |
… | |
… | |
411 | */ |
411 | */ |
412 | if (op->contr->blocked_los[ax][ay] != 100) |
412 | if (op->contr->blocked_los[ax][ay] != 100) |
413 | { |
413 | { |
414 | x1 = abs (basex - ax) * abs (basex - ax); |
414 | x1 = abs (basex - ax) * abs (basex - ax); |
415 | y1 = abs (basey - ay) * abs (basey - ay); |
415 | y1 = abs (basey - ay) * abs (basey - ay); |
416 | if (light > 0) |
416 | |
417 | op->contr->blocked_los[ax][ay] -= MAX ((light - isqrt (x1 + y1)), 0); |
417 | if (light > 0) op->contr->blocked_los[ax][ay] -= max (light - isqrt (x1 + y1), 0); |
418 | if (light < 0) |
|
|
419 | op->contr->blocked_los[ax][ay] -= MIN ((light + isqrt (x1 + y1)), 0); |
418 | if (light < 0) op->contr->blocked_los[ax][ay] -= min (light + isqrt (x1 + y1), 0); |
420 | } |
419 | } |
421 | } /* for ay */ |
420 | } |
422 | } /* for ax */ |
421 | } |
423 | } /* if this space is providing light */ |
422 | } |
424 | } /* for y */ |
423 | } |
425 | } /* for x */ |
424 | } |
426 | |
425 | |
427 | /* Outdoor should never really be completely pitch black dark like |
426 | /* Outdoor should never really be completely pitch black dark like |
428 | * 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 |
429 | */ |
428 | */ |
430 | if (op->map->outdoor && darklevel > (MAX_DARKNESS - 3)) |
429 | if (op->map->outdoor && darklevel > (MAX_DARKNESS - 3)) |
… | |
… | |
437 | { |
436 | { |
438 | if (op->contr->blocked_los[x + op->contr->ns->mapx / 2][y + op->contr->ns->mapy / 2] > (MAX_DARKNESS - 2)) |
437 | if (op->contr->blocked_los[x + op->contr->ns->mapx / 2][y + op->contr->ns->mapy / 2] > (MAX_DARKNESS - 2)) |
439 | op->contr->blocked_los[x + op->contr->ns->mapx / 2][y + op->contr->ns->mapy / 2] = MAX_DARKNESS - 2; |
438 | op->contr->blocked_los[x + op->contr->ns->mapx / 2][y + op->contr->ns->mapy / 2] = MAX_DARKNESS - 2; |
440 | } |
439 | } |
441 | } |
440 | } |
|
|
441 | |
442 | /* grant some vision to the player, based on the darklevel */ |
442 | /* grant some vision to the player, based on the darklevel */ |
443 | for (x = darklevel - MAX_DARKNESS; x < MAX_DARKNESS + 1 - darklevel; x++) |
443 | for (x = darklevel - MAX_DARKNESS; x < MAX_DARKNESS + 1 - darklevel; x++) |
444 | for (y = darklevel - MAX_DARKNESS; y < MAX_DARKNESS + 1 - darklevel; y++) |
444 | for (y = darklevel - MAX_DARKNESS; y < MAX_DARKNESS + 1 - darklevel; y++) |
445 | if (!(op->contr->blocked_los[x + op->contr->ns->mapx / 2][y + op->contr->ns->mapy / 2] == 100)) |
445 | if (!(op->contr->blocked_los[x + op->contr->ns->mapx / 2][y + op->contr->ns->mapy / 2] == 100)) |
446 | op->contr->blocked_los[x + op->contr->ns->mapx / 2][y + op->contr->ns->mapy / 2] -= |
446 | op->contr->blocked_los[x + op->contr->ns->mapx / 2][y + op->contr->ns->mapy / 2] -= |
… | |
… | |
450 | /* blinded_sight() - sets all veiwable squares to blocked except |
450 | /* blinded_sight() - sets all veiwable squares to blocked except |
451 | * for the one the central one that the player occupies. A little |
451 | * for the one the central one that the player occupies. A little |
452 | * odd that you can see yourself (and what your standing on), but |
452 | * odd that you can see yourself (and what your standing on), but |
453 | * really need for any reasonable game play. |
453 | * really need for any reasonable game play. |
454 | */ |
454 | */ |
455 | |
|
|
456 | static void |
455 | static void |
457 | blinded_sight (object *op) |
456 | blinded_sight (object *op) |
458 | { |
457 | { |
459 | int x, y; |
458 | int x, y; |
460 | |
459 | |