シナリオの作成方法

初級編(エディタ使用)
キャラの表示とセリフ
マップの表示
音楽(BGM)の再生
中級編(直打ち)
タイトル(title命令)
セリフ
BGM及び効果音(bgm、bgmloop、bgmstop、se、seloop命令)
左上に出てくるアレ(info命令)
文字列イメージ(txtimg命令)
背景変更(bg命令)
背景色指定(bgcolor命令)OSC 1.0 Beta7にて復活
シーン名設定(scenename命令)
立ち絵設置命令(setcg,clcg命令)
ラベルとジャンプ(label、jump命令)
ラベル呼び出しとリターン(call、return命令)
選択肢(select命令)OSC Ver1.0b4で事実上廃止
選択肢(seljump,selcall命令)
条件分岐命令(ifjump,ifcall命令)
条件分岐命令2(casejump,casecall命令)
ループ制御(for,next,break命令)
変数操作命令(var,add,sub,mul,div,mod,inc,dec,rnd命令)
汎用変数操作(eval命令)
変数が使用可能な命令一覧
待機命令(sleep命令)
デバッグ用出力命令(print命令)

初級編(エディタ使用) ページトップ▲

まずは専用エディタを使ったシナリオの作成手順を説明します。
エディタはあくまで補助ツールなので、エディタだけではシナリオは作れません。
基本的な流れは、専用エディタにしたがってコマンドを作成し、テキストエディタに貼り付けて保存で作成できます。


キャラの表示とセリフ ページトップ▲



1.キャラの表示
まずは基本となるキャラの表示方法とセリフの書き方だ。
”Chara:”から好きなキャラを選び、”Image”で表情を変更しよう。
”更新(F5)”ボタンを押せば上の黒い画面に表示されるはずだ。
表情の種類は、実際に表示させてみて確かめるといい。

2.セリフの書き方
"Name"と下の枠にそれぞれ名前、セリフを入れるとキャラにしゃべらせる事ができます。

3.
先ほどの、下の"Command:"に注目すると、先ほど入力したセリフなどが 表示されているのがわかります。
これをコピーし、メモ帳などに貼り付けてファイル名を"○○○.tsf"にして保存してください。

以下の文はこの章で使用したコマンドです。

3,0,シベリン,まずは基本となるキャラの表示方法とセリフの書き方だ。</n>”Chara:”から好きなキャラを選び、”Image”で表情を変更しよう。</n>”更新(F5)”ボタンを押せばこの画面に表示されるはずだ。</n>表情の種類は、実際に表示させてみて確かめるといい。


4.再生方法
保存したtsfファイルをosc.exeから開くと先ほどエディタで作った作品が見れます。

マップの表示 ページトップ▲

”マップ”タブをクリックし、同期チェックボックスをONにして置いてください。
”File:”からマップを選ぶことができます。今現在、マップ名ではなくファイル名なので表示させてみないとどこのマップか
分かりません。

セリフ方法でやったように、Command:に表示されているコードをコピーして、tsfファイルに貼り付けてください。
なお、tsfファイルは上から順番に再生するので貼り付ける位置に注意してください。
セリフの後にマップ表示コードを貼り付けるとセリフ終了後にマップが表示されます。

マップの表示位置の変更については中級編で説明してあるのでそちらを読んでください。

bg,26,7488,3744
3,0,シベリン,まずは基本となるキャラの表示方法とセリフの書き方だ。</n>”Chara:”から好きなキャラを選び、”Image”で表情を変更しよう。</n>”更新(F5)”ボタンを押せばこの画面に表示されるはずだ。</n>表情の種類は、実際に表示させてみて確かめるといい。


音楽(BGM)の再生 ページトップ▲

"BGM"タブを開き、File:から好きな曲を選ぼう。
曲のループ再生をさせたいときはループチェックボックスをONにしよう。

※今現在再生機能なし?
曲を聴くにはTalesweaverがインストールされているフォルダの./BGM/STREAM/の中にMP3が入っています。
通常C:\Program Files\Nexon\Talesweaver\BGM\STREAM\にあります。

bgm,44
bg,26,7488,3744
3,0,シベリン,まずは基本となるキャラの表示方法とセリフの書き方だ。</n>”Chara:”から好きなキャラを選び、”Image”で表情を変更しよう。</n>”更新(F5)”ボタンを押せばこの画面に表示されるはずだ。</n>表情の種類は、実際に表示させてみて確かめるといい。

中級編(直打ち) ページトップ▲

今現在エディタは開発途中のもので、多くの機能はメモ帳に直打ちしないと使うことができない。

ここで簡単にコマンドの形式について説明しておきます。
コマンドとは、命令のことで、文字、音楽、背景、etcなどさまざまな種類のコマンドが存在する。
コマンドにはいくつかのパラメーターが存在し、それらは「,」によって区切られる。(これをカンマ区切りという)

例としてセリフのコマンドを挙げる。パラメーターは左から順に、
キャラ番号,イメージ番号,キャラ名,セリフ
となっている。

2,1,ムスカ,"クハハハハハ! 見ろ!人がゴミのようだ!"


ここで注意してほしいのが、セリフを囲むように「"」(ダブルクォーテーション)がつけられている点だ。
文字列に半角スペースを含む場合は、必ずこのように「"」で囲う必要がある。

※書式で、"["と"]"でくくられた中のパラメーターは、省略可能という意味を示す。

セリフ ページトップ▲

イメージ:
書式:位置指定、キャラ番号,イメージ番号,キャラ名,セリフ
例:R,2,1,ムスカ,"クハハハハハ! 見ろ!人がゴミのようだ!"

BGM及び効果音(bgm、bgmloop、bgmstop、se命令) ページトップ▲

TalesweaverのインストールされているBGM\STREAMフォルダやSoundフォルダ内のファイルの再生を行う命令。
BGMとは "BGM\STREAM"内にあるmp3ファイルで、
効果音は"Sound"内にあるWAVファイルのことである。
ファイル番号とはファイルの名前に書かれた番号のことである。
例えば、"0000.mp3"の場合ファイル番号は"0"だ。
また、それぞれの命令でパッケージ内のファイルを再生できる。
BGMの場合はMP3形式、SEの場合はWAV形式のファイルを使用可能。

タイトル(title命令) ページトップ▲

ウィンドウタイトルを設定。
イメージ:
書式: title,タイトル名
例: title,ルシアンとおしっこ

ラベルとジャンプ(label、jump命令) ページトップ▲

書式: label,ラベル名
jump,ラベル名
例: label,hoge
jump,hoge

label命令自体は特に何もしないが、
jump命令でlabelに書いた物と同じ名前を指定することにより、
そのlabelの位置まで飛ぶ。labelは後述のselectでも使用。
ラベル名には半角スペースは使わない、なるべく半角英数。

使用例:



解説:

この場合、1行目のjump命令でlabel,endまで飛ぶので、イスピンは登場しない。

ラベル呼び出しとリターン(call、return命令) ページトップ▲

書式: call,ラベル名
return
例: label,hoge
return


必ず1対1で対応させる。
call命令はjump命令と似た機能を持つが、
違う点としてはjump命令が一方通行なのに対し、
callは飛んだ先でreturn命令があるとcallした位置に戻り、callの次の文から再開する
ネスト(callした先でさらに別のラベルをcall)可能だが、無限ループに注意。
サブルーチンと言えば分かる人には分かりやすい。

使用例:

1 jump,hoge
2 bgm,1
3 label,hoge

の場合、1→3と実行され2のBGMは再生されないが、

1 call,hoge
2 bgm,1
3 label,hoge
4 return

とすると、1→3→4→2と実行され、BGMが再生される。
(注・この場合2の次にまた3→4と実行されるが、callがされてない状態でのreturnは無視される)

選択肢(select命令) ページトップ▲

この命令はOSC Ver1.0b4で事実上廃止になりました。
OSC Ver1.0b4ではまだ使用できますが、今後仕様が変わる恐れがあります。
イメージ:
書式: select,問題文,1個目の選択肢,1個目のラベル名[,2個目の選択肢,2個目のラベル名,3個目の選択肢...]
例: select,ぼくおしっこと発言したことで有名なのは?,ルシアン,rusi,ボリス,boris

※書式の、"["と"]"でくくられた中のパラメーターは、省略可能という意味を示す。

選択肢とラベル名は1〜10個まで可能。

使用例:

select,ぼくおしっこと発言したことで有名なのは?,ルシアン,rusi,ボリス,boris
label,rusi
-1,0,,正解!
jump,exit
label,boris
-1,0,,ねーよwww
label,exit


選択肢(seljump,selcall命令) ページトップ▲

書式: seljump,問題文,1個目の選択肢,1個目のラベル名[,2個目の選択肢,2個目のラベル名,3個目の選択肢...]
selcall,問題文,1個目の選択肢,1個目のラベル名[,2個目の選択肢,2個目のラベル名,3個目の選択肢...]
例: seljump,ぼくおしっこと発言したことで有名なのは?,ルシアン,rusi,ボリス,boris
label,rusi
-1,0,,正解!
jump,exit
label,boris
-1,0,,ねーよwww
label,exit

※書式の、"["と"]"でくくられた中のパラメーターは、省略可能という意味を示す。

選択肢とラベル名は1〜10個まで可能。
seljumpは選ばれたラベルにジャンプし、
selcallは選ばれたラベルをサブルーチンとして呼び出す。
両者の違いはseljumpが一方通行で戻ってこないのに対し、
selcallは呼び出した先でreturn命令が使われるとselcallの次の行から再開する。
β3以前にあったselect命令はseljumpと同等の機能として動作するが、
今後selectの仕様が変わる可能性があるので使わない方がいいかも。

背景変更(bg命令) ページトップ▲

1.0β7で背景色指定はbgcolor命令に分割されたので注意。
イメージ:
書式: bg,マップ番号,X座標,Y座標
bg,ファイル名
例: bg,426,3680,2020
bg,background.jpg

 1つ目の用法はマップ画像を読み込み、表示する。
 マップ番号はTWのMapフォルダにあるファイルの番号を指す。
 XとY座標は画面の中心に来る座標を指定。

 2つ目と3つ目の用法は指定した色で背景を塗りつぶす。
 マップ画像が指定されていた場合も上書きする。
 2つ目はRGBを直接指定し、3つ目は色の名前を指定する。
 どちらもHTMLでの色指定とほぼ同じ方法(HTMLのカラーネーム147色が使用可能)。

左上に出てくるアレ(info命令) ページトップ▲

イメージ:
書式: info,表示文字列
例: info,[ 500seedと経験値を取得しました ]

文字列イメージ(txtimg命令) ページトップ▲

イメージ:
書式: txtimg,X座標,Y座標,文字列
txtimg,位置指定子,文字列
例:  


チャプの開始時に出る文字っぽい画像を表示する
指定方法は2種類で、前者は画面上の座標を指定
後者は大まかな位置を指定。使える指定子と位置は次の通り。 使用例:

txtimg,50,50,"Chapter1 . ぼくおしっこものがたり"
txtimg,UL,ネクソン・マジック!


待機命令(sleep命令) ページトップ▲


書式: sleep,待機時間(単位はms)
例: sleep,1000

ここで例として書かれているのは、1000ms、つまり1秒間の待機命令だ。

背景色指定(bgcolor命令) ページトップ▲


※OSC 1.0 Beta6よりbg命令に統合されました。
互換性のため現在でもbgcolor命令は使用できますが非推奨です。

OSC 1.0 Beta7でパッケージ内のファイルを指定できるようにした為、bg命令の色指定機能をbgcolor命令に分離

書式: bgcolor,#RRGGBB
bgcolor,色名
例: bgcolor,#0000FF
bgcolor,blue

背景色を設定する。
bgで背景絵が指定されていた場合、消去される。
方法は2つで、RGB指定する方法と、色の名前を指定する方法がある。
どちらもHTMLでの色指定とほぼ同じ方法(HTMLのカラーネーム147色が使用可能)。

以下のサイトでカラーコードを見ることができる。
[カラーコード/みんなのタグ辞典/HTMLタグ辞典]
[Color Table]

シーン名設定(scenename命令) ページトップ▲


書式: scenename,文字列
例: scenename,ここからずっと俺のターン!

セーブ時に保存される文字列。
この命令が実行された後にセーブするとセーブ名として使われる。
文字列内に変数組み込み可能。

変数操作命令(var,add,sub,mul,div,mod,inc,dec,rnd命令) ページトップ▲


書式: var,変数名,パラメータ
add,変数名,パラメータ
sub,変数名,パラメータ
mul,変数名,パラメータ
div,変数名,パラメータ
mod,変数名,パラメータ
inc,変数名
dec,変数名
rnd,変数名,パラメーター
例: var,nyanko,10000
 →nyanko変数に10000という値を格納する。
add,kuma,1
 →kuma変数の値に1を足す。
sub,nanka,hoge
 →nanka変数の値からhoge変数の値を引く。

 パラメータは整数値(-2147483648〜2147483647)を取る。
 var命令で変数を宣言、パラメータで指定した数値で初期化する(変数名 = パラメータ)。
 add命令は指定した変数にパラメータで指定した値で加算し格納する(変数名 = 変数名 + パラメータ)。
 sub命令は指定した変数にパラメータで指定した値で減算し格納する(変数名 = 変数名 - パラメータ)。
 mul命令は指定した変数にパラメータで指定した値で乗算し格納する(変数名 = 変数名 * パラメータ)。
 div命令は指定した変数にパラメータで指定した値で除算し格納する(変数名 = 変数名 / パラメータ)。
 結果が小数となった場合、小数点以下は切り捨てられる。
 mod命令は指定した変数にパラメータで指定した値で除算しその余りを格納する(C言語では 変数名 = 変数名 % パラメータ)。
 div,mod命令でゼロ除算が発生した場合、結果として0を返す。
 inc命令は指定した変数の値を1増やす。
 dec命令は指定した変数の値を1減らす。
 rnd命令はゼロからパラメータで指定した値-1の中からランダムで値を返す。
 つまりrnd,hoge,5ならhogeに0〜4のいずれかが入る。
 パラメータには変数組み込みが可能。
 
 
■変数が使用可能な命令(%がいらないもの)
・var,add,sub,mul,div,mod,rnd命令のパラメータ
・eval,ifjump,ifcallの式
・for命令の初期値と最大値
1.0β7から変数部分に式を書けるようになった。
(ex. var,hoge+1)

■変数が使用可能な命令(%がいるもの)
・テキスト表示のキャラ名とメッセージ部分
・title命令の文字列
・seljump,selcall命令の問題文部分(選択肢部分は未対応)
・info命令の表示文字列
・txtimg命令の文字列
・scenename命令の文字列
・print命令の文字列
変数は変数名を%で囲ったものを組み込む。
この仕様により上記の部分では%が文字として使えなくなったので、
%を表示させたい場合は%%と二回続けて書く。
(ex. title,明日晴れになる確率は%hare%%%です)
また、1.0β7から%内に式を書けるようになった。
(ex. ルシアン,今日のおしっこの回数は%count+1%です)

■%がいるかいらないかの簡単な覚え方
 画面に変数の内容を「表示」させたい場合は囲い、
 そうじゃない場合はいらない。
 

汎用変数操作(eval命令) ページトップ▲


書式: eval,式
演算子:
+加算
-減算
*乗算
/除算
mod商(余り)
=等しい
<>等しくない
<より小さい
>より大きい
<=以下
>=以上
:=代入
+=和の代入
-=差の代入
*=積の代入
/=商の代入
例: eval,a := 5
eval,b := a
eval,d := b * 3 + a
eval,result := d mod a = 0

 CやPascalライクな式を記述することができる。
 使用可能な演算子と優先順位は以下の通り。
  1位: *,/,mod
  2位: +,-
  3位: =,<>,<,>,<=,>=
  4位: :=,+=,-=,*=,/=
 基本的に優先順位の高い演算子から先に評価されるが、
 カッコを使うことで評価の順番を変えることができる。
 優先順位が同じ場合は左から先に評価される。
 "foo := bar = 1"のように比較演算子の結果を代入する場合、
 FALSEは0に、TRUEは1に変換されて代入される。
 反対にifxxxx命令で使う場合、0はFALSEに、それ以外はTRUEとして扱われる。
 また、代入式は値を持つ(ifxxxx,"y := x + 2",...とすることが可能)。
 ただし多重代入はできない※("a := b := 5"は無理)。
 ※この仕様は将来無くなる可能性がある。

条件分岐命令(ifjump,ifcall命令) ページトップ▲


書式: ifjump,条件文,TRUEラベル(,FALSEラベル)
ifcall,条件文,TRUEラベル(,FALSEラベル)
例: ifjump,%wahaa%>5,wahuu,wahoo
 →wahaa変数が5より大きければwahuuへ、じゃなければwahooへ
ifjump,&kuma&>%nyanko%,owata,ktkr
 →kumaがnyankoより多いならオワタ、違ったらktkr!
ifcall,%honnou%=%risei%,anzen,yabasu
 →本能と理性が釣り合ってるうちはいいけど均衡破れたらヤバス
ifcall,%nagato%=%orenoyome%,gachi,gachi
 →つまりどう足掻いても長門は俺の嫁

 ifjumpは条件文が真の場合、偽の場合にそれぞれTRUEラベル、FALSEラベルで指定したラベルへjumpする。
 ifcallはそれのcall版。
 FALSEラベルは省略が可能で、省略した場合に条件がFALSEとなった場合、各if文の次の行へ進む。
 この2つの命令は条件文の部分が特殊で、
 比較値1 比較演算子 比較値2
 と記述する。
 比較値はそれぞれ整数値を取るが、変数も指定できる。
 比較演算子は>,<,=,>=,<=,<>の6種類が使用できる。
 それぞれ、
  比較値1>比較値2(比較値1は比較値2より大きい)
  比較値1<比較値2(比較値1は比較値2より小さい)
  比較値1=比較値2(比較値1と比較値2は等しい)
  比較値1>=比較値2(比較値1は比較値2と等しいか、より大きい)
  比較値1<=比較値2(比較値1は比較値2と等しいか、より小さい)
  比較値1<>比較値2(比較値1と比較値2は等しくない)
 を表す。

立ち絵設置命令(setcg,clcg命令) ページトップ▲


書式: setcg,位置指定,キャラ番号,イメージ番号
setcg,位置指定,ファイル名
clcg,位置指定
パラメーター: [位置指定]
  R
    右に表示
  L
    左に表示
[キャラ番号]
  OSCエディタ参照
[イメージ番号]
  OSCエディタ参照
[ファイル名]
  パッケージ作成時に梱包するファイル名
例: setcg,R,1,0
clcg,R

 setcgで指定した位置に指定した立ち絵をセットし、
 clcgで指定した位置側の立ち絵を撤去する。
 テキスト表示命令での立ち絵はその命令内でしか有効ではないが、
 setcgでセットした立ち絵はこの命令以降の行でも有効となり表示される。
 例として、
  setcg,L,0,0
  ルシアン,ぼくおしっこ
  ルシアン,そろそろがまんのげんかいだ……
  ルシアン,アッー!
 と、
  L,0,0,ルシアン,ぼくおしっこ
  L,0,0,ルシアン,そろそろがまんのげんかいだ……
  L,0,0,ルシアン,アッー!
 は同じ表示になる。
 また、LとRをセットすれば両側にキャラを表示することも可能。
 パッケージ内の画像を使う場合は、setcg,位置指定に続いてファイル名を記述する。
 立ち絵として使えるのはビットマップ形式のファイルで、
 左上のピクセルが透過色として使用される。
 (ex.
  setcg,R,1,0
  setcg,L,charagraphic.bmp
  clcg,R
 )

条件分岐2(casejump,casecall命令) ページトップ▲


書式: casejump,式,数値1,ラベル1(,数値2,ラベル2,...)
casecall,式,数値1,ラベル1(,数値2,ラベル2,...)
例:
  casejump,n,1,wahaa,3,wahoo,default,wahee
   →この場合nの値が1ならwahaaラベルへ、3ならwahooラベルへ、
    どちらにも一致しなかった場合はdefaultのwaheeラベルへ移動します。
  casecall,n,0,wahuu,15,wahii
   →この場合nの値が0ならwahuuラベルが、15ならwahiiラベルが呼び出されます。
    どちらにも一致しなかった場合はdefaultがないので次の行へ進みます。

 式(普通は変数のみ)の内容を判定し、それが数値1ならラベル1へ、
 それが数値2と同じならラベル2へ・・・というように呼び出します。
 また、数値nの部分にdefaultと書くと、どの条件にも一致しなかった場合、
 defaultの部分に書かれたラベル名が呼び出されます。
 defaultが書かれていない場合でどの条件にも一致しなかった場合は次の行へ進みます。
 casejumpはjump版、casecallはcall版です。

ループ制御(for,next,break命令) ページトップ▲


書式: for,変数名,初期値,最大値
next
break
例: for,i,1,10
ifjump,%i%=9,true,false
label,true
break
label,false
next
 →for命令は変数iに1を代入し、10になるまで1ずつ増やしながらnextとの間をループするが、
  i=9の時点でtrueラベルに飛びbreakが実行されるため、
  その時点でループを抜けnext命令の次から再開することになる。
  なのでiは10になることはない。

 for-nextでセットとして使う。
 for命令で初期値で設定した値から最大値になるまで変数を1ずつ増やしながらループする。
 next命令は実際に変数を1増やしループさせる。
 break命令はfor-nextループを抜け、next命令の次から再開する。
 また、for-nextループ内でjumpやifjumpを使ってループ外に出ると色々とまずいのでしない。
 初期値と最大値には変数が使用可能。

デバッグ用出力命令(print命令) ページトップ▲


書式: print,文字列
例: print,"今のiの値は%i%だよ"

 OSC本体下部のエラーログ部分に文字列を出力します。
 デバッグ時の変数確認に使ったりなんか。
 文字列には変数が組み込み可能です。