cave.c: fix vinfo knight's move crash

This crash was caused by me forgetting that dx/dy were the targeted spot minus
the player's position, not vice versa, and hence adding sx/sy when I should've
subtracted. While adding asserts to trap this error, I found a slew of other
out-of-bounds reads and writes in update_view(), so those are also now fixed.

Signed-off-by: Elly Fong-Jones <elly@leptoquark.net>