| 695 | } |
| 696 | |
| 697 | void DoVision(int nXPos, int nYPos, int nRadius, BOOL doautomap, BOOL visible) |
| 698 | { |
| 699 | BOOL nBlockerFlag; |
| 700 | int nCrawlX, nCrawlY, nLineLen, nTrans; |
| 701 | int j, k, v, x1adj, x2adj, y1adj, y2adj; |
| 702 | |
| 703 | if (nXPos >= 0 && nXPos <= MAXDUNX && nYPos >= 0 && nYPos <= MAXDUNY) { |
| 704 | if (doautomap) { |
| 705 | if (dFlags[nXPos][nYPos] >= 0) { |
| 706 | SetAutomapView(nXPos, nXPos); |
| 707 | } |
| 708 | dFlags[nXPos][nYPos] |= BFLAG_EXPLORED; |
| 709 | } |
| 710 | if (visible) { |
| 711 | dFlags[nXPos][nYPos] |= BFLAG_LIT; |
| 712 | } |
| 713 | dFlags[nXPos][nYPos] |= BFLAG_VISIBLE; |
| 714 | } |
| 715 | |
| 716 | for (v = 0; v < 4; v++) { |
| 717 | for (j = 0; j < 23; j++) { |
| 718 | nBlockerFlag = FALSE; |
| 719 | nLineLen = 2 * (nRadius - RadiusAdj[j]); |
| 720 | for (k = 0; k < nLineLen && !nBlockerFlag; k += 2) { |
| 721 | x1adj = 0; |
| 722 | x2adj = 0; |
| 723 | y1adj = 0; |
| 724 | y2adj = 0; |
| 725 | switch (v) { |
| 726 | case 0: |
| 727 | nCrawlX = nXPos + vCrawlTable[j][k]; |
| 728 | nCrawlY = nYPos + vCrawlTable[j][k + 1]; |
| 729 | if (vCrawlTable[j][k] > 0 && vCrawlTable[j][k + 1] > 0) { |
| 730 | x1adj = -1; |
| 731 | y2adj = -1; |
| 732 | } |
| 733 | break; |
| 734 | case 1: |
| 735 | nCrawlX = nXPos - vCrawlTable[j][k]; |
| 736 | nCrawlY = nYPos - vCrawlTable[j][k + 1]; |
| 737 | if (vCrawlTable[j][k] > 0 && vCrawlTable[j][k + 1] > 0) { |
| 738 | y1adj = 1; |
| 739 | x2adj = 1; |
| 740 | } |
| 741 | break; |
| 742 | case 2: |
| 743 | nCrawlX = nXPos + vCrawlTable[j][k]; |
| 744 | nCrawlY = nYPos - vCrawlTable[j][k + 1]; |
| 745 | if (vCrawlTable[j][k] > 0 && vCrawlTable[j][k + 1] > 0) { |
| 746 | x1adj = -1; |
| 747 | y2adj = 1; |
| 748 | } |
| 749 | break; |
| 750 | case 3: |
| 751 | nCrawlX = nXPos - vCrawlTable[j][k]; |
| 752 | nCrawlY = nYPos + vCrawlTable[j][k + 1]; |
| 753 | if (vCrawlTable[j][k] > 0 && vCrawlTable[j][k + 1] > 0) { |
| 754 | y1adj = -1; |
no test coverage detected