Dive Into Source Code

この記事は Roguelike Advent Calendar 2013 の24日目の記事です。


今回の記事は「Roguelikeゲームのソースコードを読んでみよう、読みやすくする環境を整えてみよう」について書いてみます。

ソースコードのダウンロード

商用・同人ゲーム用でないRoguelikeゲームの多くがソースコードを公開しています。置いてある場所はsourceforgegithub、自前サイトなど様々ですが、好きなタイトルのソースコードをダウンロードしてみましょう。


プログラムを完全に理解するにはC言語等の知識が必要ですが、特に知識がなくても読める部分(*bandのlib/edit/以下とか)もたくさんありますので、ダンジョン探索の合間の気分転換がてらにいかがでしょうか。


Macでのやり方は(持ってないので)今回解説しません。

Windows

個人的にはDevasというソフトを使っています。→ ダウンロードページ
複数のフォルダから正規表現検索でき、動作もそこそこ軽いのでおすすめ。好みの外部エディタでファイルを開くこともできます。

ソースコード全体を読むのにはやや力不足ですが、特定のメッセージの周辺を探すには十分です。


他にもこんな便利なソフトあるよ! という人は是非教えてください。

Linux

伝統的なgrepではこんな感じですが:

% cd include
% find . -type f -print | xargs egrep -n "Hallu[[:alpha:]]+"

ack-grepというツールを導入することで、さらに見やすく検索することができます。

% ack-grep "Hallu[\w]+"

ack-grepの導入は以下の通りです。

; apt-getでのインストールの場合
# apt-get install ack-grep 
; YUMでのインストールの場合
# yum install ack

ブラウザで見る 〜GNU Global編〜

% cd nethack-3.4.3
% gtags
; GPATH, GRTAGS, GSYMS, GTAGSが生成される。
% htags --alphabet --line-number --symbol --xhtml
; HTMLディレクトリが生成される。これを適当なHTTPサーバで公開される場所に置く


ワンクリックで変数や関数の定義場所に飛ぶことができます。
また、emacsvimなどエディタとの連携も可能です。

GNU Globalの導入は以下の通りです。

; apt-getでのインストールの場合
# apt-get install global
; YUMでのインストールの場合
# yum install global

ブラウザで見る 〜OpenGrok編〜

すいませんがOpenGrokのインストールに手間取ってるので後で追記します……

まとめ

ソースコード読むだけでもけっこう楽しいのでレッツチャレンジ。

次回予告

飛び入りの方が誰か入らない場合@deskullさんになると思います。

Hack & Slash & Eat (or Die)

この記事は Roguelike Advent Calendar 2013 の21日目の記事です。

前回の記事(id:dplusplus:20131214)では最近のNetHackヴァリアント事情についてひとくさり記事を書きました。
今回は、「NetHackってどういうゲームなの?」という点について個人的な感想を交えつつお伝えしていこうと思います。

何をするゲームなの

あなたは神様のパシリとして「イェンダーの魔除け」というアイテムを取りに運命の大迷宮というダンジョンにやってきました。がんばって取ってきてね!


物語の導入としては以上です。あ、あと途中で故郷の仲間が助けを求めてくる「クエスト」もあります。

もうちょっと詳しく

NetHackは「ローグライク」というジャンルに属するゲームです。
先祖である"Rogue"と同じく、ランダム生成されたダンジョンを探索しつつ、敵を倒しながらキャラクターを強くしていき、数々の困難を乗り越えゲームクリアを目指すといった方針は変わっていません。ただ、Rogueとは違って上の階層に戻ることもできます。
angband系と違い一度生成された階層は固定され*1、また「地上の街」のような無限に補給可能なポイントもありません。

潜れ! 倒せ! そして……食らえ!

NetHackは迷宮に潜るゲームです。持ち込んだ食料があるにせよいずれ尽きてしまい、何かを食べなければ餓死するのは必定です。
そこでどうするか?


モンスターを倒して、その死体を食うことが序盤の戦略です。
※まともな食料のみで食いつなぐのも可能ですが、いわゆる「縛りプレイ」の範疇になります


また、モンスターの肉を食うことでプレイヤー自身が様々な耐性を身につけることができ、食糧補給と同時に自らを強化することにも繋がります。(赤ドラゴンを食べると火への耐性など)

でもご用心! うかつに変なものを食べると食中毒、石化、スライム化など抜き差しならない状態に陥りますし、安全な肉だからといって食べ過ぎるとのどに詰まらせて死んでしまいます。
同族食らいも恒久的なペナルティがつくのでおすすめしません。


NetHackの「死体を食べて自らを強化」というフィーチャーのため、キャラもの二次創作が困難となっているのはいかんともしがたいところです。

多彩なコマンド・アイテムとそれによる幅広い戦術

NetHackには多くのコマンドがあり、常用するものから使うのが珍しいものまで様々あります。
ここで一つ、kickコマンドに着目してみましょう。文字通り足で蹴るコマンドです。

kickコマンドは以下のようにして使うことが出来ます:

  • 鍵のかかったドアに使って、ドアを蹴破る
  • 鍵のかかった宝箱に使って鍵をこじ開ける
  • モンスターにダメージを与える
  • 床の上のアイテムを蹴って移動させる
  • 木を蹴って果物をゲット
  • などなど……

NetHackは多彩なコマンドとそれに関連付いた様々な効果により、(無限ではないにしろ)幅広い戦術を試すことができます。

ただ、状況によっては悪い結果を招く場合も当然あります。上のような場合、

  • 店のドアを蹴破って店主を怒らせる
  • 宝箱の中の割れ物が壊れる
  • 靴を装備せずに石化の魔力を持ったモンスターを蹴って石化する
  • 割れ物を蹴って壊す
  • 木を蹴って蜂が飛んでくる

状況を把握して有効なコマンドを使うことがゲームクリアへの近道です。


また、ゲーム中に現れる様々な魔法のアイテムを用いても様々な行動が可能です。

あなたはうっかり水たまりに落ちてしまい、命からがら這い上がりました。
しかし荷物を詰め込んだ道具袋を手放してしまい、水の底に沈んだままです。
さてどうしよう?

このような状況を打開するにもいろいろなアプローチができます。

  • 吹雪の杖で水を凍らせて掘る。
  • 巻物を読んで埋め立てて掘る。
  • 炎の杖で水を蒸発させる。
  • 瞬間移動の杖で袋をどこかに移動させる。
  • 水中呼吸の魔除けを装備して潜る。
  • 水棲モンスターに変身して潜る。
  • などなど……

これらは一例ですが、他にも多種多様なプレイングが可能です。

いろんなゲーム内メッセージ

全てが文字で表されるNetHackですが、その量は膨大で、ある種偏執狂的なものがあります。
一例を挙げると、「幻覚」というバッドステータスにかかっている状況では、あらゆるメッセージが(薬物中毒になったかのような)へんてこなものになってしまいます。
しかし幻覚状態はモンスターが正しい姿で認識できないなど危険な状態なので、大抵即座に回復されます。
まさに無駄としか言いようのない機能なのですが、異様に力が入っているのでついつい探してみたくなります。
全部探してみたいという人は、ソースコードが公開されているので読んでみましょう。

死を楽しもう

ローグライクの常として、恒久的な死(permanent death)という要素があります。一旦ゲームオーバーになると、そのキャラクターは死を迎え、また一からやり直すこととなります。
その際、以下のようなメッセージが表示されます。

このように「(モンスター名)に殺された」という死因はよくあることですが、他にも様々な死に様が存在し、突飛な死に様を追求するプレイヤーも存在します。

  • 落馬して死ぬ
  • 火の付いた油の瓶を頭の上に投げて落ちてきたダメージで死ぬ
  • 階層間テレポートで行き先に空中を指定して死ぬ
  • 石化の魔力を持ったモンスターの死体を装備して死ぬ
  • 罠にかかった石化の魔力を持ったモンスターを助けようとして死ぬ
  • その他いろいろ石化して死ぬ

プレイヤースキルが命であるローグライクにおいて、死(ゲームオーバー)はあなた自身のスキルを高めてくれる教師です。せっかくだから死を楽しみながら遊んでみましょう。


……まあ、たまには理不尽な死もあるんだけどね。

まとめ

NetHack楽しいよ、こわくないよ。

次回予告

次はdeskullさんにバトンタッチ!

*1:つまり、どこかの階層に置いてきたアイテムを「取りに戻る」ということが可能であり、同時に「生成された強いモンスターが居座る」ということも意味します

NetHack Variant Update 2013

この記事は Roguelike Advent Calendar 2013 の14日目の記事です。


id:dis-c氏がadvent calendarを立ち上げてくれたので2番手として名乗りを上げてみました。
最近どうもRoguelikeを遊んでいなくて僭越ではありますが、こういうのは勢いが大事ということで気にせずどんどん書いていこうと思います。


NetHackとはどんなゲームか? については多分後日の記事で書きます。*1とりあえず、「不思議のダンジョンシリーズ」の遠い親戚くらいに考えておいてください。


さて、ここで本家NetHackのサイトを見てみましょう。

08 Dec 2003 NetHack 3.4.3 released CURRENT VERSION

おう……最終バージョンのリリースが丁度10年前ですね。時の経つのは早いものです。
といっても、私が始めた時にはもう日本語版NetHack 3.4.3がリリースされていたのですが。セーラー戦士などなかった。


このように本家NetHackの更新はもはや絶望的ではあるのですが、プログラムのソースコードが公開されている利点を生かしてNetHackから枝分かれしたヴァリアント(派生物)が様々生まれており、いくつかは現在でも更新が行われています。
今回の記事では現時点で比較的更新が活発なヴァリアントを、私自身の知識更新ついでに紹介していきます。

UnNetHack

それほど派手な拡張はないものの、NetHackでの固定マップやゲヘナの多様性を増やす方向で強化されています。詳しくは以下の翻訳記事をごらんください(若干古い)


UnNetHack最凶のモンスター、anti-matter vortex(緑色のv)。アーティファクトも分解しちゃう


また、初心者向けの「チュートリアルモード」も実装されています。初心者がヴァリアントに手を出すことがあるのか? というのはさておき、面白い試みだと思います。


現在バージョン4.0.0がリリースされています。開発ブランチに5.1.0のディレクトリが見られますが、まだ公式アナウンスは出ていない模様。
また、さらにUnNetHackから派生したUnNetHack Plusというヴァリアントも出ている模様です。


日本語化されたバージョンはso-miya氏がリリースしていたのですが、最近音沙汰がありません。仕事が忙しいだけなのを願いたいのですが……

DynaHack

以前開発されていたNitroHackというヴァリアントのさらなる派生です。UnNetHackの要素も取り込まれているようです。
ネットワークプレイ特化や表示・操作インターフェイスの向上など盛り込まれています。


win版dynahack画面。合い言葉はAscend or Die


Linux上でも遊べるようですがまだ試していません。doc/unnitorohack.txtにインストールガイドらしきものがあります。

NetHack 4

NetHack3.4.3の後継を目指したヴァリアントですが、元々の開発陣とは関係ないようです。こちらもNitroHackをベースにしています。

dNetHack

NetHack3.4.3ベースのヴァリアントです。
「数多くのアーティファクトの追加、新モンスターの実装、マップの再構成および拡張」が目玉というふうになっています。
また、新システムとして"ward sign"というのが実装されているようです……どうも床に文字を刻んで発動させるようなのですが、よく把握していません。分かり次第追記します。

JNetHack FHS patch

最後に国産ヴァリアントとしてJNetHack FHS patchを挙げておきます。
JNetHack 3.4.3を基本に、各種アニメ・漫画ネタ(わりと古め)をたくさん、またPatchDBに存在する数多のパッチを貪欲に取り込んだヴァリアントです。現在も地道な更新が続いています。

追加要素が盛りだくさんすぎて正直混沌としていますが、NetHackを始めたばかりの右も左も分からない状態を再体験するにはいいのではないでしょうか。

一時期はちょっと遊ぶ度にクラッシュしている感じでまともに遊べなかったのですが最近はだいたい安定しているようです。
Linuxで動かすには少々パッチを当てる必要がありますがそれはまた別の記事で。

まとめ

NetHackの血脈は滅びず受け継がれています。みんなもっとプレイしよう。そしてたくさん死のう。

次回予告

次回はid:Albaさんにバトンタッチ!

*1:id:dplusplus:20131221で書きました

モンハン日記その3

オンラインプレイでHR上げが捗る。現在HR7。


上位ともなるとモンスターの一撃が厳しくなり、しかも狂竜化すると動きも速くなるので辛い。まあ地道に装備をととのえて行きたい。

  • 武器:
  • 防具:ジャギィS一式・観察眼+6スロ1お守り
  • 発動スキル: 攻撃力UP【中】・砥石使用高速化・捕獲の見極め・気絶確率半減
  • 採取用武器:スロット3ならなんでも
  • 採集用防具:レザーS一式・気まぐれ+9お守り
  • 発動スキル: 採取マスター・神の気まぐれ・高速収集

モンハン日記その2

また間が空いてしまった。熱中してるとさっぱり記録を付けようという気がしなくて困る。


村クエの方はシャガルマガラ討伐でスタッフロールまで終了。まあ、これから先が果てしなく長いのだが……



武器:フクロダタキ改(通常時はクラスターハンマー改)
防具:スキュラ一式+スロ1お守り
発動スキル: 体力+20・捕獲の見極め・睡眠無効・罠師


オンライン集会所でしばらくプレイしたものの、武器種がかぶったので竜姫の剣斧改(スラッシュアックス)をサブ武器に。


とりあえずは村クエ埋めとHR上げしようかね。

モンハン日記その1

モンハン始めたのでどっぷりやるかと思いきや、ゴア・マガラ討伐で壁に突き当たったのとCookieClickerにはまってたので日記に間が空いてしまった。


現在、ハンマーをネルスキュラ素材ハンマーに入れ替えてプレイ中。ついでに、防具分も揃ったので一式装備。
攻撃力UP(中)はちょっと惜しいが、防御力を優先してみた。

武器:クラスターハンマー
防具:スキュラ一式
発動スキル: 体力+20・捕獲の見極め・睡眠無効・罠師・腹減り倍加【小】


まだまだ序盤なのだけど、さすが最新作といったところで素直に面白いですね。どうなることかと思っていた地形の起伏と追加アクションも触っていて心地よい。


今のところ気になるのは、3D表示だと力が入った拍子に立体視の視野角から外れやすいのと、スリープしてしばらく経つと拡張スライドパッド使用のオプションが外れる(そして自動認識しない)点くらいかな。


とりあえずまた進捗があったら追記していく予定。

ハンター業再開しました

モンスターハンター4が発売されたので早速プレイしています。
twitterだとまとまった分量の文字を投下しにくいのでMH4の方はこっちでまとめるかな。


現在こんな感じ。


武器:ブーステッドハンマー
防具:ランポス一式
発動スキル: 攻撃力UP【中】・探知・気絶確率半減


MH3Gでも振り回していたハンマーで序盤をさくさく片付ける所存。
新武器も面白そうだけどまあ後でね。