トップ «前の日記(2016/12/05) 最新 次の日記(2016/12/07)» 編集

SikabaneWorksが関係するコンテンツ(主に*band系ローグライク)の開発近況・補足から全く個人的な雑記まで。

[WEB:屍の見える丘公園]| [RSS]

Angband | Badiashimshe | C# | CRAUZEL | D'angband/小説草稿 | D'angband/開発 | DarkSouls | Demon'sSouls | DungeonCrawl | ElvenUteruses | Haskell | Hengband | J9シリーズ | LEGO | LineDrawing | MISC | MTG | Mac | Math | Moria | R-18 | Roguelike | Rough | RoughSketch | Ruby | SDL | UNIX | VMware | WarHammer | Zangband | アタシラヂョウヲウ | イラスト | ガジェット | ゲーム | ゲーム紹介 | ゲーム製作技術 | ゲーム論 | スケッチ | ツクール | テクノロジー | ニコニコ動画 | ファルコム | ファンタジー | マリオ | ヴィーヤウトゥムノ | 別記事追加予定 | 変愚蛮怒 | 変愚蛮怒/スポイラー | 変愚蛮怒/元ネタ探訪 | 変愚蛮怒/攻略 | 変愚蛮怒/開発 | 宗教 | 情報 | 政治 | 文字コード | 日ペ昔話 | 東方 | 東方ワンドロ | 東方外法漢女 | 歴史 | 漫画製作 | 版権絵 | 画像処理 | 翻訳 | 自然言語 | 艦隊これくしょん | 落書き | 言語解析 | 読書 | 超人ロック | 追記予定 | 通信 | 鉄獄旅慕情 | 阿片窟 | 馬鹿馬鹿蛮怒/開発 | 魔法少女まどか☆マギカ | 魚類版深夜の真剣お絵描き60分一本勝負


2016/12/06

[変愚蛮怒/開発]変愚蛮怒のマルチプラットホーム対応の痕跡について

Roguelike Advent Calendar 2016 の6日目の記事です。

変愚蛮怒はAngband/Zangbandからのフォークにあやかり、様々機種や環境でプレイできるような配慮、あるいはその痕跡がソースコード上にあれこれ残っています。今となってはSourceForge上のリリースバイナリにはWindowsとMac系の公開しかされていませんし、Unix/Linux系(ディストリビューション上の差異が山ほどある以上、当然ではあるのですが)は元より各人好きにコンパイルして遊んでくれ、と言った調子でREADME関連もほとんど放置しっぱなしになっています。

もう遊ぶ機会がないだろう&実装と動作の保証がないだろうという環境は何年前から放置されているのか分かったものではなく、最近に至って手前がソースのメンテナンス作業上で、削除してしまった多環境対応部分もあります(これを書いている間にそれがまだ不十分であることに気づいて愕然としていますが)

Advent Calendarの枠が空いてましたので、その辺について将来の保守や拡張に役に立つのか分からない備忘向けの話を一つ。

main*.cソース上の痕跡

今更の話ですが、変愚蛮怒のソースコードはC言語で書かれています。さらにゲームシステム部分のほとんどは、多数のプリプロセッサ(#ifdefとか)を挟みつつも、どのプラットホームでも同じソースコードで実装し、各プラットホームの入出力とは独立しています。

そして、各プラットホームの実装はほぼ全て各main.cに数千行かけて集約されていました。対応は以下の形になっていたようです。

  • main.c …Unix/Linux系アプリケーションを中心に他のある程度互換性を持ったOSに対応するためのmain()及び各入出力処理の実装。
    • main-cap.c …Termcapのインターフェース上で入出力を動作するための追加実装。
    • main-dos.c …DOS一般のテキストコンソール上で入出力を動作させるための追加実装。
    • main-gcu.c …Cursesのインターフェース上で入出力を実現するための追加実装。
    • main-ibm.c …恐らくOS/2のGUIインターフェース上で入出力を実現するための追加実装。
    • main-x11.c …X Window System GUIアプリケーションとしての入出力処理の追加実装。
    • main-xca.c …X Athena WidgetsのGUIインターフェース上で入出力を実現するための追加実装。
  • main-win.c …WindowsアプリケーションとしてのWinMain()及び各入出力処理の実装。
  • main-mac.c …旧MacOSアプリケーションとしてのmain()及び各入出力処理の実装(MacOSXにどう対応しきっているかは未確認)

変愚蛮怒の現在のリポジトリに独立したソースレベルとして現存しているものだけだとこれだけですが、main.cやゲームシステム部分の#ifdefをのぞくとさらに過去に実装していたと思われるAMIGAのなどの痕跡も残っていました。

ANGBAND_SYS変数

グローバル変数上にANGBAND_SYSと呼ばれるcptr(char *)変数があり、ここに前項で述べたmain-???.cの???に当たる部分が保管されています。この変数はlib/prefなどにならんでいる。システム設定のためのスクリプトファイル(*.prf)のどれを読み込むかに用いられます。

また、prfファイル中のスクリプトでもこれを参照して分岐処理が行えるようになっています。以下はpref.prfの引用です。

##### System Specific Subfiles #####

?:[IOR [EQU $SYS xaw] [EQU $SYS x11]]
%:pref-x11.prf

?:[EQU $SYS gcu]
%:pref-gcu.prf

?:[EQU $SYS ami]
%:pref-ami.prf

?:[EQU $SYS mac]
%:pref-mac.prf

?:[IOR [EQU $SYS win] [EQU $SYS dos] [EQU $SYS ibm]]
%:pref-win.prf

?:[EQU $SYS emx]
%:pref-emx.prf

?:[EQU $SYS acn]
%:pref-acn.prf

というか、前項で述べたami(AMIGA)以外にもemxとかacnとかが残っていますね。acnはRISC OS、emxはibm系の派生のようですが、実装上の意図は良くわかんなくなっています。

ゲームシステム実装ソース上で#ifdefのために定義されていたもの

はい、既にこの辺のコミットで消してしまいました。

つうか、全二項の痕跡残したままでこいつらだけ消してチケット作業完了しているのは本当いい加減ですね。セルフ訴訟。

最後に

大体こんな感じです。改めてAngbandが長い伝統あるオープンソースであると共に、古き良き時代の文化の残り香みたいなものを感じざるを得ませんが、反面保守やらの障壁になっている問題もありますので、引き続き何らかの対応をとっていきたいと思っています。

カレンダーの7日目はargrath氏の「NetHack 3.6.0 1周年」となります。

[ヴィーヤウトゥムノ] 忍耐強きもの『イブ=ツトゥル』/Yibb-Tstll the Patient One (L.Dark 'P') 修正&着色

=== Num:706  Lev:46  Rar:2  Spd:+10  Hp:3025  Ac:100  Exp:16000
ドロドロにただれた身体を持った黒い巨人。てらてらと輝く頭部の表面を、二つ
の目が別々に滑るように動きまわる。大きなマントをまとっており、その中には
無数の夜のゴーントがいる。夜のゴーント達はイブ=スティトゥルの乳房に吸い
付いたり、取り付いたりしている。この怪物はドリームランドの「クレドの密林
」の開けた場所でゆっくりと回転しながら、すべての空間とすべての時間を見通
している。(ラムレイ「オーク・ディーンの恐怖」)
それは通常地下 46 階で出現し、素早く動いている、しかし侵入者を追跡しな
い。この狂気を誘う邪悪なるモンスターを倒すことは 50 レベルのキャラクタに
とって 約14153.85 ポイントの経験となる。それはカオスや因果混乱や放射性廃
棄物のブレスを吐くことがある、なおかつ的確に魔法を使うことができ、テレ
ポートバック、暗闇、死者復活、デーモン一体召喚、アンデッド一体召喚の呪文
を唱えることがある(確率:1/4)。それは AC100 の防御力と 3025 の体力がある。
それは素早く体力を回復する。それは酸と稲妻と炎と冷気と毒とカオスの耐性を
持っている。それは侵入者をしばらくは見ており、 300 フィート先から侵入者に
気付くことがある。それは 12 個までの上質なアイテムを持っていることがあ
る。それは 1d166 のダメージで触って全ステータスを減少させ、 1d166 のダ
メージで触って全ステータスを減少させる。

忍耐強きもの『イブ=ツトゥル』

http://sikabane-works.net/monzetsu_diary/?date=20140306#p03を修正&着色

Romunqualy

鬼畜大佐『ロムンクァリィ』
相変わらずそこはかとなく感じる痴女感。あれ、ゴルちゃんは?

Urwen

アッキ=ニンジャ『ウルウェン』
前回の正気度チャレンジで一度精神崩壊したんだ。
逃げ出さざるを得んだろう。

[ヴィーヤウトゥムノ]タイル作成計画73(0701-0710)

46~47F。

0701-0710