hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
アドベンチャーエンジン/参考資料 - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

アドベンチャーエンジン

参考資料

アドベンチャーゲーム、サウンドノベルについて

アドベンチャーゲームとサウンドノベルについての基礎知識。

  • Wikipedia:アドベンチャーゲーム
    区切られたメッセージウィンドウにテキストが表示される。
    プレイヤーがコマンドの選択や入力により行動を選択していく形式のゲーム。
    略称、ADV、AVG
  • Wikipedia:サウンドノベル
    画面全体にテキストが表示されるのが特徴。
    物語を読ませることを主に置いたもの。
    「サウンドノベル」は登録商標されているためビジュアルノベルと呼ばれることもある。

どちらも分岐を持ち、選択しだいでゲームの流れなどが変化する共通点を持つ。
このように基本的なシステムは同じです。

AVG・サウンドノベルの内部構造について

AVGのファイル構成は大きく分けて次の3つからなります。サウンドのベルも同様です。

  • シナリオスクリプト
    シナリオプレーヤーで再生するための脚本。キャラクターのセリフや行動、イベント、条件分岐などを記述している。
    通常はプログラマーではなくシナリオライターが担当するため理解しやすい書式が使われている。
    単にスクリプトとかシナリオとも言うが、ここではHSPのスクリプトや普通の文章で書いたシナリオと区別するためとりあえずこの名称を使った。
  • 素材データ
    ゲーム中で使用される画像や音楽データなど。
  • シナリオプレーヤー
    シナリオスクリプトを実行するプログラム。アドベンチャーエンジンはコレの中心となる部品にあたる。

↑適当に名前を付けています。もっとカッコいい呼び方あったら修正してください。

ゲームデータの暗号化について

そのままではシナリオスクリプトや素材データが簡単に見られてしまい、ゲームが成立しなくなったり、プレイヤーが遊ぶ意欲を低下させてしまいます。
このため一般的にシナリオスクリプトや素材データには暗号化を適用して配布します。

暗号化の方法は主に2通りが考えられます。

  • HSPで書かれたシナリオプレーヤーのスクリプトからEXEファイルを作成する際に、シナリオスクリプトや素材ファイルをいっしょにパックする。
  • シナリオスクリプトや素材ファイルをそれぞれ暗号化し、シナリオプレーヤーで読み込む際に復号する。

前者は楽で、EXEファイル作成後はアイコンが1つにまとまるため見た目もシンプルです。
しかし、シナリオプレーヤーを配布する場合にスクリプトをさらすことになります。
また、ファイルサイズも大きくなります。

後者はファイル数が増加してしまいますが、フォルダにまとめれば問題ないでしょう。
シナリオ追加やバージョンアップなどの対応面で、先ほどの方法では巨大なファイル全部を変更するのに対し、この方法ならわずかなファイル追加や書き換えですむため多少有利です。

AVG開発環境の提供

エンジンを提供する際、方法としては以下の2種類が考えられます。

  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 という配列を使用していますが、 本来のトークンとは意味が異なります。

命令 = 引数, 引数, ...

における、命令と引数のみをトークンといています。
これは簡略化の為で、これ以外の書式はあり得ないからこそできることです。

代表的なAVGエンジン

KAG吉里吉里でAVGを作る際に用いるマークアップ言語
N-Scripter高橋直樹氏が開発したノベルゲーム実行エンジン




モジュール

※今回のアドベンチャーエンジンではプラグインの使用の予定はありません。

ここでは開発に利用できそうなモジュール配布サイトを紹介します。

HSP-NEXTさくらさんのサイト。
配布モジュール群(stdlib)の中に文字列操作関連モジュールが含まれています。その他描画命令など使えそうな機能が多数含まれています。




コメント


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-08 (日) 02:38:41 (2436d)