*
*
*
* == Definition of visibility ==
*
* Two cells are in view of each other if there is any straight
* line that meets both cells and that doesn't meet any opaque
* cell in between, and if the cells are in LOS range of each
* other.
*
* Here, to "meet" a cell means to intersect the interiour. In
* particular, rays can pass between to diagonally adjacent
* walls (as can the player).
*
* == Terminology ==
*
* A _ray_ is a line, specified by starting point (accx, accy)
* and slope. A ray determines its _footprint_: the sequence of
* cells whose interiour it meets.
*
* The footprint of a ray and any prefix is called a _cellray_.
*
* For the purposes of LOS calculation, only the footprints
* are relevant, but rays are also used for shooting beams,
* which may travel beyond LOS and which can be reflected.
* See ray.cc.
*
* == Overview ==
*
* At first use, the LOS code makes some precomputations,
* filling a list of all relevant rays in one quadrant,
* and filling data structures that allow calculating LOS
* in a quadrant without checking each ray.
*
* The code provides functions for filling LOS information
* around a given center efficiently, and for querying rays
* between two given cells.