DynaHack のすすめ

ここ最近 NetHack バリアントの一つ DynaHack をプレイしていたのですが、とても面白かったので、ちょっと詳しく紹介します。
JNetHack やってた人向けです。
Windows だと Zip ダウンロードしてさくっと始められますのでぜひどうぞ。

どんなゲーム?

公式サイトでスクリーンショットが何枚か見れます。
About - DynaHack
モダンな感じですね。
NitroHack + UnNetHack な感じみたいですが、どっちもやったことないのでそこはよくわからないです。

英語だけど

アイテム名やモンスター名さえわかればなんとかなりますよ。
英語の名前を併記してくれてるJNetHackのスポイラーサイトを見ながらやればすぐに慣れます。

よいところ

とにもかくにも、インターフェース周りの改善がすごいです。

  • 公式 Windows バイナリあり
  • 設定が楽
  • インターフェースが大幅に改善
  • リプレイ閲覧機能あり
公式 Windows バイナリあり

Zip 展開すればすぐに遊べます。簡単。
色やフォントが気に入らない場合、実行ファイルのショートカットを作って、プロパティから設定できます。

設定が楽

defaults.nh とかメモ帳で修正しなくても、設定画面から簡単に設定変更できます。
(キーバインド変更したいと、結局設定ファイルいじることになりますが)

インターフェースが大幅に改善

公式のスクリーンショットをご覧ください。素敵ですね。バニラと比べると、大分別物です。

とりあえず、

  • インベントリが常時表示される(色付き)。アイテム選択時の[?]/[*]がほぼ不要
  • 足元情報も自動で表示される。アイテムや設備の有無など
  • 設備やアイテムが同一地点でかぶった場合、シンボルの背景色が変わる。いろいろあると一目でわかる
  • 次の操作がポップアップで表示される。アイテム使用時や名前付けの時とか
  • 前の操作の繰り返しにショートカットキーが使える。投げたり蹴ったりで方向指示が不要
  • HP/MP がわかりやすい。死にそうなら画面ごと色がかわる。雑プレイでも安心
  • メッセージログが常時表示され、いくらか過去ログも見れる。--More-- がほぼない
  • 開錠が可能かつ必要なら自動で開錠コマンドが実行される。わざわざ鍵を使わなくてよい
  • C-X で現在の素の特性・耐性とか虐殺済みの敵一覧とか見れる
  • C-E でアレが書ける。マジベン装備してるとマジベンで書いてくれて賢い
  • 危ないことをする場合、確認してくれる。罠に飛び込んだりとか
  • などなど

という感じで、面倒さが大分軽減されています。

プレイ前は面倒くささが NetHack のウリだろう?とか思ってましたが、慣れるともう戻れないですね。

リプレイ閲覧機能あり

追加インストールとかなしでスタート画面から簡単にリプレイが閲覧できます。
例えば --More-- が表示されないので、気づかないうちにニンフに重要アイテム取られてたりします。そんなときはリプレイ機能。プレイ中のセーブデータのリプレイもみれるので、インベントリウィンドウをみながら、たらたら再生していけば、どこでなくしたとかすぐわかります。便利。

スポイラーないの?

あんまないみたいですけど、UnNetHack のスポイラーが大体通用します。

ゲームバランス

※ネタバレたっぷりです。

全体的にバニラよりかは厳しめになってます。まあ、慣れるとバニラはぬるげーなのでわからなくはないですが、中・終盤のプレイ感覚が大分違ってきます。

色々ありますが、個人的にバニラからの違いが大きいと感じたところを挙げていきます。

  • マジカルアイテム
  • 識別の巻物の扱い変更
  • ユニコーンの角の弱体化
  • 敵がすぐ目覚める
  • 階層の追加と変更
  • 願いの制限強化
  • 虐殺の制限強化
  • ドラゴンの特性のランダム化
  • ボス級の敵にアレが効かない
  • ポリパイルはOK
マジカルアイテム

たまに普通の(アーティファクトでない)アイテムにマジカルな特性がつきます。スピードつきのエルフの靴とか、反射や千里眼がついた武器とか。
未識別の場合、アイテム名に「magical」ってついて、とりあえずマジカルとは判別できます。
で、それだけですと楽し気でいいんですが、神様が容赦なくこれくれます。下手すると+2マジカルゴムホースを3連続でよこしたりします。萎えることこの上ないです。
あと、敵が爆発するマジカル飛び道具を使ってきたりして、装備がばんばん燃えてきます。自分で使う分には楽しいですが(アイテム燃えるけど)。

識別の巻物の扱い変更

祝福の有無にかかわらず、3-6個の識別で固定みたいです。祝福して一気に識別ができなくなっています。
温存しないでとっとと使えってことでしょうけど、微妙。序盤で巻物使ってまで識別したいものとかないですし。

ユニコーンの角の弱体化

能力値を回復しないくれません。もとが便利すぎっちゃ便利過ぎなんですけど。
毒で力が減っても回復できないので、ハチがより厄介になってます。
とっととクローク装備しましょで済めば楽なのですが、毒耐性のために毒を食らいづらいのがなんとも面倒です。

敵がすぐ目覚める

バニラだと人目を盗めば玉座の間とかの敵は好きに殴れましたが、敵を殴っちゃうと周りのやつらも起きるように変更されています。
これのせいで、レプラコーンやニンフが大幅に厄介になっています。特に、ニンフが序盤からばんばんでるので、気を抜くとすぐ詰みます。

階層の追加と変更

アイテムたっぷりのサムの店とかドラゴンたっぷりの竜の洞窟とか増えています。ゲヘナも単純な迷路ではなくなっています。
サムの店のおかげで中盤の物資確保がしやすいですが、Slash'EM ほど簡単にアイテム入手できません。まあ、Slash'EM だと簡単すぎて単なる大量のプレゼント置き場になってましたが。
竜の洞窟については、ドラゴンの特性のランダム化の救済の面もあると思いますが、終盤すぎな気もします。
倉庫番も種類が増えて、クリアボーナスも3つの中から1つを選択できるようになってますので、反射や魔法防御が序盤から手に入ります。

願いの制限強化

大分きつくなってます。
まず、魔力を持つアイテム(欲しいものはたいていコレ)は願いの杖が必須です。玉座とかの願いだと拒否られます。
で、願いの杖が充填できません。バニラでは元チャージ+追加チャージ3+ラス1で最低5回は願えましたが、下手するとラス1しかなかったりします。最大でも3回です。
バニラだと、適当にプレイして願いの杖で最終装備を整えればよかったのですが、そうもいかなくなっています。
特にアーティファクト2個願いたい場合、クエスト攻略の後回しがほぼ必須になるので(アーティファクト数抑制のため)、プレイ感覚が別物になります。

虐殺の制限強化

巻物が祝福されても虐殺できるのは1種類だけです。
そのくせ、やっかいな敵 Disintegrator (ふれると分解)が追加されているせいで巻物が10枚欲しいレベルです。
バニラなら、余った願いで済んだのにね。まあ、マーカーやらポリパイルでがんばりましょう。

ドラゴンの特性のランダム化

ドラゴンの特性がプレイごとにランダムに決まります。blessed +2 silver dragon scale mail が簡単には願えません。
とりあえずドラゴンを見たらマジックミサイルを撃ち込めばいいドラゴンかわかります。
願いの制限と相まって、さくっと鎧入手といかないので、蘇生の杖で鱗を落とすまで粘る必要があるかも。
ドラゴンに会いにフォートローディオスに行くのも有効ですよ。

ボス級の敵にアレが効かない

エストネメシスとか大悪魔とかがアレを無視して攻撃してきます。
まあ、いいっちゃいいのですが、クエストネメシスによっては大分きつそうですね。
ちなみに大悪魔がふっかけてくるので、戦闘回避しづらくなってます。階段を陣取られたら瞬間移動の杖をどうぞ。

ポリパイルはOK

ポリパイルは普通にできます。でもアイテムの入手手段は増えてますので、やらなくてもなんとかなります(きついけど)。

その他

ちょっと不満な点もありますが、慣れればなんとかなります。

  • スタート時の吟味すると、リプレイリストとかが吟味で埋まったりしてちょっとしょんぼりです
  • 上にも書きましたが、--More-- がほとんどなくてさくさくログが流れていくので、慣れないうちは気づいたらわけわからんことになってたりします
  • 水上歩行できる場合でも水場に進むときに確認されるのはちょっと面倒な感じでした
  • デフォルトで[c]キーバインドが chat になってるせいで close ができない? とりあえず設定ファイル変更で対処

まとめ

バニラからは色々変わってますが、楽しいのでぜひどうぞ。おすすめです。

virtualbox でのネットワーク設定

環境: v4.0.4, ホスト Windows7 x64, ゲスト ubuntu 10.10

  1. VMのネットワーク設定から、「ホストオンリーアダプタ」を割り当てる
  2. Windows のコントロールパネル > ネットワーク接続から、「ローカルエリア接続」の共有を許可する
  3. VirtualBox Host-Only Network」のIPアドレス(初回共有許可時に変更されるはず)をゲートウェイとして、ゲストのIPアドレスを設定する

最後の部分はゲストの種類によって変わりますが、ubuntu10 だとこんな感じになります。

$ sudo vim /etc/network/interfaces
  ... (略) ...
  auto eth0
  iface eth0 inet static
      address 192.168.137.2
      netmask 255.255.255.0
      gateway 192.168.137.1
      dns-nameservers 192.168.137.1
$ sudo service network-interface restart INTERFACE=eth0

ここで、192.168.137.1 が「VirtualBox Host-Only Network」の IP アドレスです。
この例では、 eth0 のIPアドレスを 192.168.137.2 として静的に割り当てています。
(dns-nameservers の設定には resolvconf パッケージが必要です。)

あとは、ifconfig で設定値を表示するなり、ping 打つなりして、ネットワークに接続されているか確認してください。

cygwin 環境での wsh/cscript 用 shebang

wshスクリプトcygwin で直接実行できるようにするためのメモ。

通常の #! shebang は、 cscript(jscript) では構文エラーになってしまうので使えません。
cygwin(dash) でスクリプトを直接実行するために、sh でも jscript でも有効な shebang の代替が必要になります。

で、とりあえず以下で大丈夫な模様。

[ /'//*' ] && exec cscript -E:jscript -nologo `cygpath -w $0` $* #*/ ] ;

jscript 構文上では、変な正規表現とコメントが中においてある配列に、
sh 構文上では、変な test がある exec に解釈されます。

jscriptだと:

[ /'//*' ] && exec cscript -E:jscript -nologo `cygpath -w $0` $* #*/ ] ;

shだと:

[ /'//*' ] && exec cscript -E:jscript -nologo `cygpath -w $0` $* #*/ ] ;

実際の使用例、UAC昇格用のスクリプトです。

elevate:

[ /'//*' ] && exec cscript -E:jscript -nologo `cygpath -w $0` $* #*/ ] ;
var args = WScript.Arguments;
if (args.length > 0) {
  for (var opts = [], i = 1; i < args.length; i++) opts.push(args(i));
  WScript.CreateObject("Shell.Application")
    .ShellExecute(args(0), opts.join(' '), "", "runas");
}

virtualbox を微妙に使いやすくする

環境: v3.2.12, ホスト Windows7 x64, ゲスト ubuntu 10.10

virtualbox では、ログオン時の自動起動は比較的簡単にできますが、ログオフ時の自動終了ができません。ゲストが強制終了となります。

で、仕方ないので、端末エミュレータ起動時に virtualbox を連動してバックグラウンドで起動し、端末エミュレータ終了時に自動で状態保存するものをこさえました。

使い方

以下をダウンロードします。
https://github.com/juma/waitvbox/zipball/v0.0.1

展開して、waitvbox.exe を起動するショートカットを作ります。

例(putty と連動する):

waitvbox.exe "C:\Program Files\Oracle\VirtualBox" ubuntu "C:\Program Files\putty\putty.exe" 192.168.137.2

あとは、ショートカットから waitvbox を起動してください。

注意

  • あらかじめVMの状態を保存しておいてください
  • ホストからゲストに Ping が通るようにしないと、起動に失敗します。

virtualbox での共有フォルダのマウント

環境: v3.2.12, ホスト Windows7 x64, ゲスト ubuntu 10.10

共有フォルダのマウント状態がデフォルトだとなんか微妙なので、オーナを自分にしてみる。

$ sudo mount -t vboxsf -o uid=1000,gid=1000,fmode=0755,dmode=0755 my-work work
$ ls -la work
drwxr-xr-x 1 j_m j_m     0 2010-09-10 03:13 test-dir
drwxr-xr-x 1 j_m j_m     0 2010-11-21 05:30 test-file

その他オプションについて。
http://www.virtualbox.org/svn/vbox/trunk/src/VBox/Additions/linux/sharedfolders/mount.vboxsf.c

$ sudo mount.vboxsf
Usage: mount.vboxsf [OPTIONS] NAME MOUNTPOINT
Mount the VirtualBox shared folder NAME from the host system to MOUNTPOINT.

  -w                    mount the shared folder writably (the default)
  -r                    mount the shared folder read-only
  -n                    do not create an mtab entry
  -o OPTION[,OPTION...] use the mount options specified

Available mount options are:
     rw                 mount writably (the default)
     ro                 mount read only
     uid=UID            set the default file owner user id to UID
     gid=GID            set the default file owner group id to GID
     ttl=TTL            set the "time to live" to TID for the dentry
     dmode=MODE         override the mode of all directories to (octal) MODE
     fmode=MODE         override the mode of all regular files to (octal) MODE
     umask=UMASK        set the umask to (octal) UMASK
     dmask=UMASK        set the umask applied to directories only
     fmask=UMASK        set the umask applied to regular files only
     iocharset CHARSET  use the character set CHARSET for I/O operations
                        (default set is utf8)
     convertcp CHARSET  convert the folder name from CHARSET to utf8

Less common used options:
     noexec,exec,nodev,dev,nosuid,suid

Windows Server 2003 SP1 DDK とコンパイラ

ネタ元: http://d.hatena.ne.jp/NyaRuRu/20080215/p2

Windows Server 2003 SP1 DDK は無料でダウンロードできて、
普通のアプリケーション開発に使えるんですね…。

そこそこ新しい最適化コンパイラ(Version 13.10.4035、VS2003レベル)と
諸々のライブラリ(CRT,ATL3.0,MFC4.2)がセットになっています。

普通にMSVCRT.DLLにリンクできるので、ある意味今のVS Expressより便利かも。
コンパイラは少し古いですが。

ダウンロード先: http://www.microsoft.com/japan/whdc/DevTools/ddk/default.mspx

Windows2000でもインストールできました。

VC6のように使うと、リンク時に以下のエラーがでました。

msvcrt.lib(loadcfg.obj) : error LNK2001: unresolved external symbol ___security_cookie

http://support.microsoft.com/?scid=kb%3Ben-us%3B894573&x=12&y=16
曰く、bufferoverflowU.lib をリンクすれば良いみたいです。

以下をソースに追加しても、とりあえずリンクエラーは回避できますが、良いかどうかは解りません。
(素直に bufferoverflowU.lib をリンクしたほうがいいです。)

extern "C" {
unsigned long __security_cookie;
};

ruby-1.9 での1変数への0/1要素の配列の多重代入

1変数への0/1要素の配列の多重代入(?)の仕様が変わっています。

# ruby-1.8.x
a  = *[];  a #=> nil
a, = *[];  a #=> nil
a  = *[0]; a #=> 0
a, = *[0]; a #=> 0

# ruby-1.9.0
a  = *[];  a #=> []
a, = *[];  a #=> nil
a  = *[0]; a #=> [0]
a, = *[0]; a #=> 0
  • 左辺にコンマがない場合、1.8 までは最初の要素(なければnil)を変数に代入する
  • 左辺にコンマがない場合、1.9 では配列自体を変数に代入する
  • 左辺をコンマで区切って多重代入を明示すれば1.8でも1.9でも同じ

ちなみに、2要素以上の配列の場合、どちらの結果も同じです。
コンマがないと中身を取り出しません。

# ruby-1.8.x / ruby-1.9.0
a  = *[0,1] #=> [0,1]
a, = *[0,1] #=> 0

とりあえず、多重代入したいときは左辺にコンマを書いといた方がいいようです。

# まとまった解説とかないのかなあ。