アットウィキロゴ

vision.c

壁=視線を遮るもの
床=視線を遮らないもの

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