]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/hb/c3_trace.c
not done making demohp.c. i gotta get the files to the other lappy4
[16.git] / src / lib / hb / c3_trace.c
diff --git a/src/lib/hb/c3_trace.c b/src/lib/hb/c3_trace.c
deleted file mode 100755 (executable)
index 45cb1bc..0000000
+++ /dev/null
@@ -1,872 +0,0 @@
-/* Catacomb 3-D Source Code\r
- * Copyright (C) 1993-2014 Flat Rock Software\r
- *\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along\r
- * with this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
- */\r
-\r
-// C3_TRACE.C\r
-\r
-#include "C3_DEF.H"\r
-#pragma hdrstop\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                LOCAL CONSTANTS\r
-\r
-=============================================================================\r
-*/\r
-\r
-\r
-//\r
-// TESTWALLVISABLE will set the global variable wallvisable to 1 or 0\r
-// depending on if tile.x,tile.y,wallon is visable from focal point\r
-//\r
-#define TESTWALLVISABLE {                                              \\r
-       if (tile.y<focal.y)                         \\r
-               voffset = 0;                            \\r
-       else if (tile.y==focal.y)                   \\r
-               voffset = 3;                            \\r
-       else                                        \\r
-               voffset = 6;                            \\r
-       if (tile.x==focal.x)                        \\r
-               voffset ++;                             \\r
-       else if (tile.x>focal.x)                    \\r
-               voffset += 2;                           \\r
-       wallvisable = visable[voffset][wallon]; }\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                GLOBAL VARIABLES\r
-\r
-=============================================================================\r
-*/\r
-\r
-boolean        aborttrace;\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                LOCAL VARIABLES\r
-\r
-=============================================================================\r
-*/\r
-\r
-unsigned       wallvisable,voffset;\r
-\r
-\r
-fixed edgex,edgey;\r
-\r
-int wallon;\r
-int basecolor;\r
-\r
-walltype *oldwall;\r
-\r
-//\r
-// offsets from upper left corner of a tile to the left and right edges of\r
-// a given wall (NORTH-WEST)\r
-//\r
-fixed point1x[4] = {GLOBAL1,GLOBAL1,0      ,0       };\r
-fixed point1y[4] = {0      ,GLOBAL1,GLOBAL1,0       };\r
-\r
-fixed point2x[4] = {0      ,GLOBAL1,GLOBAL1,0       };\r
-fixed point2y[4] = {0     ,0      ,GLOBAL1 ,GLOBAL1};\r
-\r
-\r
-//\r
-// offset from tile.x,tile.y of the tile that shares wallon side\r
-// (side is not visable if it is shared)\r
-//\r
-int sharex[4] = { 0, 1, 0,-1};\r
-int sharey[4] = {-1, 0, 1, 0};\r
-\r
-//\r
-// amount to move tile.x,tile.y to follow wallon to another tile\r
-//\r
-int followx[4] = {-1, 0, 1, 0};\r
-int followy[4] = { 0,-1, 0, 1};\r
-\r
-//\r
-// cornerwall gives the wall on the same tile to start following when the\r
-// wall ends at an empty tile (go around an edge on same tile)\r
-// turnwall gives the wall on tile.x+sharex,tile.y+sharey to start following\r
-// when the wall hits another tile (right angle corner)\r
-//\r
-int cornerwall[4] = {WEST,NORTH,EAST,SOUTH};\r
-int turnwall[4] = {EAST,SOUTH,WEST,NORTH};\r
-\r
-//\r
-// wall visabilities in reletive locations\r
-// -,- 0,- +,-\r
-// -,0 0,0 +,0\r
-// -,+ 0,+ +,+\r
-//\r
-int visable[9][4] =\r
-{\r
- {0,1,1,0}, {0,0,1,0}, {0,0,1,1},\r
- {0,1,0,0}, {0,0,0,0}, {0,0,0,1},\r
- {1,1,0,0}, {1,0,0,0}, {1,0,0,1}\r
-};\r
-\r
-int startwall[9] =  {2,2,3, 1,0,3, 1,0,0};\r
-int backupwall[9] = {3,3,0, 2,0,0, 2,1,1};\r
-\r
-\r
-int    walllength;\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                        FUNCTIONS\r
-\r
-=============================================================================\r
-*/\r
-\r
-/*\r
-========================\r
-=\r
-= FollowTrace\r
-=\r
-========================\r
-*/\r
-\r
-int FollowTrace (fixed tracex, fixed tracey, long deltax, long deltay, int max)\r
-{\r
-       int tx,ty,otx,oty;\r
-       long absdx,absdy,xstep,ystep;\r
-\r
-       tx = tracex>>TILESHIFT;\r
-       ty = tracey>>TILESHIFT;\r
-\r
-       spotvis[tx][ty] = true;\r
-\r
-       absdx=LABS(deltax);\r
-       absdy=LABS(deltay);\r
-\r
-       if (absdx>absdy)\r
-       {\r
-               ystep = (deltay<<8)/(absdx>>8);\r
-\r
-               if (!ystep)\r
-                       ystep = deltay>0 ? 1 : -1;\r
-\r
-               oty = (tracey+ystep)>>TILESHIFT;\r
-               if (deltax>0)\r
-               {\r
-//###############\r
-//\r
-// step x by +1\r
-//\r
-//###############\r
-                       do\r
-                       {\r
-                               tx++;\r
-                               spotvis[tx][ty] = true;\r
-                               tracey+=ystep;\r
-                               ty = tracey>>TILESHIFT;\r
-\r
-                               if (ty!=oty)\r
-                               {\r
-                                       if (tilemap[tx-1][ty])\r
-                                       {\r
-                                               tile.x = tx-1;\r
-                                               tile.y = ty;\r
-                                               return 1;\r
-                                       }\r
-                                       oty = ty;\r
-                               }\r
-                               if (tilemap[tx][ty])\r
-                               {\r
-                                       tile.x = tx;\r
-                                       tile.y = ty;\r
-                                       return 1;\r
-                               }\r
-                       } while (--max);\r
-                       return 0;\r
-               }\r
-               else\r
-               {\r
-//###############\r
-//\r
-// step x by -1\r
-//\r
-//###############\r
-                       do\r
-                       {\r
-                               tx--;\r
-                               spotvis[tx][ty] = true;\r
-                               tracey+=ystep;\r
-                               ty = tracey>>TILESHIFT;\r
-\r
-                               if (ty!=oty)\r
-                               {\r
-                                       if (tilemap[tx][oty])\r
-                                       {\r
-                                               tile.x = tx;\r
-                                               tile.y = oty;\r
-                                               return 1;\r
-                                       }\r
-                                       oty = ty;\r
-                               }\r
-                               if (tilemap[tx][ty])\r
-                               {\r
-                                       tile.x = tx;\r
-                                       tile.y = ty;\r
-                                       return 1;\r
-                               }\r
-                       } while (--max);\r
-                       return 0;\r
-\r
-               }\r
-       }\r
-       else\r
-       {\r
-               xstep = (deltax<<8)/(absdy>>8);\r
-               if (!xstep)\r
-                       xstep = deltax>0 ? 1 : -1;\r
-\r
-\r
-               otx = (tracex+xstep)>>TILESHIFT;\r
-               if (deltay>0)\r
-               {\r
-//###############\r
-//\r
-// step y by +1\r
-//\r
-//###############\r
-                       do\r
-                       {\r
-                               ty++;\r
-                               spotvis[tx][ty] = true;\r
-                               tracex+=xstep;\r
-                               tx = tracex>>TILESHIFT;\r
-\r
-                               if (tx!=otx)\r
-                               {\r
-                                       if (tilemap[tx][ty-1])\r
-                                       {\r
-                                               tile.x = tx;\r
-                                               tile.y = ty-1;\r
-                                               return 1;\r
-                                       }\r
-                                       otx = tx;\r
-                               }\r
-                               if (tilemap[tx][ty])\r
-                               {\r
-                                       tile.x = tx;\r
-                                       tile.y = ty;\r
-                                       return 1;\r
-                               }\r
-                       } while (--max);\r
-                       return 0;\r
-               }\r
-               else\r
-               {\r
-//###############\r
-//\r
-// step y by -1\r
-//\r
-//###############\r
-                       do\r
-                       {\r
-                               ty--;\r
-                               spotvis[tx][ty] = true;\r
-                               tracex+=xstep;\r
-                               tx = tracex>>TILESHIFT;\r
-\r
-                               if (tx!=otx)\r
-                               {\r
-                                       if (tilemap[otx][ty])\r
-                                       {\r
-                                               tile.x = otx;\r
-                                               tile.y = ty;\r
-                                               return 1;\r
-                                       }\r
-                                       otx = tx;\r
-                               }\r
-                               if (tilemap[tx][ty])\r
-                               {\r
-                                       tile.x = tx;\r
-                                       tile.y = ty;\r
-                                       return 1;\r
-                               }\r
-                       } while (--max);\r
-                       return 0;\r
-               }\r
-\r
-       }\r
-\r
-}\r
-\r
-\r
-//===========================================================================\r
-\r
-\r
-/*\r
-=================\r
-=\r
-= BackTrace\r
-=\r
-= Traces backwards from edgex,edgey to viewx,viewy to see if a closer\r
-= tile obscures the given point.  If it does, it finishes the wall and\r
-= starts a new one.\r
-= Returns true if a tile is hit.\r
-= Call with a 1 to have it automatically finish the current wall\r
-=\r
-=================\r
-*/\r
-\r
-int BackTrace (int finish)\r
-{\r
-  fixed tracex,tracey;\r
-  long deltax,deltay,absdx,absdy;\r
-  int steps,otx,oty,testx,testheight,offset,wall;\r
-\r
-  deltax = viewx-edgex;\r
-  deltay = viewy-edgey;\r
-\r
-  absdx = LABS(deltax);\r
-  absdy = LABS(deltay);\r
-\r
-  if (absdx>absdy)\r
-    steps = ABS(focal.x-(edgex>>TILESHIFT))-1;\r
-  else\r
-    steps = ABS(focal.y-(edgey>>TILESHIFT))-1;\r
-\r
-  if (steps<=0)\r
-    return 0;\r
-\r
-  otx = tile.x;\r
-  oty = tile.y;\r
-  if (!FollowTrace(edgex,edgey,deltax,deltay,steps))\r
-    return 0;\r
-\r
-//\r
-// if the start wall is behind the focal point, the trace went too far back\r
-//\r
-  if (ABS(tile.x-focal.x)<2 && ABS(tile.y-focal.y)<2)  // too close\r
-  {\r
-    if (tile.x == focal.x && tile.y == focal.y)\r
-    {\r
-      tile.x = otx;\r
-      tile.y = oty;\r
-      return 0;\r
-    }\r
-\r
-    if (tile.x<focal.x)\r
-    {\r
-      if (tile.y<focal.y)\r
-       wall = SOUTH;\r
-      else\r
-       wall = EAST;\r
-    }\r
-    else if (tile.x==focal.x)\r
-    {\r
-         if (tile.y<focal.y)\r
-       wall = SOUTH;\r
-      else\r
-       wall = NORTH;\r
-    }\r
-    else\r
-       {\r
-      if (tile.y<=focal.y)\r
-       wall = WEST;\r
-      else\r
-       wall = NORTH;\r
-    }\r
-\r
-    //\r
-    // rotate the X value to see if it is behind the view plane\r
-    //\r
-    if (TransformX (((long)tile.x<<16)+point1x[wall],\r
-                   ((long)tile.y<<16)+point1y[wall]) < FOCALLENGTH)\r
-    {\r
-      tile.x = otx;\r
-      tile.y = oty;\r
-      return 0;\r
-    }\r
-  }\r
-\r
-//\r
-// if the old wall is still behind a closer wall, ignore the back trace\r
-// and continue on (dealing with limited precision...)\r
-//\r
-  if (finish && !FinishWall ())        // the wall is still behind a forward wall\r
-  {\r
-    tile.x = otx;\r
-    tile.y = oty;\r
-    rightwall->x1 = oldwall->x2;               // common edge with last wall\r
-    rightwall->height1 = oldwall->height2;\r
-    return 0;\r
-  }\r
-\r
-\r
-//\r
-// back up along the intersecting face to find the rightmost wall\r
-//\r
-\r
-  if (tile.y<focal.y)\r
-    offset = 0;\r
-  else if (tile.y==focal.y)\r
-    offset = 3;\r
-  else\r
-    offset = 6;\r
-  if (tile.x==focal.x)\r
-    offset ++;\r
-  else if (tile.x>focal.x)\r
-    offset += 2;\r
-\r
-  wallon = backupwall[offset];\r
-\r
-  while (tilemap[tile.x][tile.y])\r
-  {\r
-    tile.x += followx[wallon];\r
-    tile.y += followy[wallon];\r
-  };\r
-\r
-  tile.x -= followx[wallon];\r
-  tile.y -= followy[wallon];\r
-\r
-  wallon = cornerwall[wallon]; // turn to first visable face\r
-\r
-  edgex = ((long)tile.x<<16);\r
-  edgey = ((long)tile.y<<16);\r
-\r
-  TransformPoint (edgex+point1x[wallon],edgey+point1y[wallon],\r
-    &rightwall->x1,&rightwall->height1);\r
-\r
-  basecolor = tilemap[tile.x][tile.y];\r
-\r
-  return 1;\r
-}\r
-\r
-//===========================================================================\r
-\r
-\r
-/*\r
-=================\r
-=\r
-= ForwardTrace\r
-=\r
-= Traces forwards from edgex,edgey along the line from viewx,viewy until\r
-= a solid tile is hit.  Sets tile.x,tile.y\r
-=\r
-=================\r
-*/\r
-\r
-void ForwardTrace (void)\r
-{\r
-  int offset;\r
-  fixed tracex,tracey;\r
-  long deltax,deltay;\r
-\r
-  deltax = edgex-viewx;\r
-  deltay = edgey-viewy;\r
-\r
-  FollowTrace(edgex,edgey,deltax,deltay,0);\r
-\r
-  if (tile.y<focal.y)\r
-    offset = 0;\r
-  else if (tile.y==focal.y)\r
-    offset = 3;\r
-  else\r
-    offset = 6;\r
-  if (tile.x==focal.x)\r
-    offset ++;\r
-  else if (tile.x>focal.x)\r
-    offset += 2;\r
-\r
-  wallon = startwall[offset];\r
-\r
-//\r
-// start the new wall\r
-//\r
-  edgex = ((long)tile.x<<16);\r
-  edgey = ((long)tile.y<<16);\r
-\r
-//\r
-// if entire first wall is invisable, corner\r
-//\r
-  TransformPoint (edgex+point2x[wallon],edgey+point2y[wallon],\r
-    &rightwall->x2,&rightwall->height2);\r
-\r
-  if (tilemap [tile.x+sharex[wallon]] [tile.y+sharey[wallon]]\r
-  || rightwall->x2 < (rightwall-1)->x2 )\r
-    wallon = cornerwall [wallon];\r
-\r
-//\r
-// transform first point\r
-//\r
-\r
-  TransformPoint (edgex+point1x[wallon],edgey+point1y[wallon],\r
-    &rightwall->x1,&rightwall->height1);\r
-\r
-  basecolor = tilemap[tile.x][tile.y];\r
-}\r
-\r
-\r
-//===========================================================================\r
-\r
-\r
-/*\r
-=================\r
-=\r
-= FinishWall\r
-=\r
-= Transforms edgex,edgey as the next point of the current wall\r
-= and sticks it in the wall list\r
-=\r
-=================\r
-*/\r
-\r
-int FinishWall (void)\r
-{\r
-  char num[20];\r
-\r
-  oldwall = rightwall;\r
-\r
-       rightwall->color  = basecolor;\r
-\r
-  TransformPoint (edgex,edgey,&rightwall->x2,&rightwall->height2);\r
-\r
-  if (rightwall->x2 <= (rightwall-1)->x2+2\r
-  && rightwall->height2 < (rightwall-1)->height2 )\r
-       return 0;\r
-\r
-  rightwall->walllength = walllength;\r
-\r
-  switch (wallon)\r
-  {\r
-  case north:\r
-  case south:\r
-         rightwall->side = 0;\r
-         rightwall->planecoord = edgey;\r
-         break;\r
-\r
-  case west:\r
-  case east:\r
-         rightwall->side = 1;\r
-         rightwall->planecoord = edgex;\r
-         break;\r
-  }\r
-\r
-  walllength = 1;\r
-\r
-  rightwall++;\r
-\r
-  return 1;\r
-}\r
-\r
-//===========================================================================\r
-\r
-\r
-/*\r
-=================\r
-=\r
-= InsideCorner\r
-=\r
-=================\r
-*/\r
-\r
-void InsideCorner (void)\r
-{\r
-  int offset;\r
-\r
-  //\r
-  // the wall turned -90 degrees, so draw what we have, move to the new tile,\r
-  // change wallon, change color, and continue following.\r
-  //\r
-  FinishWall ();\r
-\r
-  tile.x += sharex[wallon];\r
-  tile.y += sharey[wallon];\r
-\r
-  wallon = turnwall[wallon];\r
-\r
-  //\r
-  // if the new wall is visable, continue following it.  Otherwise\r
-  // follow it backwards until it turns\r
-  //\r
-  TESTWALLVISABLE;\r
-\r
-  if (wallvisable)\r
-  {\r
-  //\r
-  // just turn to the next wall and continue\r
-  //\r
-    rightwall->x1 = oldwall->x2;               // common edge with last wall\r
-    rightwall->height1 = oldwall->height2;\r
-    basecolor = tilemap[tile.x][tile.y];\r
-    return;                    // continue from here\r
-  }\r
-\r
-  //\r
-  // back follow the invisable wall until it turns, then follow that\r
-  //\r
-  do\r
-  {\r
-       tile.x += followx[wallon];\r
-    tile.y += followy[wallon];\r
-  } while (tilemap[tile.x][tile.y]);\r
-\r
-  tile.x -= followx[wallon];\r
-  tile.y -= followy[wallon];\r
-\r
-  wallon = cornerwall[wallon]; // turn to first visable face\r
-\r
-  edgex = ((long)tile.x<<16)+point1x[wallon];\r
-  edgey = ((long)tile.y<<16)+point1y[wallon];\r
-\r
-  if (!BackTrace(0))           // backtrace without finishing a wall\r
-  {\r
-    TransformPoint (edgex,edgey,&rightwall->x1,&rightwall->height1);\r
-    basecolor = tilemap[tile.x][tile.y];\r
-  }\r
-}\r
-\r
-//===========================================================================\r
-\r
-\r
-/*\r
-=================\r
-=\r
-= OutsideCorner\r
-=\r
-=================\r
-*/\r
-\r
-void OutsideCorner (void)\r
-{\r
-  int offset;\r
-\r
-  //\r
-  // edge is the outside edge of a corner, so draw the current wall and\r
-  // turn the corner (+90 degrees)\r
-  //\r
-  FinishWall ();\r
-\r
-  tile.x -= followx[wallon];   // backup to the real tile\r
-  tile.y -= followy[wallon];\r
-  wallon = cornerwall[wallon];\r
-\r
-  //\r
-  // if the new wall is visable, continue following it.  Otherwise\r
-  // trace a ray from the corner to find a wall in the distance to\r
-  // follow\r
-  //\r
-  TESTWALLVISABLE;\r
-\r
-  if (wallvisable)\r
-  {\r
-  //\r
-  // the new wall is visable, so just continue on\r
-  //\r
-    rightwall->x1 = oldwall->x2;               // common edge with last wall\r
-    rightwall->height1 = oldwall->height2;\r
-    return;                    // still on same tile, so color is ok\r
-  }\r
-\r
-//\r
-// start from a new tile further away\r
-//\r
-  ForwardTrace();              // find the next wall further back\r
-\r
-}\r
-\r
-\r
-//===========================================================================\r
-\r
-\r
-/*\r
-=================\r
-=\r
-= FollowWalls\r
-=\r
-= Starts a wall edge at the leftmost edge of tile.x,tile.y and follows it\r
-= until something else is seen or the entire view area is covered\r
-=\r
-=================\r
-*/\r
-\r
-void FollowWalls (void)\r
-{\r
-  int height,newcolor,offset,wall;\r
-\r
-//####################\r
-//\r
-// figure leftmost wall of new tile\r
-//\r
-//####################\r
-\r
-restart:\r
-\r
-  walllength = 1;\r
-\r
-  if (tile.y<focal.y)\r
-       offset = 0;\r
-  else if (tile.y==focal.y)\r
-       offset = 3;\r
-  else\r
-       offset = 6;\r
-  if (tile.x==focal.x)\r
-       offset ++;\r
-  else if (tile.x>focal.x)\r
-       offset += 2;\r
-\r
-  wallon = startwall[offset];\r
-\r
-//\r
-// if the start wall is inside a block, skip it by cornering to the second wall\r
-//\r
-  if ( tilemap [tile.x+sharex[wallon]] [tile.y+sharey[wallon]])\r
-       wallon = cornerwall [wallon];\r
-\r
-//\r
-// transform first edge to screen coordinates\r
-//\r
-  edgex = ((long)tile.x<<16);\r
-  edgey = ((long)tile.y<<16);\r
-\r
-  TransformPoint (edgex+point1x[wallon],edgey+point1y[wallon],\r
-       &rightwall->x1,&rightwall->height1);\r
-\r
-  basecolor = tilemap[tile.x][tile.y];\r
-\r
-//##################\r
-//\r
-// follow the wall as long as possible\r
-//\r
-//##################\r
-\r
-advance:\r
-\r
-  do   // while ( tile.x != right.x || tile.y != right.y)\r
-  {\r
-//\r
-// check for conditions that shouldn't happed...\r
-//\r
-       if (rightwall->x1 > VIEWXH)     // somehow missed right tile...\r
-         return;\r
-\r
-       if (rightwall == &walls[DANGERHIGH])\r
-       {\r
-  //\r
-  // somethiing got messed up!  Correct by thrusting ahead...\r
-  //\r
-               VW_ColorBorder(6);\r
-               bordertime = 60;\r
-               Thrust(player->angle,TILEGLOBAL/4);\r
-               player->angle+=5;\r
-               if (player->angle>ANGLES)\r
-                       player->angle-=ANGLES;\r
-               aborttrace = true;\r
-               return;\r
-\r
-#if 0\r
-         strcpy (str,"Wall list overflow at LE:");\r
-         itoa(mapon+1,str2,10);\r
-         strcat (str,str2);\r
-         strcat (str," X:");\r
-         ltoa(objlist[0].x,str2,10);\r
-         strcat (str,str2);\r
-         strcat (str," Y:");\r
-         ltoa(objlist[0].y,str2,10);\r
-         strcat (str,str2);\r
-         strcat (str," AN:");\r
-         itoa(objlist[0].angle,str2,10);\r
-         strcat (str,str2);\r
-\r
-         Quit (str);\r
-#endif\r
-       }\r
-\r
-//\r
-// proceed along wall\r
-//\r
-\r
-       edgex = ((long)tile.x<<16)+point2x[wallon];\r
-       edgey = ((long)tile.y<<16)+point2y[wallon];\r
-\r
-       if (BackTrace(1))               // went behind a closer wall\r
-         continue;\r
-\r
-       //\r
-       // advance to next tile along wall\r
-       //\r
-       tile.x += followx[wallon];\r
-       tile.y += followy[wallon];\r
-\r
-       if (tilemap [tile.x+sharex[wallon]] [tile.y+sharey[wallon]])\r
-       {\r
-         InsideCorner ();              // turn at a corner\r
-         continue;\r
-       }\r
-\r
-       newcolor = tilemap[tile.x][tile.y];\r
-\r
-       if (!newcolor)          // turn around an edge\r
-       {\r
-         OutsideCorner ();\r
-         continue;\r
-       }\r
-\r
-       if (newcolor != basecolor)\r
-       {\r
-         //\r
-         // wall changed color, so draw what we have and continue following\r
-         //\r
-         FinishWall ();\r
-         rightwall->x1 = oldwall->x2;  // new wall shares this edge\r
-         rightwall->height1 = oldwall->height2;\r
-         basecolor = newcolor;\r
-\r
-         continue;\r
-       }\r
-       walllength++;\r
-  } while (tile.x != right.x || tile.y != right.y);\r
-\r
-\r
-\r
-//######################\r
-//\r
-// draw the last tile\r
-//\r
-//######################\r
-\r
-  edgex = ((long)tile.x<<16)+point2x[wallon];\r
-  edgey = ((long)tile.y<<16)+point2y[wallon];\r
-  FinishWall();\r
-\r
-  wallon = cornerwall[wallon];\r
-\r
-  //\r
-  // if the corner wall is visable, draw it\r
-  //\r
-  TESTWALLVISABLE;\r
-\r
-  if (wallvisable)\r
-  {\r
-    rightwall->x1 = oldwall->x2;               // common edge with last wall\r
-    rightwall->height1 = oldwall->height2;\r
-    edgex = ((long)tile.x<<16)+point2x[wallon];\r
-    edgey = ((long)tile.y<<16)+point2y[wallon];\r
-    FinishWall();\r
-  }\r
-\r
-}\r
-\r
-//===========================================================================\r