Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This page combines previous information from other locations into one source about tileset pathnodes tile path nodes used in Tilesets and SET files.

Table of Contents

In Game Pathfinding Usage

The tileset pathnodes are used to do cross-tile click-to-walk and ActionMoveToLocation/ActionMoveToObject and related commands used via. scripting. If a location is outside the objects current tile (10x10 meter divisions in the map) then a path node specifies if one tile can reach another tile, and also if they were to move onto that tile would they then be able to move onto other tiles past itTile Path Nodes help the game's pathfinding system when you move from tile to tile. Within a tile, basic pathfinding systems will navigate a unit through the tile, around Placeables, Doors and Creatures, and across the local walkmesh. But for tile-to-tile movement, especially across longer distances greater than 2 tiles, a game will need something to speed up the calculation process. Tile Path Nodes offer a quick, almost pre-rendered way of getting to a distant location by reading details about a path through tiles from tile-edge to tile-edge.

All a pathnode says is "You can/can't go from this exit to that exit to that exit". It is used in the first pass of finding a path, after which it'll use the actual walkmesh and other methods (and check creatures, doors and placeables being in the way when they are close enough)". It is used in the first pass of finding a path, after which it'll use the actual walkmesh and other methods (and check creatures, doors and placeables being in the way when they are close enough).

PathNodes can have up to three entrypoints on an edge. Basic tiles, such as open rural or forest areas, will have single lines passing from edge to edge. Intermediate tiles, especially those with height transitions and crossers which block movement, will have one to two lines crossing from edge to edge.

PathNodes with three lines per edge can be used to simulate raised sections, hidden passages inside walls, or walkable ledges on a cliff.

Another special use of three-line PathNodes is to allow walkable-but-unreachable water. This special case allows for the placement of aquatic monsters with ranged abilities, and when you stand too close to the water edge, they can also physically attack. Other options are regions of air off the edge of a cliff in which aerial attackers can reside, or fire elementals may attack from a river of lava.

You can view the tile path nodes in game using the debug panel, selecting the rendertpn option. Tile links are with the blue and green links between tiles. Example from the Prelude, shows three rooms with the various TPN values, and a big room with TPN between each part.

...

Note that WASD movement does not use the tile path nodes so if you are testing a new tileset or a broken old one, this is an easy way to check if things work correctly (barring other things like doors blocking pathfinding).

Pathnode Table

Pathnodes

Below are This is all the pathnodes in the game, visually represented. The reason they are defined as base ASCII is since A-Z, a-z is because they are stored in ini files it maintains maximum compatibility (unlike odd characters like ; or =).

Note the names are case sensitive and put into the SET file as each tiles PathNode option.

Note the ASCII art is not to be considered authoriative, nor are the pictures, until generally accurate, but the pictures below need checking when the code has been better reviewed (see further on).end of page).

Info

These pictures will be sorted later into the table with higher resolution and clear diagrams.

To read a PathNode image, investigate the black lines crossing the whitespace. If you can enter the tile from an edge, the black line will touch that edge. If that black line crosses to another edge, then there is a path in that region of the tile that will allow you to cross the tile from the entry edge to the exit edge. In short, this converts the entire tile WalkMesh system into a few details and shortens tile-to-tile pathfinding time.

Image AddedImage AddedImage Added


Tile Path NodeASCII ArtPictureNotes
A


Code Block
---------
[   |   ]
[   |   ]
[---+---]
[   |   ]
[   |   ]
---------




B


Code Block
---------
[   |   ]
[---+-+ ]
[     +-]
[-+   | ]
[ |   | ]
---------




C


Code Block
---------
[  | |  ]
[  | |  ]
[--+ +--]
[  | |  ]
[  | |  ]
---------




D


Code Block
---------
[ |   | ]
[-+   +-]
[       ]
[-+   +-]
[ |   | ]
---------




E


Code Block
---------
[ |  |  ]
[-+  |  ]
[    +--]
[-+  |  ]
[ |  |  ]
---------




F


Code Block
---------
[  | |  ]
[  | |  ]
[--+-+--]
[  | |  ]
[  | |  ]
---------




G


Code Block
---------
[  | |  ]
[  | |  ]
[--+++--]
[   |   ]
[   |   ]
---------




H


Code Block
---------
[       ]
[       ]
[---+   ]
[   |   ]
[   |   ]
---------




I


Code Block
---------
[   |   ]
[   |   ]
[---+   ]
[   |   ]
[   |   ]
---------




J


Code Block
---------
[     | ]
[     +-]
[       ]
[-+     ]
[ |     ]
---------



NOTE: this is wrong in the ASCII need to amend
K


Code Block
---------
[ |   | ]
[ |   +-]
[-+     ]
[   +---]
[   |   ]
---------




L


Code Block
---------
[   |   ]
[   |   ]
[   +   ]
[   |   ]
[   |   ]
---------




M


Code Block
---------
[  | |  ]
[  | |  ]
[  + +  ]
[  | |  ]
[  | |  ]
---------




N


Code Block
---------
[   |   ]
[   |   ]
[   +   ]
[       ]
[       ]
---------




O


Code Block
---------
[ |   | ]
[-+   /-]
[   +   ]
[-/   +-]
[ |   | ]
---------




P


Code Block
Deleted definition



"Removed" so unused so don't use it (who knows might be at somepoint reused). Instead use T for a total pathfinding blocker (eg all black wall tiles in interior areas)
Q


Code Block
---------
[ |   | ]
[ |   | ]
[-+  /--]
[   +   ]
[   |   ]
---------




R


Code Block
---------
[   |   ]
[   +   ]
[-+  \--]
[ |   | ]
[ |   | ]
---------




S


Code Block
---------
[ |   | ]
[ |   | ]
[-+   +-]
[       ]
[       ]
---------




T


Code Block
---------
[       ]
[       ]
[       ]
[       ]
[       ]
---------



A blocker pathfinding node, use for all black wall tiles in interior areas or areas of sea or similar no-pathingfinding tiles
U


Code Block
---------
[   |   ]
[    \  ]
[-+   +-]
[    /  ]
[   |   ]
---------




V


Code Block
---------
[   |   ]
[   +   ]
[     --]
[    /  ]
[   |   ]
---------




W


Code Block
---------
[   |   ]
[   +   ]
[--     ]
[  \    ]
[   |   ]
---------




X


Code Block
---------
[   |   ]
[   +   ]
[-+     ]
[       ]
[       ]
---------




Y


Code Block
---------
[   |   ]
[   +   ]
[       ]
[   +   ]
[   |   ]
---------




Z


Code Block
---------
[   |   ]
[---+   ]
[   +-+-]
[-+/  | ]
[ |   | ]
---------




a


Code Block
---------
[  | |  ]
[  | +  ]
[--+++--]
[   |   ]
[   |   ]
---------




b


Code Block
---------
[  | |  ]
[  + |  ]
[--+++--]
[   |   ]
[   |   ]
---------




c


Code Block
---------
[ | | | ]
[ | | | ]
[-+-+-+-]
[   |   ]
[   |   ]
---------




d


Code Block
---------
[ | | | ]
[ | + | ]
[-+   +-]
[  \ /  ]
[   |   ]
---------




e


Code Block
---------
[   |   ]
[---+-+ ]
[---  +-]
[-+ | | ]
[ | | | ]
---------




f


Code Block
---------
[ | | | ]
[ | | | ]
[-+ + +-]
[ | | | ]
[ | | | ]
---------



Added in later Bioware patches so may not be used in the earliest tilesets.
g


Code Block
---------
[ | | | ]
[ | | | ]
[-+-+ +-]
[ | | | ]
[ | | | ]
---------



Added in later Bioware patches so may not be used in the earliest tilesets.
h


Code Block
---------
[   |   ]
[---+-+ ]
[----/+-]
[-+ | | ]
[ | | | ]
---------



Added in later Bioware patches so may not be used in the earliest tilesets.

Similar to e only with two of the areas connected.

i


Code Block
---------
[---+---]
[   |   ]
[-+ | +-]
[   |   ]
[---+---]
---------



Added in later Bioware patches so may not be used in the earliest tilesets.
j


Code Block
---------
[---+---]
[       ]
[-+   +-]
[       ]
[---+---]
---------



Added in later Bioware patches so may not be used in the earliest tilesets.
k


Code Block
---------
[ | | | ]
[-+ | | ]
[---+ +-]
[-+ | | ]
[ | | | ]
---------



Added in later Bioware patches so may not be used in the earliest tilesets.
l


Code Block
---------
[ | | | ]
[-+ | +-]
[---+---]
[-+ | +-]
[ | | | ]
---------



Added in later Bioware patches so may not be used in the earliest tilesets.
m


Code Block
---------
[ | | | ]
[-+ | +-]
[   +   ]
[-+ | +-]
[ | | | ]
---------



Added in later Bioware patches so may not be used in the earliest tilesets.
n


Code Block
---------
[ | | | ]
[-+ + +-]
[       ]
[-+ + +-]
[ | | | ]
---------



Added in later Bioware patches so may not be used in the earliest tilesets.
o


Code Block
---------
[ | | | ]
[-+ | | ]
[   + +-]
[-+ | | ]
[ | | | ]
---------



Added in later Bioware patches so may not be used in the earliest tilesets.
p


Code Block
---------
[ |   | ]
[-+   | ]
[-+   +-]
[-+   | ]
[ |   | ]
---------



Added in later Bioware patches so may not be used in the earliest tilesets.
q


Code Block
---------
[ |   | ]
[-+   | ]
[-----+-]
[-+   | ]
[ |   | ]
---------



Added in 1.87.8193.35.
r


Code Block
---------
[ | | | ]
[-+ + +-]
[-+   +-]
[-+ + +-]
[ | | | ]
---------



Added in 1.87.8193.35.
s


Code Block
---------
[ |   | ]
[-+   +-]
[-+   +-]
[-+ + +-]
[ | | | ]
---------



Added in 1.87.8193.35.
t


Code Block
---------
[ |   | ]
[-+   +-]
[   +---]
[-+ | +-]
[ | | | ]
---------



Added in 1.87.8193.35.
u


Code Block
---------
[ | | | ]
[-+ | +-]
[   +---]
[-+ | +-]
[ | | | ]
---------



Added in 1.87.8193.35.
v


Code Block
---------
[ | | | ]
[-+ | +-]
[-+ +---]
[-+ | +-]
[ | | | ]
---------



Added in 1.87.8193.35.
w


Code Block
---------
[   |   ]
[   +   ]
[-+   +-]
[   +   ]
[   |   ]
---------



Added in 1.87.8193.35.
x


Code Block
---------
[ |     ]
[-+     ]
[       ]
[-+   +-]
[ |   | ]
---------



Added in 1.87.8193.35.

Technical Engine Definition

The game hardcodes the pathnode definitions - Bioware added several post-release as have Beamdog covering the majority of tile connection possibilities. The code defining them has been provided by the developers but is hard to parse (Although the comments do show a rough outline of which each one is defined as):

Code Block
titlePathnodes
collapsetrue
         case NWTILE_PATH_FINDING_TYPE_A:
        {
            //    ---------
            //    [   |   ]
            //    [   |   ]
            //    [---+---]
            //    [   |   ]
            //    [   |   ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_B:
        {
            //    ---------
            //    [   |   ]
            //    [---+-+ ]
            //    [     +-]
            //    [-+   | ]
            //    [ |   | ]
            //    ---------
            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = -2.5;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 2.5;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -2.5;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_C:
        {
            //    ---------
            //    [  | |  ]
            //    [  | |  ]
            //    [--+ +--]
            //    [  | |  ]
            //    [  | |  ]
            //    ---------

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 2.5;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_D:
        {
            //    ---------
            //    [ |   | ]
            //    [-+   +-]
            //    [       ]
            //    [-+   +-]
            //    [ |   | ]
            //    ---------

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = 2.5;

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = -2.5;

            (*pfRegionNodes)[i++] = 2.5;
            (*pfRegionNodes)[i++] = -2.5;

            (*pfRegionNodes)[i++] = 2.5;
            (*pfRegionNodes)[i++] = 2.5;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 2.5;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -2.5;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = -2.5;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 2.5;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 3;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_E:
        {
            //    ---------
            //    [ |  |  ]
            //    [-+  |  ]
            //    [    +--]
            //    [-+  |  ]
            //    [ |  |  ]
            //    ---------

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = 2.5;

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = -2.5;

            (*pfRegionNodes)[i++] = 2.5;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 2.5;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -2.5;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_F:
        {
            //    ---------
            //    [  | |  ]
            //    [  | |  ]
            //    [--+-+--]
            //    [  | |  ]
            //    [  | |  ]
            //    ---------

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_G:
        {
            //    ---------
            //    [  | |  ]
            //    [  | |  ]
            //    [--+++--]
            //    [   |   ]
            //    [   |   ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_H:
        {
            //    ---------
            //    [       ]
            //    [       ]
            //    [---+   ]
            //    [   |   ]
            //    [   |   ]
            //    ---------

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_I:
        {
            //    ---------
            //    [   |   ]
            //    [   |   ]
            //    [---+   ]
            //    [   |   ]
            //    [   |   ]
            //    ---------

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_J:
        {
            //    ---------
            //    [     | ]
            //    [     +-]
            //    [       ]
            //    [-+     ]
            //    [ |     ]
            //    ---------

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = -2.5;

            (*pfRegionNodes)[i++] = 2.5;
            (*pfRegionNodes)[i++] = 2.5;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_K:
        {
            //    ---------
            //    [ |   | ]
            //    [ |   +-]
            //    [-+     ]
            //    [   +---]
            //    [   |   ]
            //    ---------

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = -2.5;

            (*pfRegionNodes)[i++] = 2.5;
            (*pfRegionNodes)[i++] = 2.5;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = -2.5;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 2.5;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_L:
        {
            //    ---------
            //    [   |   ]
            //    [   |   ]
            //    [   +   ]
            //    [   |   ]
            //    [   |   ]
            //    ---------

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_M:
        {
            //    ---------
            //    [  | |  ]
            //    [  | |  ]
            //    [  + +  ]
            //    [  | |  ]
            //    [  | |  ]
            //    ---------

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 2.5;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;

            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_N:
        {
            //    ---------
            //    [   |   ]
            //    [   |   ]
            //    [   +   ]
            //    [       ]
            //    [       ]
            //    ---------

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_O:
        {
            //    ---------
            //    [ |   | ]
            //    [-+   /-]
            //    [   +   ]
            //    [-/   +-]
            //    [ |   | ]
            //    ---------

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = 2.5;

            (*pfRegionNodes)[i++] = 0;
            (*pfRegionNodes)[i++] = 0;

            (*pfRegionNodes)[i++] = 2.5;
            (*pfRegionNodes)[i++] = -2.5;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 2.5;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -2.5;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = -2.5;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 2.5;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_P:
        {
            // Deleted tile
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_Q:
        {
            //    ---------
            //    [ |   | ]
            //    [ |   | ]
            //    [-+  /--]
            //    [   +   ]
            //    [   |   ]
            //    ---------

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = 1.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_R:
        {
            //    ---------
            //    [   |   ]
            //    [   +   ]
            //    [-+  \--]
            //    [ |   | ]
            //    [ |   | ]
            //    ---------

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = 1.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_S:
        {
            //    ---------
            //    [ |   | ]
            //    [ |   | ]
            //    [-+   +-]
            //    [       ]
            //    [       ]
            //    ---------

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 2.5;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_T:
        {
            //    ---------
            //    [       ]
            //    [       ]
            //    [       ]
            //    [       ]
            //    [       ]
            //    ---------
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_U:
        {
            //    ---------
            //    [   |   ]
            //    [    \  ]
            //    [-+   +-]
            //    [    /  ]
            //    [   |   ]
            //    ---------
            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 2.5;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_V:
        {
            //    ---------
            //    [   |   ]
            //    [   +   ]
            //    [     --]
            //    [    /  ]
            //    [   |   ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 2.5;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = -1.25;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_W:
        {
            //    ---------
            //    [   |   ]
            //    [   +   ]
            //    [--     ]
            //    [  \    ]
            //    [   |   ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 2.5;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = -1.25;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_X:
        {
            //    ---------
            //    [   |   ]
            //    [   +   ]
            //    [-+     ]
            //    [       ]
            //    [       ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 2.5;

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_Y:
        {
            //    ---------
            //    [   |   ]
            //    [   +   ]
            //    [       ]
            //    [   +   ]
            //    [   |   ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 2.5;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = -2.5;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_Z:
        {
            //    ---------
            //    [   |   ]
            //    [---+   ]
            //    [   +-+-]
            //    [-+/  | ]
            //    [ |   | ]
            //    ---------

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 2.5;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -2.5;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_a:
        {
            //    ---------
            //    [  | |  ]
            //    [  | +  ]
            //    [--+++--]
            //    [   |   ]
            //    [   |   ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 2.5;
            (*pfRegionNodes)[i++] = 2.5;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_b:
        {
            //    ---------
            //    [  | |  ]
            //    [  + |  ]
            //    [--+++--]
            //    [   |   ]
            //    [   |   ]
            //    ---------

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = 2.5;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_c:
        {
            //    ---------
            //    [ | | | ]
            //    [ | | | ]
            //    [-+-+-+-]
            //    [   |   ]
            //    [   |   ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_d:
        {
            //    ---------
            //    [ | | | ]
            //    [ | + | ]
            //    [-+   +-]
            //    [  \ /  ]
            //    [   |   ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_e:
        {
            //    ---------
            //    [   |   ]
            //    [---+-+ ]
            //    [---  +-]
            //    [-+ | | ]
            //    [ | | | ]
            //    ---------
            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_f:
        {
            //    ---------
            //    [ | | | ]
            //    [ | | | ]
            //    [-+ + +-]
            //    [ | | | ]
            //    [ | | | ]
            //    ---------
            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_g:
        {
            //    ---------
            //    [ | | | ]
            //    [ | | | ]
            //    [-+-+ +-]
            //    [ | | | ]
            //    [ | | | ]
            //    ---------
            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_h:
        {
            // Similar to NWTILE_PATH_FINDING_TYPE_e only with two of the areas connected.
            //    ---------
            //    [   |   ]
            //    [---+-+ ]
            //    [----/+-]
            //    [-+ | | ]
            //    [ | | | ]
            //    ---------
            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_i:
        {
            //    ---------
            //    [---+---]
            //    [   |   ]
            //    [-+ | +-]
            //    [   |   ]
            //    [---+---]
            //    ---------
            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_j:
        {
            //    ---------
            //    [---+---]
            //    [       ]
            //    [-+   +-]
            //    [       ]
            //    [---+---]
            //    ---------
            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_k:
        {
            //    ---------
            //    [ | | | ]
            //    [-+ | | ]
            //    [---+ +-]
            //    [-+ | | ]
            //    [ | | | ]
            //    ---------
            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;
        case NWTILE_PATH_FINDING_TYPE_l:
        {
            //    ---------
            //    [ | | | ]
            //    [-+ | +-]
            //    [---+---]
            //    [-+ | +-]
            //    [ | | | ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 4;
            (*pnTileExitRegion)[k++] = 4;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_m:
        {
            //    ---------
            //    [ | | | ]
            //    [-+ | +-]
            //    [   +   ]
            //    [-+ | +-]
            //    [ | | | ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 4;
            (*pnTileExitRegion)[k++] = 4;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_n:
        {
            //    ---------
            //    [ | | | ]
            //    [-+ + +-]
            //    [       ]
            //    [-+ + +-]
            //    [ | | | ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 4;
            (*pnTileExitRegion)[k++] = 5;
            (*pnTileExitRegion)[k++] = 5;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_o:
        {
            //    ---------
            //    [ | | | ]
            //    [-+ | | ]
            //    [   + +-]
            //    [-+ | | ]
            //    [ | | | ]
            //    ---------
            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_p:
        {
            //    ---------
            //    [ |   | ]
            //    [-+   | ]
            //    [-+   +-]
            //    [-+   | ]
            //    [ |   | ]
            //    ---------
            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_q:
        {
            //    ---------
            //    [ |   | ]
            //    [-+   | ]
            //    [-----+-]
            //    [-+   | ]
            //    [ |   | ]
            //    ---------
            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_r:
        {
            //    ---------
            //    [ | | | ]
            //    [-+ + +-]
            //    [-+   +-]
            //    [-+ + +-]
            //    [ | | | ]
            //    ---------
            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -5.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = -5.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfRegionNodes)[i++] = 5.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 5.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 4;
            (*pnTileExitRegion)[k++] = 4;
            (*pnTileExitRegion)[k++] = 5;
            (*pnTileExitRegion)[k++] = 6;
            (*pnTileExitRegion)[k++] = 6;
            (*pnTileExitRegion)[k++] = 7;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_s:
        {
            //    ---------
            //    [ |   | ]
            //    [-+   +-]
            //    [-+   +-]
            //    [-+ + +-]
            //    [ | | | ]
            //    ---------
            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -5.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = -5.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfRegionNodes)[i++] = 5.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 4;
            (*pnTileExitRegion)[k++] = 4;
            (*pnTileExitRegion)[k++] = 5;
            (*pnTileExitRegion)[k++] = 6;
            (*pnTileExitRegion)[k++] = 6;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_t:
        {
            //    ---------
            //    [ |   | ]
            //    [-+   +-]
            //    [   +---]
            //    [-+ | +-]
            //    [ | | | ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 4;
            (*pnTileExitRegion)[k++] = 4;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_u:
        {
            //    ---------
            //    [ | | | ]
            //    [-+ | +-]
            //    [   +---]
            //    [-+ | +-]
            //    [ | | | ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 4;
            (*pnTileExitRegion)[k++] = 4;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_v:
        {
            //    ---------
            //    [ | | | ]
            //    [-+ | +-]
            //    [-+ +---]
            //    [-+ | +-]
            //    [ | | | ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = -4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = -4.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 4.0;

            (*pfTileExits)[j++] = 4.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 3;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 4;
            (*pnTileExitRegion)[k++] = 4;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 5;
            (*pnTileExitRegion)[k++] = 5;
            (*pnTileExitRegion)[k++] = 0;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_w:
        {
            //    ---------
            //    [   |   ]
            //    [   +   ]
            //    [-+   +-]
            //    [   +   ]
            //    [   |   ]
            //    ---------
            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = 4.0;

            (*pfRegionNodes)[i++] = -4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfRegionNodes)[i++] = 0.0;
            (*pfRegionNodes)[i++] = -4.0;

            (*pfRegionNodes)[i++] = 4.0;
            (*pfRegionNodes)[i++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = 0.0;

            (*pfTileExits)[j++] = 0.0;
            (*pfTileExits)[j++] = -5.0;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 3;
        }
        break;

        case NWTILE_PATH_FINDING_TYPE_x:
        {
            //    ---------
            //    [ |     ]
            //    [-+     ]
            //    [       ]
            //    [-+   +-]
            //    [ |   | ]
            //    ---------

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = 2.5;

            (*pfRegionNodes)[i++] = -2.5;
            (*pfRegionNodes)[i++] = -2.5;

            (*pfRegionNodes)[i++] = 2.5;
            (*pfRegionNodes)[i++] = -2.5;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = 5.0;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = 2.5;

            (*pfTileExits)[j++] = -5.0;
            (*pfTileExits)[j++] = -2.5;

            (*pfTileExits)[j++] = -2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 2.5;
            (*pfTileExits)[j++] = -5.0;

            (*pfTileExits)[j++] = 5.0;
            (*pfTileExits)[j++] = -2.5;

            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 0;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 1;
            (*pnTileExitRegion)[k++] = 2;
            (*pnTileExitRegion)[k++] = 2;
        }
        break; 

Technical Explaination

An explaination of the code for those who want to understand it perfectly:

...