らくだ屋/里々から華和梨への移行ガイド

里々から華和梨への移行ガイド。里々に慣れていれば華和梨の習得は簡単なんですぜ


 

なぜ移行するのか

  • 同時に3体以上のキャラを使う
  • 自動ウェイト挿入や頭に挟まれるサーフェス戻し、自動改行が邪魔
  • 記述内容を一行にしたい、コンパクトにまとめたい、スリムにしたい
  • さくらスクリプト主体でトークを書きたい
  • 一度設定した変数は必ず保存されてめんどい
  • 命令が全角半角入り混じっていて覚えにくい

こういうとき里々はキツい。管理はできなくはないけど超めんどくなる。
なら里々と表記ルールの近い華和梨がオススメよ、というのが本文の主旨。

 
 

このガイドを読むにあたって必要なもの

  • 里々の使用経験
    • 内部関数やssu、SAORIの基本的な使い方までは知っておきたい
  • 栞イベントの実装経験
    • OnBootとかOnGhostChangedとリファレンス、(R0)とか(R1)が分かっていればOK
 

里々の特殊性の理解

  • 華和梨に限らず基本的に全角数字は演算や計算に使えない
    • 全角は文字列としてならともかく計算は不可。数字は半角で扱うクセを
  • トークは さくらスクリプト が全ての基本
    • トークの終わりには必ず \e を
    • 里々は辞書で書いた改行がそのままトークでも改行になる(自動的に \n に置換される)が、里々以外の栞は辞書で書いた改行はトークに反映されない
 

華和梨の基礎用語

  • 【エントリ】
    • 変数のこと。使い方も意味もまったく同じだと考えてOK
    • 文もトークも単語群も書ける
  • 【kis】
    • Kawari Inline Scriptの略
    • 華和梨内部に組み込まれているsaoriみたいなもので、里々でいう内部関数&ssu
  • 華和梨がシステム的に使う文字
    • 里々が全角かっこ【()】で囲まれた変数を呼び出して置換されるように、華和梨も幾つかの文字が「そのままでは」使えません。
      • 【,】 半角コンマ。単語の区切り。
      • 【:】 半角コロン。エントリ定義文につかう。
      • 【${}】 エントリ呼び出し。
      • 【$[]】 演算式。この間は改行やタブが使い放題。
      • 【$()】 kis。この間は改行やタブが使い放題。
      • 【()】 ブロック。この間は改行やタブ、半角コロン【:】、半角コンマ【,】が使い放題。
      • 【""】 エスケープ。クォート文字使用。
    • 順次説明していきます。
 

華和梨の表記ルールの要点

里々との違いから学ぶ華和梨の基本

基本トーク

#---- 里々でこう書いたものは

*OnBoot
>起動

*起動
:(0)ちゃす。
#---- 華和梨ではこう書く

OnBoot : ${起動}

起動 : \0\s[0]ちゃす。\e
  • 違いは、里々の > が ${} に置き換わっていて、 # や数字が半角になってるだけ
 

基本単語

里々

*食べ物のトーク
:(0) 昨日、(おかず)がなくてさー。
:(10)……。

@おかず
納豆
カレー
うなぎパイ

華和梨

食べ物のトーク : \0\s[0]昨日、${おかず}がなくてさー。\1\s[10]……。\e

おかず : 納豆 , カレー , うなぎパイ
  • この二つの例で華和梨の記法の基本はだいたい揃っとります
  • 半角コロン【:】の前がエントリで、後ろが単語になっているのが特徴
  • 基本的に一行で済ませる、途中で改行を入れるとエラー
  • 里々では単語表記を * や @ と分けているが、華和梨はコンマで単語も文も区切って登録できるので、使い分ける必要がない
 

単語の書き方

  • 単語群の書き方の派生形
  • 下の例はどれを書いても一緒
おかず : 納豆
おかず : カレー
おかず : うなぎパイ
おかず : 納豆 , カレー
おかず : うなぎパイ
おかず : 納豆 , カレー , うなぎパイ
 

こうしたらどうなるの?的な例をチェック

展開の展開の展開の、、、

  • 展開先のエントリもさらに展開される
トークする : ${sentence}

灼熱のファイヤーダンス : \0\s[5]コンパイルっ!\e
sentence : ${Track.1}
Track.1 : ${灼熱のファイヤーダンス}

トークする の実行結果

さくら「コンパイルっ!」

 

単語の単語の、、、

  • 一つのエントリの中に複数の単語があっても展開に不備は起こらない
Aトーク : スマブラしよう。
Aトーク : テトリスしよう。
Aトーク : ドリラーしよう。
Bトーク : 寝る。
Bトーク : 眠い。
Cトーク : でかける。

トークえらび : ${Aトーク} , ${Bトーク} , ${Cトーク}

トークする : \0\s[0]${トークえらび}\e

トークする の実行結果

さくら「スマブラしよう。」  ※確率により変化

 

重ねたらどうなる?(入れ子)

  • 里々と同じく、華和梨でも内側にあるものから展開される
  • 利用価値が高いので書き方と使い方を覚えておくと便利です
今日の機嫌 : まあまあ

トークする : ${トーク.${今日の機嫌}}

トーク.まあまあ : \0\s[5]ハウルの動く尻って映画見てきたよ!\1\s[11]……!\e
トーク.それなり : \0\s[0]部屋に篭ってゲーム漬け。\1\s[10]いつも通りやね。\e
トーク.さいあく : \0\s[0]……。\e

トークする の実行結果

さくら「ハウルの動く尻って映画見てきたよ!」

うにゅう「……!」

 
 

( ~ ) ... ブロック

半角かっこを使った記法。

  • 見づらいから一行で収めたくない時に。この中では改行やタブの他、コロン【:】やコンマ【,】を文字列として自由に使うことができます。
食べ物のトーク : (
	\0\s[0]昨日、
	${おかず}が
	なくてさー。
	\1\s[10]……。
	\e
)
  • 華和梨はタブを文字列として認識しないのでこういった複数行に渡って書ける場所ならば適度に使いましょう
 

ブロックで単語を書くときは?

  • 既に説明した通り、上のルールを単語を書くときコンマ【,】は普通の文字として使えます。逆に言えば、この中では【,】を単語区切りに使えません。従って、以下のように書くと・・・
おかず : (
	納豆 , カレー , うなぎパイ
)

さくら「と。

昨日、納豆 , カレー , うなぎパイがなくてさー。」

うにゅう「……。」

  • とか喋りやがることに。
  • この場合、括弧を一度閉じてから【,】で区切るしかありません
おかず : (
	納豆
	) , (カレー) , (
	うなぎパ
	イ
)
  • 見た目は色々変だけど大丈夫。ただここまでするなら単語定義にブロック表記を使わないほうが無難
 

エントリ登録時の特殊ブロック表記

  • この表記はコロン【:】を使わずにエントリを定義する記法で、通常ブロックと似てる部分が多いためややこしいですが完全に別物です
  • 文章を省略できる性質上、関数定義とかでよく使われます
  • 普通はあえて使うまでもない(というか逆に華和梨のルールが覚えづらくなる)ので、こういう書き方もできるということだけ…
おかず (
	納豆,
	カレー,
	うなぎパイ
)
  • 改行し放題、前後の半角スペースやタブ文字を無視する、は共通
  • 違うのはコンマ【,】が単語区切りに使えるという点。どうにもややこしい。ひとまず忘れてOK
 

" ~ " ... エスケープ

ダブルクォーテーションによるエスケープ

  • ダブルクォーテーション【"】でくくった部分は、通常は使うことのできない文字が含まれていても文字列として扱えるようになる
  • 里々におけるφと似たようなもの
  • ポイントとして、「何がなんでも」文字列にするので、普段は華和梨が勝手に処理してしまって使えない${}や$[]、()、コンマまでも全て文字列として使えるということ。

\![change,ghost,ゴースト名]

  • このさくらスクリプトにはコンマが含まれているので、そのまま書いても

\![change

ghost

ゴースト名]\e

  • の、3つの単語として分割して解釈されてしまう
  • そこでダブルクォーテーションの出番
ランダムチェンジする : \![change","ghost","random]\e
ランダムチェンジする : \!["change,ghost,random"]\e
ランダムチェンジする : "\![change,ghost,random]\e"
  • こんな感じで、コンマをダブルクォーテーション内に収めると、コンマが文字列として無事なままベースウェアに送られ、無事に実行してくれる
 
  • もちろんブロックを使うのもあり。
ランダムチェンジする : (
	\![change,ghost,random]\e
)
  • ブロックの中では、コンマやコロンを文字として扱ってくれるのは説明した通りです。
  • ちなみにここからさらにダブルクォーテーションでくくってもOKなので、「常にダブルクォーテーションでくくらないと落ち着かないぜ」という人も安心して下さい
 

ダブルクォーテーションで ${} をくくると?

  • 当然、エントリを呼ばずに文字列になります。つまり…
トークする : "\0\s[7]地球のみんな!オラに${パワー}を分けてくれ!\e"

パワー : 元気 , 太陽光 , ぱんつ

トークする の実行結果

さくら「地球のみんな!オラに${パワー}を分けてくれ!」

  • 文字列になってしまうので、${パワー}エントリは展開されず、そのままトークに反映されてしまうというわけ
  • 特にさくらスクリプト内にエントリ呼び出しを使う場合は気を付けましょう
 

ダブルクォーテーションは文字列にできる?

  • もちろん可能です。そのための第二のエスケープも用意されています。
トークする : \0\s[0]ダブルクォーテーションを出力 → '"' \e
トークする : \0\s[0]ダブルクォーテーションを出力 → \" \e

トークする の実行結果

さくら「ダブルクォーテーションを出力 → " 」

 

$[ ~ ] ... 演算式

  • 華和梨では、四則演算(加減乗除、+-×÷)、比較演算、ビット演算が可能です。
 

里々と華和梨の違いから学ぶ計算式

里々の場合

*トークする
$計算結果=1+1
:(0)1足す1は、(計算結果)。

華和梨

トークする : \0\s[0]1足す1は、${計算結果}。\e

計算結果 : $[ 1 + 1 ]

縮めると

トークする : \0\s[0]1足す1は、$[ 1 + 1 ]。\e
  • 一目瞭然ながら $[] で囲まれた部分が演算式です
  • 特徴と注意は下記の通り。
    • 数字と演算子は半角しか使えない
    • $[] に囲まれた部分であればいくら改行やタブ、半角スペースを入れても大丈夫
    • 一般的な数学のルールが成り立ち、+ - より * / が優先、かっこはさらに優先となる
 

色々な書き方

  • 上の注意点に則っているので以下のような書き方をしてもエラーにはならない
$[(1+1)*2]
$[      100 % 3           ]
$[ ${お前のものは} != おれのもの ]
$[ ${気温} < 10   ]
  • いずれの場合にしても、$[ から ] までの部分が計算結果に置き換わるので、覚えておきましょう。
 

中身消滅にご用心

  • 0で割る、もしくは空っぽ(のエントリ)と乗算や除算をする等をすると、その式の結果は空っぽ(消滅)になってしまう。計算式中にエントリを用いている時に注意
トークする : \1わいは$[ ${クッキーの数} / 2 ]つ貰うで。\w9\e
クッキーの数 : ""

トークする の実行結果

うにゅう「わいはつ貰うで。」

 

$( ~ ) ... kis

  • Kawari Inline Script 略して kis
  • 使う上で外せない華和梨の生命線で、saoriを使う場合もkisを使って呼び出します
 
  • 誤解を恐れずに書いてしまうなら里々にとっての内部関数&ssu = 華和梨にとってのkis
    • 違い
      • ssuは里々に付随する単体のSAORI(さおりなので登録が必要)
      • kisは華和梨に最初から組み込まれている
 

里々と華和梨の比較から学ぶkis「set」

  • 以下の結果になるものを作る
  • ここでは里々の内部関数と華和梨のkisに共通して存在する「set」コマンドを使用

トークする の実行結果

さくら「うー、宿題がどっさりだ。」

里々

*トークする
:(set,宿題量,どっさり)(0)うー、宿題が(宿題量)だ。

華和梨

トークする : $(set 宿題量 どっさり)\0\s[0]うー、宿題が${宿題量}だ。\e
  • $() で囲まれたものがkis
  • 里々のsetではコンマで区切っていたのに対して、華和梨のkisは半角スペース【 】で区切っている事に注意
  • 間違えないように
 

半角スペースが区切りということは

  • 半角スペースが区切りであるという事は。。。
*トークする
:(set,今の心境,み な ぎ っ て き た)(7)(今の心境)ー!!
  • 上の例のように、セットしたい文字列に半角スペースが含まれている場合がくせもの
  • 里々のこれを華和梨で実現するからといって、単純に
トークする : $(set 今の心境 み な ぎ っ て き た)\0\s[7]${今の心境}ー!!\e
  • こんな風に書くのは厳禁。変な結果が戻ってきます
  • じゃあどうするかといえばダブルクォーテーションの出番、これで半角スペースも文字列です
トークする : $(set 今の心境 "み な ぎ っ て き た")\0\s[7]${今の心境}ー!!\e
 

里々と華和梨の比較から学ぶkis「if」 その1

  • これも里々のssuに共通して存在するコマンド「if」こと条件分岐
  • 華和梨を使う際、setなどと並んで最も多用すると思われるkis

共通前提条件

変数「満腹度」 = 10

変数「満腹度」が20以下でトークが分岐する

トーク の実行結果

さくら「う~、はらへった。」

里々

*トーク
:(0)う~、(if,(満腹度)<20,はらへった。,まだ我慢。)

華和梨

トーク : \0\s[0]う~、$(if $[ ${満腹度} < 20 ] "はらへった。" else "まだ我慢。" )\e
  • いきなり $() $[] ${} の三種類が複合する厄介なもの……かと思いきや解読するとなんてこともない
  • 色をつけて見やすくしてみると、
    • \0\s[0]う~、$(if $[ ${満腹度} < 20 ] "はらへった。" else "まだ我慢。")\e
  • 構造は里々の例とそっくりさん
    • 里々  ... (if , 条件式 , 条件があってた時の文 , 間違ってた時の文
    • 華和梨 ... $(if 条件式 条件があってた時の文 else 間違ってた時の文)
  • すごく、、、にています
  • 里々の「間違ってた時の文」が省略できるように、華和梨の「 else 間違ってた時の文」も省略可
  • 条件式には、ここでは比較演算式を使っているので、演算式で説明した通り $[] を使う。もちろん 0 とか 1 になるならkisとかを使ってもOKです。一般的なプログラミングの常識が通用します
  • 里々のifを使えるのであればこちらもすぐに使えるはず
 

里々と華和梨の比較から学ぶkis「if」 その2

  • 里々で有名なif(条件分岐)といったら外せないコレ↓
*トークする
>だが断る	(好感度)<100
:(5)おっはー。
:(10)古っ…。

*だが断る
:(7)やなこった!
  • これを華和梨で似たような表記として再現するのは不可能なので
  • 少し砕く
トークする : $(if $[ ${好感度} < 100 ] ${だが断る} else ${あいさつ} )\e

あいさつ : \0\s[5]おっはー。\1\s[10]古っ…。
だが断る : \0\s[7]やなこった!
  • 前の例のようにそのまま文を書いてもいいけど、こうしてエントリを使った方が見やすくなる
  • ポイントとして、この例のifの後には \e がある。これで、${あいさつ} や ${だが断る} の中で \e を書き忘れても大丈夫
 

kisまとめ

  • 当然、全部を覚える必要はないので、暇な時ににらめっこして「やべぇこれ使ってみよう」とか、必要になった時、探すくらいで充分です
 

kisの補足みたいなもの、練習みたいなもの

#---- 単語を設定するkis
$(set caramel ウッウーウマウマ)

#---- 文字数をかぞえるkis
$(length ${caramel})
  • マニュアルを読んでいると、「kisにはエントリ名を ${} でくくったり、くくらなかったりするものがある」ことに気付くはず。この例だと、setのほうは「caramel」とそのまま書いているのに、lengthのほうは ${caramel} 。この違いは何か?
    • まずkisをざっくり分類
      • 1 ... エントリ名を指定して、そのエントリを操作・参照・編集・調査などをするもの
      • 2 ... 文字列を指定して、その文字列を操作・参照・編集・調査などをするもの
      • 3 ... それ以外、構文コマンドとか
      • 4 ... それ以外、わけのわからないもの
    • マニュアルのコマンド一覧にある「辞書操作」のkisは1、「文字列操作」のkisは2に該当
  • 1に書くkisのエントリには ${} を使わない。エントリを直接どうこうするkisなので${}を省略します
  • 2に書くものは文字列なので、エントリの中身を使うなら ${} を使います
 
 
  • 挙動の例題
トークする : $(set ${空模様} ${天気予報})\0\s[0]うーん…${今日の天気}。\e

空模様   : "今日の天気"
天気予報 : "どんより曇り"

トークする の実行結果

さくら「うーん…どんより曇り。」

  • 答え
    • ${空模様} が 今日の天気 になる
    • ${天気予報} が どんより曇り になる
  • 結果
$(set "今日の天気" "どんより曇り")
  • になる
  • すなわち、${今日の天気} エントリに「どんより曇り」が代入される
 

エントリ名に使える文字

  • エントリ名に使える文字を列挙しておきます
    • 全角文字
    • 英数字【A~Z a~z 0~9】
    • アットマーク【@】
    • クエスチョンマーク【?】
    • ピリオド【.】
    • アンダーバー【_】
 

華和梨ではとても身近にある「配列」

  • 難しい名前ですが、要するに同じエントリの何番目の単語を呼び出すかという方法
おかず : 納豆 , カレー , うなぎパイ

トークする : \0\s[0]えー!? また$おかず[0]なの!?\e

トークする の実行結果

さくら「えー!? また納豆なの!?」

  • この例では2つの疑問が浮かんだはず
    • 今までエントリの呼び出しは ${} だったのに、ここでは何故か {} だけ消えてる
      • {} のないこの単語呼び出しは、配列で呼び出す時の専用の表記の仕方
      • 特殊な書き方なので違和感あるかも知れませんが、そういうもんだと思って
    • うしろに [0] とかついている
      • [0] とは配列を示す番号のこと。「この単語群の中の、●番目の単語を呼べ」という意味になる
      • この番号は0から始まるので、先頭1番目の単語なら[0]、2番目の単語なら[1]という具合

この例では、

$おかず[0] → 納豆

$おかず[1] → カレー

$おかず[2] → うなぎパイ

ってわけで
この書き方を使えば、単語をランダムでなく選んで呼び出せる

  • ちなみに、この配列番号は先頭から順に割り振られるので、以下のどっちの表記をしても、やはり配列の番号は 0=納豆 1=カレー 2=うなぎパイ になります。
おかず : 納豆 , カレー , うなぎパイ
おかず : 納豆
おかず : カレー , うなぎパイ

ちょっとしたまとめと補足

  • 里々は単語・内部関数・ssu・SAORIを全て () で済ませていたけど、華和梨では3つに分かれている
    • ${} ... 単語群(エントリ)の呼び出しと展開。エントリが存在しない時は空っぽが返ってくる
    • $[] ... 演算式。演算結果へと置換される。この中は改行や半角スペース入れ放題
    • $() ... kis。戻り値へと置換される。この中は改行や半角スペース入れ放題、区切りも半角スペース
    • () ... ブロック。この中は改行や半角スペース入れ放題。さらに区切り文字であるコンマやエントリ識別のコロンもクォート等でエスケープすることなく使える
  • いずれも、内側にあるものから順に展開
  • 注意しなければならないのは、括弧の閉じ忘れそして閉じる括弧記号の間違いで、たった一つミスがあるだけで挙動不審になるということ
 
  • 華和梨が「半角スペースを文字列として認識しない」箇所
    • コロン【:】の前(エントリ名のあと)
    • コロン【:】の後(単語の直前)
    • コンマ【,】の前後
    • 文の末尾
    • $[] 、 $() の中
  • 以上の条件ならば入れ放題
おかず                 :                 納豆
おかず:カレー        ,うなぎパイ
今の心境     : "み な ぎ っ て き た"
セッティング : $(set             好感度     
       9999     )

トークする : (
\0\s[0]$おかず[0]! $おかず[1]!
 $おかず[2]!\n
${今の心境}! ${セッティング}! ${好感度}!
)

トークする の実行結果

さくら「納豆! カレー! うなぎパイ!

み な ぎ っ て き た! ! 9999!」

  • んま入れ放題ってだけでこんな使い方はしません。。。
 

栞イベントのリファレンス値はどうやって参照すんの?

  • ゴースト制作においてとても重要。必須項目
  • 結論から言えば華和梨ではイベントが通知されるごとに ${System.Request.Reference●} に格納されます

栞イベント: OnOtherGhostClosed

(SSP専用イベント。他のゴーストが終了した時に通知)

リファレンス0 = 終了したゴーストの名前

里々

*OnOtherGhostClosed
>(R0)が終了した

*Emilyが終了した
:(5)あ、お芋みっけ♪

華和梨

OnOtherGhostClosed : ${${System.Request.Reference0}が終了した}\e

Emilyが終了した : \0\s[5]あ、お芋みっけ♪
  • つまり栞イベントが来ると ${System.Request.Reference●} エントリにリファレンス情報が格納されているという事
  • 数字の順番も(全角と半角の違いはあれ)里々の時と同じ

余談ですが、上の書き方はエントリ名として使えない文字が含まれているゴーストには対応できません。対応例ではないので注意。

 

リファレンスが長くて書きづらい!

  • めんどくせえなあこうしちまえばいいじゃんよ
R0 : ${System.Request.Reference0}
R1 : ${System.Request.Reference1}
R2 : ${System.Request.Reference2}
R3 : ${System.Request.Reference3}
R4 : ${System.Request.Reference4}
R5 : ${System.Request.Reference5}
R6 : ${System.Request.Reference6}
R7 : ${System.Request.Reference7}
R8 : ${System.Request.Reference8}
R9 : ${System.Request.Reference9}
  • こういう書き方ができるのも華和梨の特徴。よって、

里々のこれは

*OnMouseDoubleClick
>(R3)(R4)つつかれ
(ランダムトーク)

*0Bustつつかれ
:(7)さわんなタコ!!

華和梨ではこうなる

OnMouseDoubleClick : $(entry ${R3}${R4}つつかれ ${ランダムトーク})

0Bustつつかれ : \0\s[7]さわんなタコ!!\e
  • ※補足
  • kisコマンドのentryは指定したエントリを呼ぶkisで、該当エントリが存在しない場合、もしくは中身が空っぽの場合にArg.1の文(エントリではない事に注意)を呼ぶ
  • 挙動としては里々の > に非常に近い
  • ここでは ${R3}${R4}つつかれ というエントリが見つからなければ ${ランダムトーク} を呼ぶという意味になり、この場合はつつかれ反応のないところをダブルクリックすると、ランダムトークをするという理屈
 
 

続き→ らくだ屋/里々から華和梨への移行ガイド・ミドルウェア使わない編


リロード   新規 編集 凍結 差分 ファイルUp コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ   ヘルプ
feed rss feed rdf feed rss20 feed lirs emily4 inside marble note
Last-modified: Thu, 30 Dec 2010 21:20:07 JST (2372d)