ShiaSce

ShiaSce

概要

Shia専用のシナリオ記述形式です。
情景描写は他にまかせた、会話を基本としたドラマ的な対話基本政策をとってます。

難しい事を考える事なくに記述できるように作られています。

特徴

実はShiaMessageを並べてるだけです。

行単位で処理します。

好きなよーにファイルを分割しちゃって結構です。

接頭詞で文法解釈します。

TSBff:linesで記述するのがフツーですが
たぶんxmlでもできるはず。むしろ.datでいいかも。

文法

接頭詞によって文法表現を行います。
prefixname
explain
#コメント
#から始まるとコメントとして扱われ、その行は無視されます。
コメントは重要なので、マメにコメントをつけるといいでしょう。
[ShiaMessage/ObjectCall
ShiaMessageを発行します。
昔はSystemCallに対応させてObjectCallと呼んでいました。
[ShiaPath key:value key:value...
と表現します。

発行されたShiaMessageはShiaControllerにより各ShiaObjectsに伝達され
結果を返り値として返します。
@SystemCall
Parser、SceControllerで処理される命令です。
適当な値が返ってきます。
たしか数値演算もコレ使った気が。
{ / }制御文
「{」が制御文開始、「}」が制御文の終了を意味します。
また、制御文の多重化も可能です。(if文中でのif文など)

現状ではif文のみ利用可能で「{if state」〜「}」と記述します。
(bool)stateは@isequal等の比較系SysCallを使い
「{if @isequal( %abc , 0 )」の様にするといいでしょう。
$変数代入
$key value
と表現する事でkeyで示される変数にvalueを上書き代入します。

$global.key value
のように変数の所属をcommon、global、localから明示的に選択できます。
(選択されなかった場合はlocalになります。)

詳しくは変数の章を参照してください。
%変数呼出
「%key」と表現する事でkeyで示される変数の値を呼び出します。
変数代入と同様に、common、global、localを選択できます。
詳しくは変数の章を参照してください。
空文字空白文
接頭詞どころか、文字を1つも含まない空行だった場合、
その行は空行として無視されます。
その他通常文
接頭詞が見つからなかった場合は通常文として処理されます。
通常文はShiaStdoutへ送られ、良きに計らわれます。

文末に「 | 」を加えた後、「 key:value 」形式の引数をスペース区切りで複数つける事ができ、
また引数に画像、声、キャラなどの情報を含ませる事により簡単に複数の効果を記述できます。

変数型

ShiaSceには「変数の型」というものは存在せず、
すべての変数・引数は文字列として扱われます。

ですが、まぁ、それだと不便なので
この型として表現できます、という意味で型もどきを存在させてあります。

で、それの一覧。
typeexplain
str文字列
bool正負値
正を表すyes/1/true、負を表すno/0/falseを利用できます。
標準はyes/noです。
num数値
マイナス有効な整数値です。
float浮動小数点値
小数点を含める事ができる数値です。マイナス有効です。
fileファイル
拡張子省略可なファイルパスです。
point座標 (x,y)
size面積 (width,height)
rect領域 (x,y,width,height)
typeexplain

SystemCall

システムコールはSceEngineレベルで処理される命令群です。
SysCallargexplain
定数系
shiaVersion-(num) 紫亜の実装バージョンを返す
tsbffVersion-(num) TSBffの実装バージョンを返す
shiaOS-(str) 実行中のOS名を返す
windowSize-(size) 実行中のウインドウサイズを返す
runningLine-デバッグ用:(num) 実行中の行番号を返す
runningScenario-デバッグ用:(num) 実行中のシナリオ名を返す
シナリオエンジン系
quit-終了する
reboot-再起動する
userchoice(str)msg,(str)b1,[(str)b2,(str)b3](num) 選択肢アラートを表示する
msgはメッセージ、b1,b2,b3は選択。b2,b3は省略可能。
ボタンに対応した1〜3の数値を返す
beep-システムビープを鳴らす
runSceAsChild(file)pathシナリオファイルを子として実行する
runSceAsReplace(file)pathシナリオファイルを自分と置き換えて実行する
比較系
isEqual(num)v1,(num)v2(bool) v1 == v2
isNotEqual(num)v1,(num)v2(bool) v1 != v2
isNEqual(num)v1,(num)v2(bool) v1 != v2
isLarger(num)v1,(num)v2(bool) v1 > v2
isSmaller(num)v1,(num)v2(bool) v1 < v2
isMoreThan(num)v1,(num)v2(bool) v1 >= v2
isLessThan(num)v1,(num)v2(bool) v1 <= v2
reverse(bool)b(bool) !b
bitand(bool)b1,(bool)b2(bool) b1&&b2
bitor(bool)b1,(bool)b2(bool) b1||b2
bitxor(bool)b1,(bool)b2(bool) b1^b2
execAsCExpression(str)v(?) vをC言語の式として評価した結果を返す
文字操作系
appendedString(str)s1,(str)s2,...(str) 連結した文字列
charAt(str)s1,(num)n1(str) s1のn1個目の文字
stringFrom(str)s1,(num)n1(str) s1のn個目からの文字列
stringTo(str)s1,(num)n1(str) s1のn個目までの文字列
stringAt(str)s1,(num)n1,(num)n2(str) s1のn1個目からn2個目までの文字列
数値演算系
plusAsInt(num)n1,(num)n2(num) 整数値としてn1+n2を計算した結果
minusAsInt(num)n1,(num)n2(num) 整数値としてn1-n2を計算した結果
変数操作系
delVar(str)s1s1で示される変数を削除
isThereVarNamed(str)s1s1で示される変数が存在するか
SysCallargexplain