スクリプト仕様の再設計2


# 脳内メモ.現在進行形で考えていることを適当に書き連ねてみる.

■ 再利用性神話

# ↑何か否定的なタイトルで申し訳ないですが...
# ここで書く事は,今,目の前にある作りかけのゲームを完成させるのが目的であるため,
# なんと言うか,非常に泥臭い話になります.なので,理想的なスクリプトに求める物とは,
# 大きく異なっている事をご了承下さい.


まず最初に,スクリプト仕様の再設計の方針についてなんですが,
「再利用性を高めるのは,スクリプト解析クラス,中間コード管理クラス,数値演算クラス等
使いまわしが効きそうなコードまで.スクリプト仕様は,再利用性等を考慮しない.」
ってつもりです.以下,その言い訳を書きます.


# あ,そうそう,言うまでもないですけど,自分もゲーム開発の「ド素人」です.
# こうやって書いている記事は,あくまでも「自分の場合こうだけどね」って程度として
# 取っておいてください.大いに間違っている可能性があります.


昨日の kenmo さんのコメントにもあったのですが,スクリプト化の利点として「再利用性」
が挙げられると思います.つまり,

  • ライブラリの再利用性
    • 挙動として共通な部分をスクリプトとして括り出して,ライブラリを作成しておく事で,共通処理を再利用する.
  • データの再利用性
    • 統一の仕様でスクリプトを記述しておく事で,本体プログラムが変わっても,アルゴリズムを再利用できる.

# ...と自分は解釈していますが,違うかも...
これら再利用性は,id:halo_w2:20050518 で指摘されているような
「ユーザーによる拡張」への発展の可能性も生まれてくると思います.
# ここら辺については,Nomltest の副産物的展開として少し夢想している事はあるのですが,
# それはまた別の機会.


で,上要件をかなり高いレベルで実践しているスクリプトが,BulletMLだと思います.
ライブラリとしては,libBulletMLが公開されており,C言語ベースで簡単に扱えます.
また,データベースには,弾幕やさん弾幕型さんの弾幕庫などがあります.
データ/ライブラリとしての再利用性,ユーザーによる拡張,どちらも申し分ないでしょう.


つまり,弾/敵の動きを BulletML に任せて,敵配置等は別データで読みこんで,
残りはハードコーディングにすれば,スクリプトとプログラムの住み別け完了です.
そういうプログラムはよくあります.実際,外観は全く変わりません.
で,特に何の問題も生じません.
以上.終わり.


...デジャヴュ.


実際,この方法は数え切れないほどの恩恵があり,非常に現実的でしょう.ですが,
「残りはハードコーディングにすれば」が 実はかなり曲者,というのが自分の感想です.
BulletML は,上で述べたような 再利用性,一般性を重視しているため,
非常にシンプルで抽象度の高い仕様になっています.
そのため,Pure BulletML の「資料データ記述法」としての価値は,非常に高いです.
# Aba氏が書いている目的の通りの仕様設計といえると思います.
反面,比較的本格的なシューティングゲームに用いるには,拡張が必須となります.
(例えば,得点/体力などのデータ,アニメーション情報,姿勢制御など)


この拡張をどう実装するかですが,
1. XML Scheme を拡張して,libBulletMLで自力ツリー解析を行う or 読み込み部自作.
2. 別データ(ハードコーディングを含む)から .bml ファイルに対して紐付けを行う.
Aba氏の実装は,コードを斜め読みする限りでは,ハードコーディングによる 2...
だと思うので,恐らく想定された使い方は 2. なんじゃないかなと思います.
# もちろん,これは想像の範囲の話です.
つまり,プログラム中の弾/敵の動きだけを .bml ファイルとして外に括り出すという
方法なんですが,この方法で動きに連動したアニメーションや姿勢制御を行うような場合,
どうすれば良いのか,自分には良いアイディアが浮かびませんでした.


# 長々と書いてしまいました.論旨が曖昧.ダメだ俺.
結局,
1. 再利用性/ユーザーによる拡張性を目的としたシューティング用スクリプトについては,かなり高いレベルで BulletML が既に実践しているため,便乗すれば良い.
2. 別々のゲームのスクリプト仕様を共通化して再利用性を高めても,結局,個々のゲームの独自実装がかなり必要になってくる.
3. それなら,いっその事,スクリプト仕様は一つのゲームで使い捨てにしてしまった方が良いのでは無いか.
って事です.

と言うわけで,
「再利用性を高めるのは,スクリプト解析クラス,中間コード管理クラス,数値演算クラス等
使いまわしが効きそうなコードまで.スクリプト仕様は,再利用性等を考慮しない.」
方針で行きたいと考えています.


(つづく)