hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。 |
アドベンチャーゲームとサウンドノベルについての基礎知識。
どちらも分岐を持ち、選択しだいでゲームの流れなどが変化する共通点を持つ。
このように基本的なシステムは同じです。
AVGのファイル構成は大きく分けて次の3つからなります。サウンドのベルも同様です。
↑適当に名前を付けています。もっとカッコいい呼び方あったら修正してください。
そのままではシナリオスクリプトや素材データが簡単に見られてしまい、ゲームが成立しなくなったり、プレイヤーが遊ぶ意欲を低下させてしまいます。
このため一般的にシナリオスクリプトや素材データには暗号化を適用して配布します。
暗号化の方法は主に2通りが考えられます。
前者は楽で、EXEファイル作成後はアイコンが1つにまとまるため見た目もシンプルです。
しかし、シナリオプレーヤーを配布する場合にスクリプトをさらすことになります。
また、ファイルサイズも大きくなります。
後者はファイル数が増加してしまいますが、フォルダにまとめれば問題ないでしょう。
シナリオ追加やバージョンアップなどの対応面で、先ほどの方法では巨大なファイル全部を変更するのに対し、この方法ならわずかなファイル追加や書き換えですむため多少有利です。
エンジンを提供する際、方法としては以下の2種類が考えられます。
1. を目標とするのであれば、全ての機能を実装しなければなりません。
更に、暗号化・複合化も含めてエンジン側で実行する必要があります。
2. は逆に、ユーザーにコンパイルを任せます。
これにより、アドベンチャーの種類に合わせた機能を持たせることができたり、独自に機能を開発することも可能です。
この2つには大きな差があり、前者は変数や命令などを全て解析して処理するのに対し、後者はスクリプト内で開発することができるので、それらの機能は必要ありません。
後者は最低限HSPの知識が必要になりますが、それは前者で「シナリオ言語」を提供する訳ですし、同じことがいえます。
1. のシナリオ例 (txtで全てを管理)
<variable x = 10> if y = 1 goto *label1 if y = 2 goto *label2
2. のシナリオ例 (HSPでeventの内容を管理)
event
つまり、極論すると、
1. は一般ユーザー向けのエンジンで、
2. はHSPユーザー向けのエンジンです。
エンジン開発側としては当然ですが1の方が困難です。
勿論、 これらが存在するのはwikiという特殊な場所だからでしょう。
理想は、この両方を提供し、エンジン自体を自由に開発できる環境を提供することですネ。
『言語解析』は、「前処理」「字句解析」「構文解析」「意味解析」「内部表現」「最適化」「生成」の7ステップを踏みます。
本エンジンはコードを生成しませんので、実行時毎に、「前処理」〜「意味解析」を行います。
また、書式も数通りしか存在しません。
これにより以下のような大きな省略ができます。
・「整形」は行いません(コメント・空行は無視しますが削除はしません)。
・「分解」は値だけで充分ですので、記号は値を分ける時にしか使用しません。
・構文は規定の形式以外ありえないので存在しません。
・エラーは、規定の形式以外ならば、無視という処理を行います。
これを見ると、コメントや無駄な空白は、わずかですが実行速度の低下に繋がることが分かります。
また、プリプロセッサも実行毎に行うので、同様です(こちらは起動時のみですが)。
(現在のエンジン状況なので、変更する可能性も充分にあります)
「言語解析」における「字句解析」の一つに、「トークンへの分解」という作業があります。
トークンとは、これ以上分解することでコンパイラが理解不能になるギリギリの単位のことを指します。
例えば、HSPのトークンは、
mes pos repeat + - \ (
等があります。記号は通常、そのまま1つのトークンとなります。
命令や変数は、一つ一つがトークンになります。
これを、
me s や p os と書いてしまったら、HSPは元の意味が分からなくなってしまいます。
(トークンとトークンの間に、いくつ空白があっても同じ動作をします。)
例: x = int( WINX ) は x , = , int , ( , WINX , ) の6トークンから成っています
本エンジンでは、token という配列を使用していますが、
本来のトークンとは意味が異なります。
命令 = 引数, 引数, ...
における、命令と引数のみをトークンといています。
これは簡略化の為で、これ以外の書式はあり得ないからこそできることです。
KAG | 吉里吉里でAVGを作る際に用いるマークアップ言語 |
N-Scripter | 高橋直樹氏が開発したノベルゲーム実行エンジン |
※今回のアドベンチャーエンジンではプラグインの使用の予定はありません。
ここでは開発に利用できそうなモジュール配布サイトを紹介します。
HSP-NEXT | さくらさんのサイト。 配布モジュール群(stdlib)の中に文字列操作関連モジュールが含まれています。その他描画命令など使えそうな機能が多数含まれています。 |