Skill Flow Builderのリファレンス
Skill Flow Builderには、ゲームやストーリー向けに次のようなメタデータ形式が用意されています。
シーンのプロパティ
Skill Flow Builderでは、シーンが基本要素です。シーンにはさまざまなタイプのコンテンツが含まれ、ストーリーやゲームの流れに応じてあらゆる方向につなげていくことができます。
以下は、あるシーンの構造を表しています。
@scene name
*say
コンテンツ
*reprompt
コンテンツ
*show
コンテンツ
*then
シーンの指示
シーン名でシーンを特定します。シーン名の形式は次のとおりです。
@
で始める必要があります。- 英字、数字、スペースで構成し、文字数制限はありません。
- ストーリー内で一意である必要があります。
- シーン名は1行に収める必要があります。
一部のシーン名は特殊用途向けに予約されています。詳細については、特殊シーンを参照してください。
*say
シーンが再生されると、Alexaは*say
プロパティで定義したコンテンツをユーザーに読み上げます。*say
プロパティの形式は次のとおりです。
- 任意です。
- 複数行に記述できます
- SSMLを使用できます。
- バリエーションを示すために
||
を使用できます。 - 波括弧を使って変数値を挿入できます。
||
(ダイアログバリエーション)
*say
このようなものですか
||
それともこのようなものですか
||
は、ランダムに選択されるバリエーションを指定します。コンテンツの繰り返しによってストーリーが退屈にならないようにするのに効果的です。ダイアログバリエーションは、*say
、*reprompt
、*recap
で使用できます。
*reprompt
Alexaは、ゲームでプレイヤーが答えるべきときに何も言わない場合、*reprompt
プロパティのコンテンツを声に出して読み上げます。*reprompt
を指定しなかった場合、Alexaはデフォルトで直前のシーンに指定した*say
コンテンツを再度読み上げます。
*say
と同様に、*reprompt
プロパティにも次のような形式が定められています。
- 任意です。
- 複数行に記述できます
- SSMLを使用できます。
- バリエーションを示すために
||
を使用できます。 - 波括弧を使って変数値を挿入できます。
*recap
Alexaは、プレイヤーが想定外の応答をした場合、*recap
プロパティのコンテンツを声に出して読み上げます。
*say
と同様に、*recap
プロパティにも次のような形式が定められています。
- 任意です。
- 複数行に記述できます
- SSMLを使用できます。
- バリエーションを示すために
||
を使用できます。 - 波括弧を使って変数値を挿入できます。
*show
プレイヤーが視覚を使用するコンテンツに対応するデバイスを使っている場合、デバイスはこのセクションに割り当てられた視覚コンポーネントを表示します。視覚要素を追加するを参照してください。
*then
*then
プロパティには、シーンの指示が入ります。シーンの指示とは、Alexaがそのシーンのコンテンツを再生した後に順次実行されるコマンドのことです。
シーンの指示
-> (遷移先のシーン)
Skill Flow Builderに、別のシーンに遷移するよう指定する終端子です。
*then
-> start
->
指示の形式は次のとおりです。
- 直後にシーン名を指定する必要があります。
- 波括弧を使って変数を挿入できます。たとえば、
two
という変数の値が2
の場合、-> scene {two}
は@scene 2
に遷移します。 - 終端子のため、シーンの終わりを表します。終端子が実行されたらすぐに、処理は次のシーンに遷移します。
hear
hear
指示は、Alexaが聞き取る単語やフレーズと、聞き取った後のアクションを指定します。
*then
hear 逃げて, ここから出て, 行って {
decrease courage by 1
-> run
}
hear 隠れて {
set fear to 10
-> hide
}
hear
指示の形式は次のとおりです。
- カンマで区切って複数のフレーズを指定できます。
- 波括弧で囲む必要があります。
if
文の中でも使用できます。また、if
文を含めることもできます。
if
*then
if not enraged {
increase fear by 2
}
if fear is greater than 10 {
-> fear warning
}
-> next room
状況を限定する場合には、if
を使用します。if
文以下の指示は、if
文に定義した状況に該当する場合(trueの場合)にのみ実行されます。
if
文の形式は次のとおりです。
- 指示を波括弧で囲む必要があります。
hear
文の中でも使用できます。またhear文を含めることもできます。- 入れ子にできます。
- 値の前に
!
を使用できます。!
は「...ではない」ことを意味します。 - サポートされる演算子は次のとおりです。
is
==
is greater than
>
is greater than or equal
>=
is less than
<
is less than
<=
is not
!=
and
&&
or
||
()
Set、increase、decrease、clear、flag、unflag
次の指示は変数の値をセットしたり、操作したりするのに使用します。
*then
set fear to 2 // fear = 2
increase fear by 10 // fear = fear + 10 = 12
decrease fear by 5 // fear = fear - 5 = 7
flag scared // scared = true
unflag scared // scared = false
clear fear // fear = null
clear * // ストーリーやゲームでセットした変数をすべてクリア
-> start
<-> (遷移して戻る)
<->
指示を使うと、再利用可能なシーンに遷移してから、またゲームのフローに戻ることができます。
@start
*then
<-> test your luck
>> END
@test your luck
*say
残念でした。
*then
>> RETURN
プレイヤーは、<-> test your luck
により@test your luck
シーンに遷移してから、>> RETURN
により<->
指示以降の行に戻ります。
<->
は特殊な種類の終端子で、<->
以降の指示は>> RETURN
指示が実行されるまで実行されません。複数の<->
指示と複数の>> RETURN
指示をつなげて使うこともできます。
特殊終端子
慣例的に、特殊終端子はすべて大文字で記述しますが、大文字にしなくても機能には影響しません。
» RESTART
>> RESTART
終端子の形式は次のとおりです。
- 付加されたすべての拡張子について、startシーケンス、または
onStart
関数を実行することでストーリーやゲームを再開します。 - 利用可能な選択肢をリセットします。
@start
シーンに遷移します。
この終端子はゲーム内で使用されている変数をクリアしません。つまり、ゲームの複数セッション間で保持する必要のある永続的な変数を削除しないようにできます。変数をクリアするには、clear *
コマンドを実行します。
» PAUSE
>> PAUSE
終端子の形式は次のとおりです。
- 残りの指示をすべて直ちに停止することで、ストーリーを一時停止します。
- 付加されたすべての拡張子について、pauseシーケンス、または
onSessionEnded
関数を実行します。 @pause
シーンが定義されている場合は、完全に一時停止する前にシーン内のコンテンツを再生します。
» RESUME
>> RESUME
終端子は、プレイヤーが前回プレイした最後のシーンからゲームを再開します。
この終端子はRelaunch
動作を制御します。詳細は、再起動の動作を制御するを参照してください。
» REPEAT
>> REPEAT
終端子はプレイヤーが今聴いたか、以前に聴いたことのあるオーディオ構成要素をリプレイします。
» REPROMPT
>> REPROMPT
終端子は、再プロンプトとして使われたオーディオ構成要素をリプレイします。
» BACK
>> BACK
終端子は、前回の対話の最初に戻ります。プレイヤーが「はい」または「いいえ」など、Alexaに何かを言うように促された場合の対話です。
前回の対話の開始点が、戻りたい対話とは何シーンか離れている場合があります。
前回の対話によってプレイヤーが複数のシーンに遷移した場合、プレイヤーが「戻って」と言った場合、プレイヤーは最初のシーンに戻ります。
» END
>> END
終端子の形式は次のとおりです。
- セッションを終了することでストーリーやゲームを終了します。
- STARTシーケンスを直ちに実行し、拡張子に対して
onStart
関数を実行して次のシーンを@start
にセットします。 - プレイヤーが次回ゲームを起動すると、プレイヤーは
@start
シーンに遷移します。
» RETURN
>> RETURN
終端子は、最後の<->
指示以降の行に直ちに戻ります。
特殊シーン
特殊シーンには、ほかのシーンと異なる便利な動作があります。
@start
@start
シーンは必須です。新しいユーザーまたは再起動後のゲームは、このシーンから開始します。
@start
*say
さあ物語の始まりです。準備はいいですか?
*then
-> setup
@resume
@resume
シーンは、プレイヤーがゲームを再開すると再生されます。>> RESUME
指示を使い、プレイヤーがゲームを終了したシーンに戻すことができます。
@resume
*say
お帰りなさい。前回の続きから始めますね。
*then
>> RESUME
@pause
@pause
シーンは通常の一時停止動作によりゲームを一時停止する前、あるいは>> PAUSE
指示から再生されます。
@pause
*say
では、ひとまずさようなら。
@global prepend
@global prepend
のコンテンツは、ゲーム内のすべてのシーンの前に付加されます。
@global prepend
*say
ピーッ!
例については、すべてのシーンに視覚要素を追加するを参照してください。
@global append
@global append
のコンテンツは、ゲーム内のすべてのシーンの後に付加されます。
@global append
*then
hear ヘルプ {
-> help message
}
hear ステータス, 今のステータス, ステータスを教えて{
-> status message.
}
例については、プレイヤーがどこからでも再起動できるようにするを参照してください。
コア拡張子
roll、rollResult
*then
roll 2d6,
set attack to rollResult,
-> resolve attack.
roll
指示はサイコロを転がすのに使用します。rollResult
指示はrollの結果にアクセスできます。この例では、6面のサイコロを2つ転がして、出た目の合計をrollResult
変数に入れています。
- rollは入力としてXdYを受け取ります。XとYは整数です。Xは転がすサイコロの数、Yはサイコロの面の数を表します。
1d6 + 3
、1d6 - 3
のように記述することで、数を足したり引いたりできます。- 複数のサイコロを転がして、最も大きな数をZ個取り出すこともできます。その場合は、
XdYkZ
のように記述します。Xがサイコロの数、Yが面の数、Zが取り出したい最大値の数を表します。たとえば、roll 2d6k1
では、6面のサイコロを2つ転がして、最も大きな数を1つ取り出します。
time
*then
time
set timeSinceLast as system_return
decrease timeSinceLast by lastUpdateTime
if timeSinceLast >= 300000 {
-> long time no see
}
time
指示は、現在時刻をsystem_return
という特殊なシステム変数に保存します。ゲームで時刻を使うには、set
指示を使って時刻を独自の変数に割り当てます。時刻はエポックミリ秒形式です。つまり、1970年1月1日(UTC/GMTの深夜0時)からの経過時間をミリ秒で表したものです。
bgm(バックグラウンドミュージック)
*then
bgm https://url-to-the-background-music.mp3
シーンのナレーションにBGMを組み合わせます。
BGMは、カスタムのAmazon Pollyを使ったフォアグラウンドのオーディオまたはナレーションと組み合わせた場合にのみ機能します。Alexaの音声と組み合わせることはできません。また、エディターのプレビューモードでも機能しません。
monetization
*then
buy item='sample product' success='purchase success' fail='purchase failed'
declined='purchase declined'
already_purchased='purchased already' error='purchase error'
プロジェクトディレクトリのresources/ProductISPs.json
にあるISP IDコンフィギュレーションファイルで、アイテム名にマッピングしたスキル内商品(ISP)の収益化フローを開始します。購入フローが正常に完了すると、プレイヤーは「success」に定義されたシーン、またはこの例にある@purchase success
に遷移します。購入フローが失敗またはキャンセルされると、「fail」に定義されたシーン、またはこの例にある@purchase failed
に遷移します。
declined
、already_purchased
、error
のパラメーターは任意です。これらのパラメーターを割り当てなかった場合、プレイヤーはfail
パラメーターで定義されたシーンに遷移します。各購入フローでプレイヤーが遷移するシーンを細かく制御したい場合は、これらのパラメーターを定義してください。