rogue: 名前をRodneyに固定する

Rogueはゲームのオプションとして、昔の遅い端末の対策だったり、カラーなどの追加設定がある。

それらの設定を好みに調整して環境変数に書いておけば固定できる。と思ったら、コマンドラインオプションでしか設定できない項目がある。

コマンドラインオプションを見てみると、何やら複雑な事をしている。 例えば、何もしないと名前がログイン名になる。これはワークステーションにログインしてゲームする時代のコードで確かにそういう時もあった。

あと、このコードが難解。

    if (argc >= 2) {
        if (argv[1][0] == '-'
        &&  isdigit(argv[1][1]) && isdigit(argv[1][2])) {
            i = (argv[1][1] - '0') * 16 + argv[1][2] - '0';

一言でいうと、様々なPC移植版を再現するオプションを短く書いたコード。設定の意味は下のページの最後の方みると載ってる。

Rogue_Archive.Official/rogue54/rogue5.4.5x-src at master · suzukiiichiro/Rogue_Archive.Official

それぞれのPCに移植していく際にオプションが異なっているので、おじさんが rogue はまったよねーと話した場合に実はそれぞれ違うものを指してそうだ。ただ、自分自身、色合いとかスライムだったか等、全然覚えてないので、そういった会話を楽しむ事はできなそう。

と、ソースコードは読んでて面白いのだけど、しばらくソースいじりながらゲームでも遊びたい。 なので今日のところは、不要なとこ削って、設定もgetoptで書いてすっきりさせる事にした。

const struct option longopts[] = {
    { "bright",       no_argument,       NULL, OPT_BRIGHT },
    { "color",        no_argument,       NULL, OPT_COLOR },
    { "file",         required_argument, NULL, OPT_SAVE_FILE },
...
};

while ((opt=getopt_long(optc, optv, "", longopts, &longindex)) != -1) {
  switch (opt) {
    case OPT_BRIGHT:
      bright_mode = TRUE;
      break;
    ..
  }  
}

引数がoptcc, optv になっているのは、今は毎回コマンドライン入れずに設定固定させたいから。

$ ./rogue
Hello Rodney, just a moment while I dig the dungeon...

そして、このように固定できた。 満足したので、ゲームしないで終わる。

そういえば、学生時代、試験の前日に部屋を大掃除してたな。