ゲーム変数、システム変数、一時変数の三種類があります。
| ゲーム変数 f | タイトル画面から新たなゲームをはじめるとゲーム変数は「無し」の状態から始まります。セーブするとその時点のゲーム変数がセーブデータに保存されます。ロードするとセーブデータに保存されていたゲーム変数が復活します。このようにゲーム毎に管理される変数で、好感度の保管などに使用します。 例 @eval exp="f.hoge = 3" |
| システム変数 sf | ゲーム全体で共通の変数です。ブラウザを閉じるなどしてゲームを終了しても破棄されず、新たにゲームを始めても前と同じ値が保持された状態でゲームが進みます。ルート通過有無管理などに使用します。セーブデータには保存されません。 例 @eval exp="sf.hoge = 'abc'" |
| 一時変数 tf | ゲーム全体で共通の変数です。システム変数とブラウザを閉じるなどしてゲームを終了すると値は破棄されます。一時的に値を保管しておいたり、固定値の管理などに使用します。セーブデータには保存されません。 例 @eval exp="tf.hoge = 123" |
【ポイント】
固定値はシステム変数ではなく一時変数を使用してください。例えば立ち絵の位置を直接の数値ではなく変数で指定したいような場合に使います。このようにすると立ち絵の位置を全体で共通化できて後で変更するときなど便利です。
例:@image storage=tachie left=&tf.pos_left
値の設定はinit.scで行います。下記「変数の初期化について」参照。
固定値をシステム変数で行うと処理が重くなります。
| ゲーム変数 f | start.scで行います。 例 @eval exp="f.hoge = 3" ※ゲーム開始時にゲーム変数は「無し」の状態から始まるので、ゲーム変数をinit.scで行っても無意味です。 |
| システム変数 sf | init.scで行います。ただし、init.scはゲーム起動の度に走るので初回起動時にだけ初期化されるようにします。 例 @if exp="sf.shokika != 1" @eval exp="sf.hoge = 'abc'; sf.hoge2 = 'xyz'" @eval exp="sf.shokika = 1" @endif |
| 一時変数 tf | init.scで行います。 例 @eval exp="tf.pos_left = 200; tf.pos_right = 600" |
シーン一覧からjumpする各シーンの終わりに以下の記述をします。
例:
| [if exp="f.fromSceneList==true"] [link storage=sceneAgain]もう一度見る[endlink] [link storage=sceneList]一覧に戻る[endlink] [s] [endif] |
※シーン終了後の選択肢に出る「一覧に戻る」「もう一度見る」のテキストは変更可能です。
※シーン一覧から回想シナリオにjumpする際、start.scに記述されたevalタグが自動的に実行されます。ゲーム変数を初期化するためです。
linkタグにURLを記述することにより、ブラウザを起動し指定したページを表示することができます。
URLは全体をURLエンコードして記述します。
例:「http://aaa.com/?aaa=bbb&ccc=ddd」→「http%3A%2F%2Faaa.com%2F%3Faaa%3Dbbb%26ccc%3Dddd」
例:
| [link target=*toTitleMenu]タイトルメニュー一覧に戻る[endlink] [link storage=http%3A%2F%2Faaa.com%2F%3Faaa%3Dbbb%26ccc%3Dddd]ウェブを見る[endlink] [s] |
画面上の矩形で囲まれた範囲を選択しとして設定できます。マップを表示して、行先を選択するような場合に使用します。通常の選択肢と考え方は同じで「linkタグ」を使用します。
・例(選択肢が画面左右の2箇所にある)
| [image storage=背景 page=fore visible=true layer=base] [link target=*select_area1 left=0 top=0 width=400 height=600][endlink] [link target=*select_area2 left=400 top=0 width=400 height=600][endlink] [s] *select_area1 [cm]選択された[r]場所は『左』です[l][r] [jump storage=xxx.sc] *select_area2 [cm]選択された[r]場所は『右』です[l][r] |
前景のレイヤー指定は数字による「レイヤー番号指定」と文字列による「レイヤー名指定」が出来ます。
例:レイヤー番号指定
| [image storage=abc layer=1 pos=center][move layer=2 path=(100,200)] |
例:レイヤー名指定
| [image storage=abc layer=taro pos=center][move layer=花子 path=(100,200)] |
【注意】システム的にはレイヤー番号で管理しています。
レイヤー名指定の場合、空いているレイヤー番号に自動的に振り分けられるので、どのレイヤー番号が使用されるかは分かりません。したがって、複数の立ち絵が重なるような表示をレイヤー名指定でする場合、indexを指定してレイヤーの重なり具合を明示的に指定する必要があります。
例:
| [image storage=abc layer=taro left=300 index=1000] [image storage=xyz layer=花子 left=200 index=2000] |
リスト型(配列)およびマップ型(連想配列)の変数を使用することができます。
◆命名ルール
f.list.<変数名>
例:f.list.ary123
◆使い方
| 機能 | 関数名 | 説明・使用例 |
|---|---|---|
| 要素の追加 | add | リストの最後尾に要素が追加されます [eval exp="f.list.ary123.add('one')"] [eval exp="f.list.ary123.add('two')"] [eval exp="tf.element='three'"] [eval exp="f.list.ary123.add(tf.element)"] |
| 要素の取出し | get | 要素番号を指定して要素を取り出します(一番先頭は0になります) 要素数以上の番号および数字以外を指定するとブランク文字が戻ります。 [eval exp="tf.temp = f.list.ary123.get(0)"] [eval exp="tf.idx = 1"] [eval exp="tf.temp = f.list.ary123.get(tf.idx)"] |
| 要素の削除 | remove | 要素番号を指定して要素を削除します。(一番先頭は0になります) 要素数以上の番号および数字以外を指定すると何も起こりません。 [eval exp="f.list.ary123.remove(0)"] [eval exp="tf.idx = 1"] [eval exp="f.list.ary123.remove(tf.idx)"] |
| 要素数取得 | size | 要素数を取得します。 存在しない変数の場合0が戻ります。 [eval exp="tf.size=f.list.ary123.size()"] |
| 要素クリア | clear | 要素を全て削除します。 [eval exp="f.list.ary123.clear()"] |
| 変数削除 | ---- | 通常の変数と同様です。 [eval exp="delete.f.list.ary123"] |
◆命名ルール
f.map.<変数名>
例:f.map.htable999
◆使い方
| 機能 | 関数名 | 説明・使用例 |
|---|---|---|
| 要素の追加 | put | キーと値を指定して要素を追加します。キーの重複は上書きになります。 [eval exp="f.map.htable999.put(0, tf.element)"] [eval exp="f.map.htable999.put(tf.idx, 'two')"] [eval exp="tf.element='three'"] [eval exp="f.map.htable999.put('abc', tf.element)"] |
| 要素の取出し | get | キーを指定して要素を取り出します。 存在しないキーを指定するとブランク文字が戻ります。 [eval exp="tf.temp = f.map.htable999.get(0)"] [eval exp="tf.idx = 1"] [eval exp="tf.temp = f.map.htable999.get(tf.idx)"] [eval exp="tf.temp = f.map.htable999.get('abc')"] |
| 要素の削除 | remove | キーを指定して要素を削除します。 存在しないキーを指定すると何も起こりません。 [eval exp="f.map.htable999.remove(0)"] [eval exp="tf.idx = 1"] [eval exp="f.map.htable999.remove(tf.idx)"] [eval exp="f.map.htable999.remove('abc')"] |
| 要素数取得 | size | 要素数を取得します。 存在しない変数の場合0が戻ります。 [eval exp="tf.size=f.map.htable999.size()"] |
| 要素クリア | clear | 要素を全て削除します。 [eval exp="f.map.htable999.clear()"] |
・単独でしか使用できません(四則演算と同一式内で使用することは出来ません)。
| 【ダメな例】 [eval exp="f.aaa = f.bbb + f.list.ary123.get(0)" [eval exp="f.aaa = f.bbb + f.map.hoge.get('aaa')"] |
| [playse storage=hoge cond="f.map.foo.get('bar') == 0"] |
| 【よい例】 [eval exp="tf.temp = f.list.ary123.get(0)"] [eval exp="f.aaa = f.bbb + tf.temp"] |
| [eval exp="tf.aaa = f.map.foo.get('bar')"] [playse storage=hoge cond="tf.aaa == 0"] |
ある特定の場所をタップすることにより、現在実行中のシナリオに優先して、任意のシナリオが実行されるよう仕込んでおくことができます。ここでは任意のシナリオが実行されることを「割込み処理」と呼び、任意のシナリオを「割込み処理シナリオ」と呼びます。
| タグ | 概要 | 属性 |
|---|---|---|
| interrupt | 割込み処理定義開始 | buf:割込み処理定義番号 |
| left、left、top、width 割込み処理起動エリア指定 |
||
| anytime true:何時でも割込み受付 false:テキストクリック待ち時のみ割込み受付(初期値) |
||
| endinterrupt | 割込み処理定義終了 | なし |
| clearinterrupt | 定義済み割込み消去 | buf:消去対象の割込み処理定義番号 buf指定がない場合は全ての定義済み割込みを消去 |
レイヤをグループ化する場合に指定します。グループ化しておくとグループ単位でfreeimage, layopt, move, move2, trans, backlay, forelayの操作ができます。
例えば、複数の立ち絵レイヤと複数のボタンレイヤがある場合、立ち絵レイヤにgroup=tachiと指定しておくと、ボタンレイヤを残して立ち絵だけまとめてfreeimageするという操作が簡単にできます。
また、moregroup属性により一つのレイヤに複数のgroupを設定することもできます。
| 【例1】 @image layer=tachi001 storage=file1 group=tachi @image layer=tachi002 storage=file2 group=tachi @image layer=button001 storage=parts1 group=parts @image layer=button002 storage=parts2 group=parts @freeimage group=tachi |
※groupとlayerの両方の属性が定義されていた場合、group属性が優先されlayer属性は無視されます。
例:上記の例において
| @freeimage group=tachi layer=tachi001 |
とすると、tachi001とtachi002の両方のレイヤがfreeimageされます。
| 【例2 moregroupを使用した例】 @image layer=tachi001 storage=file1 group=g1 @image layer=tachi002 storage=file2 group=g2 moregroup=g3 @layopt group=g1 moregroup=g3 @freeimage group=g3 ←上記の2つレイヤがfreeimageされます |
| whileループ | while,endwhie,breakwhileでループ制御できます。 [while exp="f.abc < 2"] [eval exp=" f.abc = f.abc +1"] [endwhile] ※whileループは小規模なループ処理で使用します。シナリオ全体が関わるような大きなループはjumpおよびcallで処理します。 ※while~endwhile間にラベルを入れてはいけません。 ※while~endwhileはストリームブロックにおいてファイル分別されないので、while~endwhile間にimage,playse等で大きなファイルを指定するとシナリオがダウンロードされにくくなります。 |
| moveとtransの同時実行 | trans後もmove中のレイヤーを維持する場合は、move開始前にbacklavするなどして、move対象のレイヤーをpage=backに置いておきます。 page=backに対象レイヤーを置かない場合、transによりmove対象となるレイヤーが消滅し差しフェードアウトと同時にmoveも止まります。 また立ち絵などをmoveしながらtransする場合は、page=backに同じレイヤー名でtrans後の画像をimageしておけばmoveしながら立ち絵が入れ替わります。 |
| トランジションの遅延実行 | transitionタグにdelay属性[ms]を付与するとトランジションを遅延実行することが出来ます。テキスト出力の途中で立ち絵の表情を変更するような時に有効です。 例: [image storage=stand page=back layer=s1] [trans layer=s1 time=500 delay=2000] おはよう。こんにちは。さようなら。おはよう。こんにちは。さようなら。 [wt] |
| シナリオファイルの最終行 | シナリオファイルの最終行に自動的に[eof]が挿入されます。 eofマクロを定義することにより、 シナリオファイルの最終行で何か定期的な処理を入れることが出来ます。 例えばシナリオファイルの最終行にreturnタグを入れる場合は 以下のようにeofマクロを定義します。 [macro name="eof"] [return] [endmacro] |
| トランジションによるmoveの停止 | moveはmove対象のレイヤーがfreeimageされると自動的に停止します。 この仕様を応用すると、move中のレイヤーをトランジションにより、 ボヤーンと消える感じで停止することができます。 [image storage=stand page=fore layer=s1 visible=true] [move layer=s1 path=(add20,,)(sub20,,) time=1000 count=999] [freeimage page=back layer=s1] [trans layer=s1 time=5000] おはよう。こんにちは。さようなら。おはよう。こんにちは。さようなら。 [wt] |
| move,move2の裏ページへの反映 | move後のレイヤー情報(位置、アルファ等)を裏ページにも反映させたい場合はmove,move2の属性にwithback=trueを付与します。 |
| マクロ変数は極力使用しない | マクロ内ではマクロへの因数をマクロ変数(mp.*)として使用できます。 マクロ内でマクロ変数を使用している場合、マクロ展開後(macro.php実行後)、マクロ変数を設定するためeval行が挿入されます。したがって、マクロ変数ではなく%~で問題ない場合は%~を使用すると処理が軽くなります。頻繁に使用するマクロの場合は特に意識して%~を使用することをお勧めします。 例: [macro name=mmm] @image storage=xxx left=&mp.hoge [endmacro] ↓ [macro name=mmm] @image storage=xxx left=%hoge [endmacro] |
| フォントサイズ | フォントサイズを変更したい場合は「position」タグの「fontscale」属性で設定します。指定する値は標準サイズからの倍率(百分率)になります。 例:1.5倍にしたいとき @position layer=message0 page=fore fontscale=150 例:半分にしたいとき @position layer=message0 page=fore fontscale=50 |
| 既読スキップ実装 | システム変数(sf.___kidoku___)で「既読のみスキップモード」の設定ができます。 ・sf.___kidoku___が0の時「全テキストスキップ」 ・sf.___kidoku___が1の時「既読のみスキップ」 ■title.iniに記述して実装する例 userVar=___kidoku___,1;スキップモード;全スキップ,0;既読のみスキップ,1 ■シナリオ中に記述して実装する例 @eval exp="sf.___kidoku___ = 1" ※システム変数に既読情報が格納されるのでシステム変数の容量が増えます。場合によってはゲームのパフォーマンスに影響することがあるのでご留意ください。 |
| イージング(加減速)処理 | イージング処理を指定します。 move,move2やviewに加速度を指定することができます liner:等速(初期値), ease-in:ゆっくり開始, ease-out:ゆっくり停止, ease-in-out:ゆっくり開始しゆっくり停止 |
| ブックマークアイコン | ブックマーク時のアイコン画像(ブラウザ版&アニメイトゲームスのみ)を設定できます。 アイコン画像のファイル名に設定したタイトル名がブラウザのタブ上に表示され、「スマホのホーム画面へ追加」をした際に設定した画像が表示されます。 ■設定方法:freeフォルダに「icon_<タイトル名>_.png」を格納する。(縦180px、横180px) ※<タイトル名>がHTMLのheadタグの<title>…</title>に入る ※他のファイルと同様にSJISでアップロードする 例:icon_てすと_.png |
| 端末方向強制方法 | ゲームプレイ時の端末方向を縦向きもしくは横向きに固定したい場合の対応です。 ①title.iniへの以下を記述します。 ・縦向きに強制の場合 systemVar=___bForceOrientationCanvas,0 ・横向きに強制の場合 systemVar=___bForceOrientationCanvas,90 ②端末が望まない向きになった際に表示するメッセージ画像をbi/and_middleフォルダに格納します。 ファイル名:V2_force_orientation_canvas.png ファイル縦横サイズ:title.iniのtitleImgに設定した画像と同じ |
| データ読み込み中アイコン(ロードアイコン)のパラパラアニメ設定 | 初期状態では設定した画像が回転しますが、パラパラアニメに切り替えることができます。 画像は画面の右下ピッタリに描画されますので、位置調整は画像の余白で行ってください。 ・画像ファイル仕様 ファイル名:V2_V2_logo.png(回転タイプと同じファイル名) 切り替える画像を縦方向に連結 ・パラメータ設定 一時変数に画像枚数(tf.___loadimage_count)と 切り替え間隔[ms](tf.___loadimage_interval)を設定 ・init.scへの記述例 @eval exp="tf.___loadimage_count = 3; tf.___loadimage_interval = 200" |
| クリック待ち画像設定 | こちらpositionタグ参照 |
| タップ場所エフェクト設定 | こちらtapeffectタグ参照 |
| テキストウィンドウ非表示時にサブメニュー表示 | 初期動作ではテキストウィンドウを非表示にするとサブメニューも非表示になります。 以下の設定をすることにより、テキストウィンドウを非表示にしてもサブメニューは表示状態のままとなります。 ①title.iniに以下を記述します。 systemVar=___bShowSubmenuAtMessageHide,1 |
| cond属性 | スクリプトの実行有無の条件を行単位で指定できます。cond指定した条件が真の場合に実行されます。 例 @eval exp="tf.hoge = 1" @playse storage=se1 cond="tf.hoge == 1" ←実行される @playse storage=se2 cond="tf.hoge != 1" ←実行されない |
| ふりがな | ふりがな(ルビ)を付けることができます。 【書式】[u]<対象文字列>[b]<ふりがな>[y] 【例】 今日は[u]天気[b]てんき[y]がいいですね。←「天気」に「てんき」がルビ付けされます。 ※ルビは対象文字列の中央に配置されます。 ※ルビは対象文字列の上に収まるように自動拡縮されます。 ※ルビが上の行と重ならないように適切な行間(spaceline)を設定する必要があります。 ※テキスト履歴にはルビが付きません(括弧で代替えされます) |
| 固定値について | 変数に値(固定値)を持たせて、スクリプトでは直接値を記述しないという方法をとる場合があります。この場合の固定値は一時変数にして、init.scで値を設定する方法がリソースを最も使わない方法としてお勧めです。 例 init.scにて @eval exp="tf.BUF_VOICE = 0; tf.BUF_SE = 1" スクリプト内にて @playse storage=hoge buf=&tf.BUF_VOICE |
| eval属性,execute属性について | 全てのタグにevalおよびexecute属性を付けることができます。 ■ 動作仕様 タグの処理が終了 ↓ eval属性を処理 ↓ execute属性を処理 【例】 @trans time=300 eval="tf.hoge = 1; tf.foo = 2" execute="[stopse buf=0];[playse storage=hoge]" ※jumpタグにeval,execute属性は効きません |
| シーン回想の初期処理について | シーン回想をプレイする際に共通の初期処理をしたい場合があります。例えば、メニューを出すとか、割り込み処理を仕込むとか。その場合は初期処理したいスクリプトを_from_scene_list.scに記述し、start.scでcallします。 ※注意:start.scは通常のゲーム開始時も呼ばれます。シーン回想時だけ_from_scene_list.scをcallしたい場合は以下例のようにcond属性を付けるなどして制御します。 【例】@call storage=_from_scene_list.sc cond="f.fromSceneList == true" |