ドロえもんゲーム仕様書

注意! たぶんNetscapeでは動きません。

0. はじめに

結局、完成できなかった体験版ドロえもんのシナリオの書き方について 公開します。
結構簡単にゲームが作れると思うので、いろいろ遊んでみてください。

1. ゲーム概要

ドロえもん体験版は3つのJavaアプレットから構成されています。
GraphicPanel.class
画像を表示するアプレットです。300*300の大きさを想定しています。
MessagePanel.class
文字メッセージを表示するアプレットです。 このアプレットからGraphicPanelを制御して画像の表示・非表示をさせています。 300*100の大きさを想定しています。
MainPanel.class
クリックする選択肢を表示するアプレットです。 このアプレットからMessagePanelを制御して文字メッセージの表示を行っています。
最上位のレベルで制御しているのはMainPanelです。 各アプレットはブラウザから他のアプレットの名前を取得しています。 そのため、HTMLで記述するときに、各アプレットの呼び出しされる順に (つまり、GraphicPanel, MessagePanel, MainPanelの順に)、 書いておかないとアプレットは正常に動作しません。
<APPLET CODE="GraphicPanel.class"> </APPLET>
<APPLET CODE="MessagePanel.class"> </APPLET>
<APPLET CODE="MainPanel.class"> </APPLET>
はいいけど、
<APPLET CODE="MessagePanel.class"> </APPLET>
<APPLET CODE="GraphicPanel.class"> </APPLET>
<APPLET CODE="MainPanel.class"> </APPLET>
は、ダメです(MessagePanelが起動した時点で 制御すべきGraphicPanelが見つからないので)。

2. 各アプレットのパラメータ

GraphicPanel.class

GraphicPanelをアプレットとしてHTML中に貼り込むとき、 書式はだいたい次のようになります。
<APPLET CODE="GraphicPanel.class" WIDTH="300" HEIGHT="300" NAME="GraphicPanel">
<PARAM NAME="NumberOfFigure" VALUE="11">
<PARAM NAME="NumberOfBack" VALUE="6">
</APPLET>
1行目に関しては修正することなく使ってください。
サイズは書き換えてもそれほど支障はありませんが、 NAMEの値を書きかえると MessagePanelがこのアプレットを発見できなくなります。
パラメータですが、
NumberOfFigure
ゲーム中で使うキャラクターの絵の数です。
アプレットと同じディレクトリ(フォルダ)に「fig1.gif」のような名前で 画像を置いておいてください。アプレットが勝手にロードしてくれます。
例えば、このパラメータの値を12に設定したら、同じディレクトリにある、
の画像が読み込まれます。
画像は100*200を想定しています。透過GIF設定にしておけば、 セル画のようにキャラクタ画像の背景を透かして見ることができます。
NumberOfBack
背景画画像の数です。背景画の扱いはほとんどキャラクタ画像と同じです。
「back1.gif」のようなファイルを同ディレクトリに置いておいてください。
画像は300*300(GraphicPanelと同じ大きさ)を想定しています。

MessagePanel

MessagePanelのHTMLでの貼りつけ方は次の通りです。
<APPLET CODE="MessagePanel.class" WIDTH="300" HEIGHT="100" NAME="MessagePanel">
<PARAM NAME="FontSize" VALUE="22">
</APPLET>
これも1行目はこのまま使ってください。
パラメータは
FontSize
この1つしかありません。 これは読んでそのまま、フォントのサイズです。 22を推奨します。その他の数字にすると 文字のスクロールが上手く行かないときがあるので。

MainPanel

MainPanelのHTMLでの貼りつけ方は次の通りです。
<APPLET CODE="MainPanel.class" WIDTH="200" HEIGHT="400">
<PARAM NAME="FontSize" VALUE="22">
<PARAM NAME="Scenario" VALUE="day1.txt">
<PARAM NAME="jumpTo" VALUE="day2.html">
</APPLET>
MessagePanelの大きさは特に決めていません。 しかし、ある程度の幅がないと長い選択肢を表示できなくなります。
FontSize
フォントサイズです。
これも22を推奨します。 他の数字では選択肢とクリックの位置が合わなくなることがあったので。
Scenario
シナリオデータのファイルを指定します。
シナリオデータの書き方については後で述べます。
jumpTo
シナリオデータで設定したエンディングを迎えたときに、 どのページに飛ぶのかを指定します。
エンディングの設定については後で述べます。

3. シナリオデータ仕様

シナリオは全体制御コマンドメッセージ制御コマンドタグメッセージから成り立っています。
とりあえず、例を示します。
*START
@のびたの部屋
:Enter
(default)
SR01
"SP11BC01SP10ドロえもーん!BR00あれ?"

(11,12)
FT13
SR01
"SP11BC01D001SP10・・・手紙だ・・・"

:移動
(default)
SR02FT01
"SP04さて、どこへ行こう・・・"

(77)
"SP08いや、SP04もう一度よく探してみよう・・・"

:空き地
(default)
"よし、空き地に行ってみよう"
LC00[空き地]

これは、「のびたの部屋」の書式です。
シナリオデータは場所ごとに記述します。

タグ

*START
シナリオデータを読み込んだ直後にどこの場所から始めるかという 目印のタグです。
このタグが書いてある直後に書いてある場所からゲームが始まります。
@??????
行頭が「@」から始まる行は、 これから、@に続く文字列(改行まで)という場所についての シナリオを定義するという宣言です。
具体的に言うと、「@のびたの部屋」と書いてあれば、 つぎに「@空き地」などと出てくるまで、 それ以降のデータは「のびたの部屋」に関するシナリオデータです。
:??????
行頭が「:」から始まる行は、 これから、:に続く文字列(改行まで)という選択肢がプレイヤーに選ばれた ときの挙動を記述するという宣言です。
例えば、「:移動」と書いてあれば、 次に書いてあるのは、プレイヤーが「移動」という選択肢を マウスでクリックしたときの挙動(「よし出かけるぞ!」という メッセージを表示する。選択肢を場所移動用のものに変える。等) が定義してあります。
また、移動する場所の選択肢も行動の選択肢と同様に 扱われていますので、「:のびたの部屋」や「:学校」といった タグも必要になってきます(つまり行動選択肢と場所選択肢に 同じ名前を使うとややこしくなるということ)。
ただし、「:Enter」は特別です。 「:Enter」は各場所に移動した直後の挙動を定義しています。 プレイヤーがその場所に着いて、何も選択肢を選ばずに メッセージを表示させたいときに使います。
仕様上、「:Enter」は各場所の定義をする際に 必ず定義しておいてください。 でないと、次に定義してある場所の「:Enter」を実行する 可能性があります。
(**)
括弧内の数字は、フラグ番号を意味しています。
(11)と書いてある場合、11番のフラグが立ててあるときのみ、 以下のシナリオを実行することになります。
複数のフラグを用いる場合は、(11,15,32)と「,」で区切ってください。
ちなみに、フラグ条件は条件の数が多い方が優先されます。つまり、 (11,32)と(11,15,32)だったら、(11,15,32)を優先して実行します。 条件数が同じ場合は特に決めてないので注意してください。
また、(default)はフラグが何も立っていない状態での挙動の定義です。 この(default)も必ず定義しておいてください。

全体制御コマンド

全体制御コマンドは、主にフラグ管理、選択肢の管理を行います。
このゲーム上で選択肢は選択肢セットとして扱われています。 行動選択肢と移動選択肢の切り替えは、表示を それぞれの選択肢セットに切り替えるという形で行なわれています。
ちなみに、デフォルトで選択肢セット00番は、 が定義されています。
以下が全体制御コマンドの説明ですが、文中の 「**」は2桁の数字を、「??」は文字列を表しています。
FT**
**番のフラグを立てる。「**」は2桁でないといけないため、 5番のフラグを立てるときは「FT05」と記述する。
FF**
**番のフラグを降ろす。
SA**[??]
選択肢セット**番にに選択肢??を追加。
SD**[??]
選択肢セット**番から選択肢??を消去。
SR**
表示されている選択肢セットを**番に変更。
LC00[??]
場所を??に移動。
ED00
ゲーム終了。アプレットのパラメータで指定されたURLに飛ぶ。

メッセージ制御コマンドとメッセージ

メッセージ制御コマンドは、主にメッセージの表示の管理、 画像表示の管理などを行います。
全体制御メッセージ中に「"」で囲われた部分がメッセージ部に なります。シナリオデータ作成時はこのメッセージ部に 全角文字でのメッセージと半角文字でのメッセージ制御コマンドを 織り交ぜながら書くことになります。
D0**
キャラクタ画像の**番を中央に表示。
D1**
キャラクタ画像の**番を左に表示。
D2**
キャラクタ画像の**番を右に表示。
E0**
キャラクタ画像の**番を中央から消去。
E1**
キャラクタ画像の**番を左から消去。
E2**
キャラクタ画像の**番を右から消去。
BC**
背景画**番を背景に設定。
BR**
**行の改行。メッセージ中の改行は無視されますので、 この改行コマンドを打たない限り、メッセージは改行されません。
SP**
文字の表示スピードを**に設定。スピードは1〜10まで設定できます。 数が大きいほど高速です。
WT**
**ステップ次の処理を待つ。 何文字分表示される間待つのか、というのがステップ数になります。 よって、待ち時間は設定されている表示スピードに依存しています。
CL**
文字の色を**に変える。文字の色は次のように定義されています。
00白(デフォルト)
01
02
03
04
05ピンク
06オレンジ

4. 実際の例

これだけ読んでも分からないと思うので、実際の例を 出しておきます。これは現在、体験版ドロえもんで実際に動いているものです。 このシナリオデータと実際の挙動を見ながら確かめてみてください。
シナリオデータの例 day1.txt
動いているページ day1.html

5. ヒント

ヒント、というか実際にやっていないのですが、 画像が多くなったときなどに備えて、アプレットと必要データを アーカイブ化してまとめてダウンロードさせるようにすると良さそうです。
あと、エンディングでの飛び先ページにまた、ゲームを用意しておいて、 別のシナリオデータで第2章を作っておく、などという手も考えられます。

6. リソース

いろいろまとめておきました (dorogame.zip58.5KB)。 ダウンロードして使ってみてください。
中身は、 等です。
面白いのができたら、教えて欲しいな。
a_seo@catnet.ne.jp