2015/11/04
■ [Angband]『Angband Releases: 3.0.8』の残り和訳
http://rephial.org/release/3.0.8のクリンアップとプラットフォーム依存の更新を和訳。
これにて3.0.8の分完結。
主だったコードのクリンアップ
ほとんどのクリンアップは古すぎるコードや非機能的な所作の除去に関連しています。
- パワフルな汎用メニューインターデースが追加され、既存のコードの除去が行われました。これはソースコードの重複を減らし、もっと簡単に様々なスタイルのメニューを作成することが可能になりました。(例:スクロールや複数列化など)詳しくはui.cを確認して下さい。
- イベントハンドラを追加しました(メニューが相互イベントをチェックし合う事ができる、など)
- 多数の、本当に多数のコード重複を除去しました
- prefファイルダンプ機能の重複部分を減らしました。
- ステータス表示行、サイド・バーそしてウィンドウアップデートコードをよりストリームラインな形にしました。
- 多数の旧いポートを削除しました: cap, lsl, sla, xpj, ibm, dos, vcs, lfb, ami, emx, vme
- 結果としてメイクファイルは十分にシンプルな形となりました。多数のメイクファイルが可能な限りソースファイルのリストをMakefile.srcファイル内から用いることができるようになり、Makefile.stdは再記述され、労力を減らす形になりました。
- プレイヤーの時限効果(盲目、混乱など)はp_ptrから切り離された関数で管理されていた状態から、配列で保持されるようになりました。これは多数のコードを簡略化し、細々と新しい時限効果を追加することが可能になりました。これらの効果の大半はsedスクリプトを用いて記述できます。
- OMKを呼び出す形で新しautoconf/automakeシステムを採用しました。
- Luaスクリプトは廃止になりました。
- 魔法棒と杖の必要チャージ量はlib/editファイルで修正可能になりました。
- main-gcu.cの十分な簡略化速度向上(Christer Nyfalt氏に謝辞を送ります)
- 粗雑なハックないし、非機能的なコンパイル時オプションを取り除きました。(VERIFYSAVEFILE, _TIMESTAMP, and _HONOR, CHECKTIMEなど)
- 多数のh-*.hファイルをシンプルはヘッダーファイルに連結しました。利用可能な限り、C99の型を用いて、多数の労力を取り除きました。
- ファイルロック機能をクリアップして、z-file.c中のハンドリング関数を移動させました。usleep()関数は取り除かれ、ポータブルだディレクトリスキャン関数が実装され、(Windows、Unix系OSで動作します) my_fexists()関数になりました。
- より安全な文字列操作関数を用いるようになりました。敢えて安全でない関数を広範に用いるのはmain-*ファイルのみとなりました。
- ランダム名生成コードが少々書き直されると共に、自身のファイル内にあったランダムアーティファクト名コードから切り離されました。これは巻物の名前にも用いられるようになります。
- 多数のdefine.h内の各要素を、h-basic.hやconfig.hのようなもっと正しい場所に移しました。
- (Hallvard Furuseth氏により)定数やN_ELEMENTS()と共に、多数のマジックナンバーが起きかえられました。
- (boolsやintsなど)C99の型を適切な場で用いました。
- Sangband/Steambandのソースコードからobject.txtを通してアイテムの塊の山を生成する確率を得る処理をインポートしました。
- 大きなswitch()構文の代わりにテーブルを使ったコマンド処理を用い、重複なく、新しいコマンドをメニューに追加できるようにしました(詳しくはcmd0.cを見てください)
- TERMXTRASOUNDフックから新しい効果音機能モデルへ切り替え、単純な"sound_hook"を効果音再生のための適切な希望としてセットするよう用いました。新しい効果音のモジュラーシステムはmain.cで導入されました(将来的にはgstreamer等を用いたいと考えています)効果音を許可する場合はゲーム中のオプションを設定して下さい。
- p_ptr->noscoreのハードコード値を取り除きました。
プラットフォームに関する修正。
- (Pete Mack氏により)Macをより最近の形にサポートしました。現在はOSX10.3以降で動作しますが、古いmain-macはMPWメイクファイルにより取り除かれました。
- OSX上のフォント選択問題を修正しました。
- (Frank Palazzolo氏により)Windows用のコンソールモードパッチが追加されました。これは古いオールドスクール・ターミナルでの基本的なプレイを散らかってない形で行うものです。
- main-x11はx11-setting.prfからウィンドウの座標を読み取るようになりました。
- ゲームの再起動を行うまで、フォントファイルの一つが移動できなくなる、Windowsバグの修正を行いました。(Leon Marrick氏に謝辞を送ります)
- readdib.cとmain-ami.cにプラットフォーム用ifdef分岐を追加しました。
- (Hallvard Furuseth氏により)^Sでコンソール上のゲームがフリーズしないよう修正しました。
- RISC OS中でマウスをサポートしました。
- ゲームと共に配布する各フォントのライセンスを整理しました。
- 古いDOS/IVMフォントをWindowsポートで使えるようインポートしました。
- SDL_mixerのサウンドモジュールをインクルードし、あらゆるポートでmain.cnによる機能がつかえるようになりました。このソースコードの初期化処理について、Brendon Oliver氏に感謝します。
- (Shanoah Alkire氏により)GTK及びGTK2ポートでpangoとcairoを用いるようになりました。
- Iain McFall氏によりToMEやSangbandを基本にした新しいSDLポートが追加されました。SDLもGTKポートも初期状態では使用不能で、十分には完了していませんが、いずれ完全に機能し得るでしょう。
私見
個人的にD'ang旧ソースでもやっていたようなリファクタリングがちゃっかり(かつ恐らくより合理的に)行われていて草が生える。本気でフォークし直し見直した方がいいんとちゃうか、おう。