シナリオを分岐させよう

ラベルをつける

アドベンチャーゲームに必須な要素といえば、選択肢です。 プレイヤーに選択肢を表示して、そこからシナリオが分岐していくというのが基本ですね。

選択肢が選ばれたら、特定の場所にシナリオがジャンプしないといけません。
そのため、目印となるラベルを設定します。

ラベルは、行の先頭に* がつきます。 では、first.ksの下部を編集して、以下のようにしてみましょう。

Almightへようこそ![m]
このゲームエンジンで、[m]
どんなゲームを作りますか?

*anna
@cm
あんなゲームを作りましょう
@s

*konna
@cm
こんなゲームを作りましょう
@s

「あんなゲーム」「こんなゲーム」というシナリオにジャンプするためのラベルを追加しました。

しかし、このまま実行してもラベルはそのまま通過されて上からしか実行されず、最初の[s]タグで処理が停止してしまいます。

では、選択肢を表示させましょう。
選択肢の表示には[choices]というタグを使います。

Almightへようこそ![m]
このゲームエンジンで、[m]
どんなゲームを作りますか?

@choices text1="あんなゲームかな" target1="*anna" text2="こんなゲームだよ" target2="*konna"
@s    

*anna
@cm
あんなゲームを作りましょう
@s

*konna
@cm
こんなゲームを作りましょう
@s

04_001

選択肢が表示されました。

ここからは選択肢をプレイヤーが選択するまで先には進みません。

上の「あんなゲームかな」を選択すると、[choices]タグで指定されている「target1」属性のラベル名までジャンプします。

そこで「*anna」というラベルまでジャンプし、文字を全消しして「あんなゲームを作りましょう」という文字を表示して停止する。といった流れになります。

04_002

変数を使う

変数とはいわゆるフラグとして使えるもので、セーブデータの中に保存されます。

ここに様々な要素(特定のCGを見た・どちらのルートに進んだ・好感度の数値などなど…)を記録しておくことで、ゲームをさらに豊かにすることが出来ます。

変数にはいくつか種類があります。

  • セーブ・ロード可能な普通のゲーム変数を f変数 といいます
  • セーブ・ロードと関係なく、常に値を保持できるシステム変数 sf変数 といいます
  • 一時的に値を置けるだけの一時変数(ゲームの終了で消える) tf変数 といいます

変数には半角英数、全角文字、アンダーバーを利用可能ですが、出来るだけ全角文字は避けて下さい。
また、変数名の最初の文字に数字を付けることはできません。(2p などは _2p などとしてください)

この変数名の前にゲーム変数ならf.を、システム変数ならsf.を、一時変数ならtf.を置き、「f.flag」として変数を呼び出します。

変数に値を入れるには[eval]タグを使います。

f.flagに400という数字を入れるには

@eval exp="f.flag = 400"

といったふうに使います。文字列を入れたい場合は

@eval exp="f.flag = 'こんにちは'"

このように、シングルクォーテーションで文字列を囲み、ダブルクォーテーションでexp属性を囲みます。

 @eval exp="f.flag = 400 + 5"

とすれば、405となるよう四則演算も出来ますし、文字列の結合なども可能です。

タグの属性値に変数を使う

 @eval exp="tf.name = 'bg01.jpg'"
 @show_bg file="&tf.name"

このように、属性値の先頭に** & ** をつけることで、変数値に置換されます。

変数で分岐させる

たとえば、好感度が5より上ならばこちらのルートに分岐させたい… といったことがあるかと思います。そういったときは、[if]タグを使うことができます。

@if exp="f.flag > 5"
    好感度が5より上
@elsif
    好感度が5以下
@endif

さらに詳細な処理を行うことも出来ますが、初級チュートリアルでは省略しますので、詳しく知りたい際はAPIドキュメントを参照してください。

変数に乱数を代入する

almightでは吉里吉里のようにintrandomを使用し、乱数を代入することが可能です。

 intrandom(最小値, 最大値)となっています

 @eval exp="f.hoge =  intrandom(0, 10) "

上記では0から10までの整数の乱数がf.hogeに入ります。