rogue: メッセージを最下部に移動

ゲームしてると、メッセージが最上部にある事に違和感を覚える。トルネコや一般のゲームのステレオタイプかなと思いつつ、だとしても最下部に移動したい。同様に最下部のステータスは上にほしい。つまり入れ替えたい。

rogueのメッセージやステータスはio.cにまとまってる。メッセージ処理は渡された文字列を表示し、長すぎる場合は折り返すようになっていた。ステータスは1行固定でフォーマットして出すという感じ。

さて、場所の入れ替えは、下記のようにして行った。

int
endmsg(void)
{
..
  if (mpos) {
..
-   mvaddstr(0, mpos, "--More--");
+   mvaddstr(VIEW_Y_MSG, mpos, "--More--");
..
  }
..
  if (islower((int)msgbuf[0]) && !lower_msg && msgbuf[1] != ')')
..
-   mvaddstr(0, 0, msgbuf);..
+   mvaddstr(VIEW_Y_MSG, 0, msgbuf);..
..
}

void
status(void)
{
    if (stat_msg)
..
    else
    {
-   move(STATLINE, 0);
+   move(VIEW_Y_STAT, 0);

最初のが折り返し、2番目がメッセージ。3番目がステータス。見つけてしまえばすごく単純。VIEW_Y_XX を好みな位置にすればいい。

あと、画面のリフレッシュもrefresh2()も同様にメンテ。ソースは省略するけどステータスの色付け処理は要らないので削除する。

-       if (color_mode2 == TRUE)
-           attrset(COLOR_PAIR(9) | A_BOLD);

変更後の画面はこんな感じ。

Level: 1  Gold: 0      Hp: 12(12)  Str: 16(16)  Arm: 4
                                   -----------------
                                   +............*..|
                                   |.......!.......|
                                   |...............+
                                   |..!....@.......|
                                   -+---------------
















Hello Rodney.  Welcome to the Dungeons of Doom.

意図通りになったので満足。

後記:

インデントのズレが結構多い。オリジナルを残す文化もわかるけど不統一だと読みづらいのでやはりなんとかしたい。といっても、clang-formatのようなフォーマッタで全部かけると返って見づらくなる事もあるし、好きなプリセットも見つかってない。