HPNV Scenario Compiler(仮称)

Palmで遊べるアドベンチャーゲーム(以下ADV)が手軽に作れるツール。 工夫次第ではADVに限らず、色々なゲームが作成可能。

2.とりあえず脱出ゲームでも作ってみる

「あちこち調べたり道具を使ったりして、見知らぬ部屋から脱出する」というタイプのゲームが一時期流行りました。呼び方を知らないのでとりあえず「脱出ゲーム」と呼びます。flashで作られたものが主流でしたが、これをHPSCで作ってみましょう。何事も習うより慣れろですから。

サンプルを作ったので、ダウンロードしてコンパイルしてみて下さい。  サンプル(ソースと画像を含む)※左クリックでダウンロード コンパイルしたら、実機やPOSE等にインストールして、少し動かしてみましょう。 サンプルは、 目が覚める ↓ 本棚を調べて鍵を手に入れる ↓ その鍵でドアを開ける ↓ ゴール という非常に単純な流れになっています。 ※絵があまりにもあんまりな点には触れないで下さい…。

では、ソース(Dasshutsu.txt)の解説に移ります。頭から順に見ていきましょう。

:Scene01

ソースの先頭行にはラベルを書くことになっています。決まり事なので、「そういうものだ」と思って下さい。ラベルというのは、プログラム内を行ったり来たりするための目印の様な物です。

#PAINT 000000 0

#CLS

#PAINTで画面を真っ黒に塗りつぶし、#CLSでメッセージ表示をクリアしています。メッセージ表示のクリアはこの場ではいらないんですが、一応

……

………

#CLS

目が醒めると、

ベッドの中にいた。

プレイヤーに対する状況説明です。メッセージの表示は簡単ですね。

:Scene02

#ERASEPAINT 0

#PICTURE "Scene02.bmp" 1

#CLS

見知らぬ部屋のベッドに入っている。

ここからシーン2になります。#ERASEPAINTで真っ黒に塗りつぶした部分をクリアして、#PICTUREで画像Scene02.bmpを表示し、#CLSでメッセージをクリアしてから状況説明です。

#CHOICE2 "どうする?" "起きる","また寝る" "Scene03","Scene01"

はいここ重要。選択肢を表示して、プレイヤーからの入力を待ちます。リファレンス見ればすぐわかるんですが、一応CHOICE2の文法は下記の通り。

 #CHOICE2 [選択肢のタイトル] [選択肢1],[選択肢2] [選択肢1の飛び先ラベル],[選択肢2の飛び先ラベル]

つまりここでは、プレイヤーが「起きる」を選んだらシーン3へ飛び、「また寝る」を選んだらシーン1に飛びます。それぞれの項目(引数と言った方が正しい)を区切るのは、スペースでもカンマでもどちらでもOKです。個人的な好みで、組になる物([選択肢1]と[選択肢2]、[選択肢1の飛び先ラベル]と[選択肢2の飛び先ラベル])をカンマで区切り、それ以外はスペースで区切っています。

:Scene03

#PICTURE "Scene03.bmp" 1

#CLS

…起きてベッドから降りた。

正面に本棚が見える。

ここからシーン3です。画像Scene03.bmpを表示して、メッセージをクリアしてから状況説明です。

#CHOICE "どうする?" "本棚を調べる","まわりを見る","ベッドに戻る" "Scene04","Scene05","Scene02"

はいここも重要ですよ。選択肢を表示して、プレイヤーからの入力を待ちます。CHOICE2との違いは、選択肢が3つ表示できる点です。CHOICEの文法は下記の通り。

 #CHOICE [選択肢のタイトル] [選択肢1],[選択肢2],[選択肢3] [選択肢1の飛び先ラベル],[選択肢2の飛び先ラベル],[選択肢3の飛び先ラベル]

ここでは、プレイヤーが「本棚を調べる」を選んだらシーン4へ、「まわりを見る」を選んだらシーン5へ、「ベッドに戻る」を選んだらシーン2に飛ぶ、ということです。

:Scene04

#PICTURE "Scene04.bmp" 1

#CLS

本棚には本がぎっしり詰まっている。

…ほとんどが君の知らない言語で書かれたものだった。

#CLS

だが一冊だけ、読めそうな本がある。

#CHOICE2 "どうする?" "その本を手に取る","まわりを見る" "Scene06","Scene05"

 

:Scene05

#PICTURE "Scene05.bmp" 1

#CLS

…小さくて殺風景な部屋だ。

見覚えのあるものは、何もない。

この部屋にあるのは、

#PICTURE "Scene05-1.bmp" 1

ベッドと

#PICTURE "Scene05-2.bmp" 1

本棚と

#PICTURE "Scene05-3.bmp" 1

ドアだけだ。

#CHOICE "どうする?" "本棚を調べる","ドアを開ける","ベッドに戻る" "Scene04","Scene07","Scene02"

シーン4と5は今まで出た内容と同様なので、とばします。

:Scene06

#PICTURE "Scene06.bmp" 1

#CLS

本を手に取り、開いてみる。

//鍵を入手済なら、鍵はもうない。

行の最初に「//」と入れると、その行はコメント扱いになります。コメント行は文字通りソース中のコメントであり、コンパイルしても表示されません。

#FLAGJUMP 99 1 "Scene06-2"

また新しい命令が出てきました。 #FLAGJUMPの説明をする前に、フラグについて理解しておいた方がいいでしょう。 はてなダイアリーのキーワードを見ていただくとよくわかるかと思います。 簡単に(かつ乱暴に)言うなら、「ある事柄が起きたかどうかを判断するための入れ物」というところでしょうか。例えば「99番目のフラグが0だったら鍵を拾っていない。1だったら鍵を拾っている」という具合に使います。で、#FLAGJUMPですが。

 #FLAGJUMP フラグ番号 数値 "ラベル"

つまりここでは、 「99番フラグが1だったらシーン6-2に飛ぶ(それ以外ならそのまま次のシーン6-1に進む)」 ということになります。

:Scene06-1

…本に鍵がはさまっていた。

#LAYER1 "Scene06-1.bmp" 30,30 2

#LAYER1は、PICTUREで表示させた絵の上に違う絵を重ねるときに使います。(#LAYER2も同様)

 #LAYER1 "画像ファイル" x座標 y座標 描画方法

x座標とy座標で、画像をどこから表示させるか指定します。描画方法は、画像を表示させるときの効果です。ここでは2番を指定しています。

【鍵を手に入れた。】

#ERASELAYER1 2

#ERASELAYER1で、#LAYER1で表示した画像を消しています。

#SETFLAG 99 1

#JUMP "Scene06-3"

:Scene06-2

…特に変わったところはないようだ。

:Scene06-3

#CLS

本を本棚に戻した。

#CHOICE2 "どうする?" "まわりを見る","ベッドに戻る" "Scene05","Scene02"

 

:Scene07

#PICTURE "Scene07.bmp" 1

#CLS

//鍵を入手済なら、ドアが開く。

#FLAGJUMP 99 1 "Scene07-2"

:Scene07-1

…鍵がかかっている。

鍵を見つけたら、開くかもしれない。

#CHOICE2 "どうする?" "本棚を調べる","ベッドに戻る" "Scene04","Scene02"

:Scene07-2

さっき見つけた鍵を使ってみる。

「カチッ」

鍵が開いた!

この辺りも、今までに出てきた命令だけですね。  

:Scene08

#PICTURE "Scene08.bmp" 1

#CLS

見知らぬ部屋から抜け出した。

   【とりあえず、終わり。】

#END

#ENDがあると、そこでゲームを終了してタイトル画面に戻ります。 ゲームオーバー時やゲームクリア時に使いますね。  

ということで、説明は以上です。 いかがでしょうか?

上記命令が使えれば、とりあえずゲームっぽい物が作れます。 ここのソースをいじるも良し、自分で一からソースを作るも良し、です。 いろいろ試してみて下さい。

<前 目次 次>