tama tama tama tama 変愚蛮怒 Hengband tama tama tama tama

2020/11/03 Alpha版の経緯と意義──大規模リファクタリングに伴うエンバグと暗黙の仕様変化の可能性

(文責:Deskull)

まず本記事の結論から言います。

Alpha版は一般的な慣例に違わず公開テストプレイを目的とします。プレイ中進行不能となったり、数時間プレイして稼いできたリソースが台無しになるような致命的リスクをはらんでいる可能性もあります。そのため、まだ決定ではありませんが、あえて公式からAlpha版のみに限り、これらの対策を目的としたバックアップを残した上でのプレイを「推奨」することもあるかもしれません。そして、開発への報告さえしていただければ、そのバグを修正の上、可能な限り続行可能な形に復旧する措置を施し、アップデートを行います。具体的にはOSDNが提供してくれているコミュニティを通じたサポートを改めて整理し、それらを通じて、プレイヤーの皆様に協力を願う形の実現を目指します。

変愚蛮怒はVer1.6.2以降は主要スタッフの変更が著しく、長いスパンで微細な変更のみを進めてきましたが、2018年春頃に行われた2.2.1のリリース以来、大きくブランクを開けている状態が続いています。これには当時ほぼ唯一活発にリポジトリへのコミットを進めていた筆者の個人的な生活事情、及びモチベーションの問題という全く俗で粗雑な他にそれなりのまっとうな理由があります。本家ヴァニラであるAngbandの開発指針です。

本バリアント「変愚蛮怒」はフォーク元の「Zangband」の2.3系、さらにはそのフォーク元である本家Angband2.8系から派生されたものと(実態はともかく少なくともタイトル画面では)なっていますが、この後にほぼ更新が停止したZangbandに対し、Angbandは2020年11月に4.2.1にまで至って大きな変貌を遂げました。まず、何より大きいのはレガシーな非商用的ライセンスだったものが、ソース提供者全員の総意が取れたと思しくGNUとのデュアルライセンスに移行していることでしょう。これは、Zangbandを挟んでいることも含めて、今日の変愚蛮怒では極めて困難なことです。

今回の本題のためそれを抜きにしても、Angbandの変化には目を見張るものがあります。旧来よりAngbandはC言語で書かれています。それにより大本であったUNIX/Linux系OSを含めた大昔の大学のワークステーション系OSのみならず、MS(PC)-DOS、旧MacやAmiga、OS/2といった往年のギークにとっては御用達な環境でも動作可能な高い移植性を備えていたと思われます(残念ながら筆者個人はついぞこれらでの動作確認はしていません)少なくとも変愚蛮怒の時点でもPC-98版DOSなどでもプレイ可能にするためのプリプロセッサ分岐なども施されていました。かつて彼らに遊ばれていたと思われる様々な痕跡がソースとしても残り、微笑ましく思います。

しかし残念ながら、今日これらの片鱗は変愚蛮怒のみならず全ての古い*bandバリアントにとって大きな枷となってしまいました。極めて古い「富豪的プログラミング」とは無縁な極限までリソースを削るデータ構造とアルゴリズム、C99以前で各ハードウェア毎の独自C言語仕様について行かなければならないプリプロセッサの山、それに加えてバリアントの性質上、歴代から複数の開発者が複数のコードを、コーディング規約や開発方針などをほぼ持たないまま加え続けた結果、その構造は無法図な増改築を繰り返した違法建築と化しています。筆者自身そんなどこかの屋上に一つに掘っ立て小屋の一つを立てたり、それ以上の違法改築をやろうとして頓挫したままの身です。

Angbandではこれらの問題が、3系の前半を通じておよそ根本から改善されました。元よりアンバーの王子たちも、ロビンフッドやサイバーデーモンも存在しない、あくまで上古中つ国の悪の勢力を主流にしたヴァニラである上で、コミュニティの活発な状態が続いていたことが大きかったのでしょう。そこからMacOSX移植や64x64タイルの適用、公式でもAndroidサポートを行う余力もできています。

変愚蛮怒3系(あるいは元々2.2.2としてリリースする予定だったもの)の根本的な志向はこのAngbandの改善と同じことをやろうという所につきます。これらのようなリファクタリングはAngbandに恩恵をもたらしましたが、変愚蛮怒にはなおのこと大きな利益になるはずと考えました。我々が今後多人数で新しい、種族、職業、性格、ダンジョン、アイテム、モンスターを追加するのに、一貫した設計思想、丁寧な規約の中でそれを進めることができるようになることの意義を、大きく夢見ました。

とはいえ、一時はこれも惰性で続け、挫折しかかりました。Zangbandを挟んだバリアントであることに加えて月日が経ちすぎたこともあって、変愚蛮怒はAngbandの更新をソースのパッチという直接恩恵を得るのは極めて困難であり、あくまでその設計思想のみを借り受けて、自力で成し遂げる他無い状態にあります。主に OSDNチケット#37353 やその派生チケットでやってきた断片的な内容が筆者個人までのおおよその成果です。正直な話、このまま続けていても全く不可能とまでは言わないまでもさらに時間を消費していた可能性があります。これらをどうにか持ち直して利益ある見込みにしてくれたのが、OSDNやIRC、Twitterを通じて様々なアドバイスを送り、のみならず直接コミットやソースパッチまで提供してくれた各方面の皆々様です。彼らの具体的貢献と謝辞については今後Alpha版から正式なリリースまでの間にこのWebという場も含めて、必ずまとめさせていただきます。

本記事の現在、リファクタリングは最終的な段階にあります。のみならずそれに合わせて新しい種族や性格、モンスター群を追加を済ませ、さらに増やしていける流れができており、それらに対するテストプレイもある程度は進めました。しかし、今回のリリースが変愚蛮怒にあって最大の変化であることに変わりありません。意図しないバグや過剰なバランスの変化を、多様な職業が存在する現在の変愚にあって全て網羅するのは難しいと思われます。これらを克服するのに、今回オープンソース開発としての一般的セオリーを用いることにしました。つまり、古くからいるプレイヤーの皆様のご協力です。

十数年前の変愚リリース以来、特にプレイヤーの最も大きなウェイトを占める職業面でこだわりのある方々、なにとぞAlpha版公開の折には新しい変愚蛮怒に関するご意見をください。今はそのための準備を進めます。今後本記事を含めた開発に対するご意見を受け付けるためにフォーラムの利用もできるよう準備しますのでもうしばらくお待ちください。