Permissive field of view defines visibility more loosely than other Field of Vision methods. A destination square is visible from a source square if there is any unobstructed line from some point in the source square to some point in the destination square. This means that players and monsters will automatically ‘peek’ around corners, for example. It also means that field of view is symmetric. That is to say that if a destination square is visible from a source square, then that source square is also visible from the destination square. Some approximation algorithms might lose the property of guaranteed symmetry.
One tricky corner case are literally the corners. There are two questions that must be answered. Are corners of squares valid points in the source and destination squares for determining visibility? And do corners of walls obstruct line of sight? Different algorithms may answer these questions in different ways.
There are a number of articles describing different methods:
Library | Language(s) | Algorithm(s) |
Permissive Field of View in Python | Python | Precise Permissive Field of View |
permissive-fov | C/C++ | |
Roguelike Library For Java | Java | |
Ruby implementation | Ruby | |
libtcod | C/C++/python | |
Permissive Field of View in Javascript | Javascript | |
permissive-fov | ||
Recursive shadow casting PFOV (and DFOV) | Haskell |