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があると、そこでゲームを終了してタイトル画面に戻ります。 ゲームオーバー時やゲームクリア時に使いますね。
ということで、説明は以上です。 いかがでしょうか?
- :ラベル
- #CLS
- #PICTURE
- #CHOICE2
- #CHOICE
- #FLAGJUMP
- #LAYER1
- #END
上記命令が使えれば、とりあえずゲームっぽい物が作れます。 ここのソースをいじるも良し、自分で一からソースを作るも良し、です。 いろいろ試してみて下さい。