2013年08月16日

AXMA Story Makerの使い方03

「AXMA Story Maker」にて

パラグラフを設定して
タイトルと本文を書き
分岐のリンクを設置して繋げる

ここまで書きましたがこれだけでゲームブックは作れると思います。

ただ何かの条件がある時と無い時で進むべき方向が変わってくるというケースも
ゲームブック制作を進める上で出来てしまいます。

例えば山へ行く選択肢があり、そこの山小屋で鍵を手に入れるルートと
川へ行く選択肢があり何も手にしないで進んだルートがあり、
行き着く先はどちらのルートも城で城門には鍵がかかっていて入れないというケースがあったとします。

鍵を持っていれば門を開けて入れるし、鍵を持っていなければ入れない。
山ルートなら鍵を手に入れているけど、川ルートでは手に入れられないまま城へ着く。

城へ辿り着くというパラグラフは山と川の両方のルートの合流地点であるため、そこのパラグラフへ到達するプレイヤーは鍵をもっている場合もあるし持っていない場合もある。

そんな時に城の門で鍵を持っているかいないかを判断して自動で別々のリンクを飛ばしてくれるのがフラグ立てです。
鍵を持っている場合は門を開けるパラグラフへ飛び、持っていない場合は裏口を探して内部に忍び込むというパラグラフへ飛びます。そして城の内部を書いたパラグラフで合流するという方法も取れます。

鍵を持っているかどうかの判断をプレイヤーに選ばせる方法もあります。ゲームブックの書籍ではほとんどその方法がとられてきました。

どちらがいいかどうかは解りませんが電子でのゲームブックはプログラムが絡んでいる以上、そういった自動でのフラグ立ても作れます。


今回は「AXMA Story Maker」にてフラグ分岐を書きたいと思います。
フラグ分岐には変数を使います。
変数と聞いても解らない人は解らないと思うので詳しい説明は抜きにして、とりあえずフラグ分岐のやり方を説明します。

10.jpg

今回作るストーリーはMac版で作ります。インターフェイスは前回で使ったWindows版とまったく同じです。
主人公がデートのため待ち合わせ場所までいくストーリーです。
デートの前に台所へ行くか寝室へ行くか選択出来ますが、寝室へ行くと携帯電話を見つけてそれを持ちます。
逆に台所へ行くと携帯電話を忘れたままでかけてしまいます。

いざ待ち合わせ場所に行くと相手が見つからない。
電話をかけようと携帯電話をとりだそうとしたところ…

そこでフラグ分岐を設定します。

寝室へ行って携帯電話を持っていればそのまま電話出来て
台所へ行って携帯電話を忘れてしまえば電話はかけられません。


01.jpg


スタートのパラグラフです。
パラグラフのタイトルはスタートとカタカナになっていますがスタートページは英語で「Start」と記載しないと動きません。
あと、リンクテキストとパラグラフのタイトルが同一の場合は[[]]で囲むだけでリンクできます。
パラグラフ名が「123」なら
[[台所へ行って腹ごしらえをする|123]]
と入力するのですが
パラグラフ名が「台所へ行って腹ごしらえをする」なら
[[台所へ行って腹ごしらえをする]]だけで大丈夫です


02.jpg


「台所へ行って腹ごしらえをする」のパラグラフです。

ここでは何も手に入れられないのでそのまま待ち合わせ場所まで行きます。

「寝室へ行って布団を干す」というパラグラフで携帯電話を見つけて忘れないようにポケットに入れるという文章を書いた後、携帯電話を持ってないという状態から持っているというフラグを立てないとなりません。
そこでマクロボタンを押してメニューを出します。

03.jpg

「set - Create / set variable」という項目を選びます。これは変数を設定するマクロです。

04.jpg

<<set $object = 1>>
という単語が入力されて茶色とピンクの文字になりました。
ピンク色の$objectというのが変数です。
$objectというのはあくまで参考例なのでここでは携帯電話を持っているかどうかの判定なので$keitai_denwaとしておきます。$という文字以降の言葉は自分で自由に設定して構いません。変数は幾つでも作れます。

05.jpg

<<set $keitai_denwa = true>>
と記載しました。
これは$keitai_denwaという変数にtrueをセットしなさいという構文です。
trueという文は真実とか正しいとかいう意味ですが、ここではオンになっているとか有効であるとかで判断します。
$keitai_denwaという箱があってそこにものが入っているかどうかと考えればいいですね。

trueの反対はfalseです。falseはオフとか無効とか覚えておけばよろしいかと。
要するに携帯電話を携帯していれば$keitai_denwaはtrueとなり持っているという記録がされ、
携帯してなければ$keitai_denwaはfalseとなり持っていないと記録されます。

trueやfalseとも入力しなくとも0か1かでも判断出来ます。
<<set $keitai_denwa = 1>>は1が入っている為オンとなり
<<set $keitai_denwa = 0>>は何もないのでオフとなります。

台所へ行ってから待ち合わせ場所まで行った場合は変数のセットは最初からないので
$keitai_denwaに何か入っているかと聞かれても何も無いと返します。

寝室へ入っていれば$keitai_denwaにものをセットしてくれと言われているので
$keitai_denwaに何か入っているかと聞かれれば入っていると返します。

「では待ち合わせ場所にむかう」というパラグラフをつくりましょう。

06.jpg

文章を途中まで書きました。
フィアンセが待ち合わせ場所にいないので主人公が電話をかけようと携帯電話を取り出そうとします。

ここでは携帯電話を持っているプレイヤーと持っていないプレイヤーが混在してます。
ここで携帯電話を持っているかどうかの判定をゲームブック側が判断してそれぞれ別の文章を吐き出せるように設定します。

セットした時と同じくマクロボタンをクリックしてみて下さい。

07.jpg

今度は以前選んだsetの下の「if-else statement」を選んでください。これは変数をチェックする構文です。

08.jpg

上の画像のように
<<if $object eq 1>>

<<elseif $object eq 2>>

<<else>>

<<endif>>

という文章が入力されました。
いきなり多くの文がでたのでパニクってしまいがちですが
このサンプルは条件を二つ聞いています。
最初の「<<if $object eq 1>>」は1番目の条件が合っているかどうか聞いて
合っていればその直下のテキストやリンクを表示して
合っていなければ次の「<<elseif $object eq 2>>」に放り投げています。
「<<elseif $object eq 2>>」は1番目の条件とは違う条件を聞いてきて
合っていればその直下のテキストやリンクを表示して
合っていなければ最後の「<<else>>」に放り投げています。
二つの条件があっていない場合、最終的に「<<else>>」から下のテキストやリンクが表示されます。
「<<endif>>」はこれでおしまいという意味で必ず最後に書かないといけません。


今回は$keitai_denwaに何かしら入っているかという条件一つのみなので
二番目の「<<elseif $object eq 2>>」は要りません。消してしまいます。
「eq 1」という文字も消してしまいます。
そして「$object」という文字を「$keitai_denwa」に取り替えます。

出来上がった
<<if $keitai_denwa>>という文は$keitai_denwaという変数に何か入っているかと聞いてます。
入っている場合はその直下にあるテキストとリンクなどを<<else>>の直前まで読み込み表示します。
何も入ってない場合は<<else>>から後ろの<<endif>>までのテキストやリンクなどを表示します。

09.jpg

こんな感じで作りました。
<<if $keitai_denwa>>から<<else>>までのテキストとリンクは寝室で携帯電話を拾った場合のみ表示され、<<else>>から<<endif>>までのテキストやリンクなどは表示されません。

逆に台所経由で待ち合わせ場所まで行った場合は携帯電話は忘れているので<<else>>から<<endif>>までのテキストやリンクなどは表示され、<<if $keitai_denwa>>から<<else>>までのテキストとリンクは表示されません。



それではプレイしてみましょう。

11.jpg

台所経由で待ち合わせ場所まで来た場合、携帯電話を忘れているので持っていません。
よって「では待ち合わせ場所にむかう」というパラグラフでは下図のように表示されます。

12.jpg

寝室経由で待ち合わせ場所まで来た場合、携帯電話を持っています。
よって「では待ち合わせ場所にむかう」というパラグラフでは下図のように表示されます。

13.jpg


以上がフラグ分岐の方法です。
そして前に書いたように複数条件を設定できます。

トップページのリンクを「台所」と「寝室」以外に「では待ち合わせ場所にむかう」というリンクを貼付け、台所や寝室を経由せずに直接待ち合わせ場所まで行けるようにします。

台所のパラグラフに
<<set $coin = true>>と入力して
10円玉を拾ったと記載します。

最後の「では待ち合わせ場所にむかう」というパラグラフでこのように構文を書きます。

<<if $keitai_denwa eq 1>>
携帯電話を取り出して電話をかけるとフサ子ちゃんが出たよ。
[[フサ子ちゃんと話す]]
<<elseif $coin eq 2>>
電話をかけようと携帯電話を取り出そうとしたらないのね。
でも10円玉拾ってたので公衆電話から電話したらフサ子ちゃんが出たよ。
[[フサ子ちゃんと話す]]
<<else>>
電話をかけようと携帯電話を取り出そうとしたらないのね。
仕方ないので立ち食い蕎麦喰って帰った。

おしまい
<<endif>>

寝室で携帯電話を拾ったら<<if $keitai_denwa eq 1>>の条件が適応します。
それに適応しない場合は次の<<elseif $coin eq 2>>にて10円玉を拾ったかどうか聞かれます。
台所を経由していれば10円玉を拾ってあるので適応してその下の文章が表示されます。
家から直接待ち合わせ場所へ行った場合どちらにも適応しないので<<else>>以降の文が表示されるというわけです。

条件は二つだけでなく幾つでも設定できます。

あと、変数には真偽や0と1以外にも複数の数字や文字なども入れられます。
HPなどのステータスやバトルのときの数値などにも使われたりします。
ただちょっと難しいカテゴリーかもしれません。私もプログラミングは詳しくはないので…



ちなみにデモの物語のオチはこちらです。






15.jpg

ネタに対する突っ込みはなしという事で…
posted by 文芸遊戯研究会 at 00:22| Comment(0) | 制作ソフト | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]