壁=視線を遮るもの
床=視線を遮らないもの
left_ptrs[y][x] (x,y) から左に走査して最初に見つかる「床と接する壁」のX座標を保持
right_ptrs[y][x] (x,y) から右に走査して最初に見つかる「床と接する壁」のX座標を保持
vis_clear[y][x] (x,y) が壁(0) か床(1) か
could_see[n][y][x]
cs_rows0[y] &could_see[0][y][0] が初期値
cs_rows1[y] &could_see[1][y][0] が初期値
cs_rmin[y], cs_rmax[y] アップデートする範囲
vision_recalc()
vision_recalc()
get_unused_cs() vis_array を初期化 何も見えない状態にする
通常
view_from()
COULD_SEE (視線の通る範囲)をセットする
水中の場合
Pitにはまっている場合
周囲8マスに IN_SIGHT | COULD_SEE をセット
アップデートする範囲は周囲8マス
X-Ray vision の場合
視界範囲内に IN_SIGHT をセットする
Nightvision の場合
視界範囲内かつ COULD_SEEの位置に IN_SIGHT をセットする
do_light_sources()
各個の明かりの届く範囲に TEMP_LIT をセットする
現在 IN_SIGHT または TEMP_LIT で、変化のあった部分を newsym() で表示
TEMP_LITの部分には IN_SIGHT をセット
最終更新:2008年07月24日 21:43