這是一個翻譯中的詞條,歡迎有興趣的朋友加以補完。

里々からYAYAへ移行する

主に里々しかSHIORI使った事がないけどYAYAも使ってみたい!という人向けの説明です。
タイトルに「☆」がついている項目は「はろーYAYAわーるど(紺野ややめ)」や「SimpleYAYAテンプレート」などのテンプレートじゃないと使えないかもしれません。

はじめに

里々からYAYAにする利点

プログラミング的な事をするのに強いので、ゴーストのトーク以外の部分がごちゃごちゃしてきて書くのが面倒な場合楽になります。
でもそれは特にYAYAだけに限った特性ではなく、華和梨という選択肢もあります。
更新が停止していても良い(もし不具合があっても修正が望めない)なら更に選択肢は広がります。
自分で使いやすそうなSHIORIを選ぶのが良いでしょう。

YAYAにはファイル操作ができる、正規表現が使えるなどの特徴もありますが、他のSHIORIでもSAORIを使えばできますし、 YAYAasSAORIでYAYAをSAORIとして使っても全く同じ事ができます。
つまりそれだけを目当てにしてYAYAを選択する必要はありません。

注意点

準備しておいたほうがよいもの

テキストエディタ
エディタ色分けファイル?と一緒にインストールしておきましょう。拡張子.dicのファイルを開くと色分けされるように設定しておくととても便利。
テンプレートゴースト
StartUp/YAYAでゴーストを作る?から自分に合ったものを。前述したようにほぼ必須。

YAYAの辞書を書いてみる

起動イベントで例を出してみます。

基本

里々ではこう書いていました。
YAYAでは以下のように書きます。

なんかよくわからない記号が色々ありますが、一つづつ見ていきましょう。

OnBoot
最初に書く起動イベントを表す名前。このへんは里々と同じです。YAYAでは関数名と呼んだりします。
CROW・SSPリファレンス - Shioriに書かれてるイベント名はどれもYAYAでそのまま書けます。
「起動」「終了」「初回」などの日本語のイベント名は里々独自イベント名のため、YAYAで使ってもそのままでは呼び出されません。
{ }
イベント名を書いたのあと、イベントの中身をこの二つの記号でくくります。
YAYAでSHIORI Eventを書く時は必ず「イベント名{イベントの中身}」です。
ちゃんと囲まないとエラーが出てゴーストが起動しなくなってしまいます。
" "
トークなど、文字列は必ずこの記号でくくります。
里々と違い、これでくくらない文字は変数名や関数名だと思われてしまいます
ちなみに「" "」の変わりに「' '」でくくると中にある変数が展開されません。普段は「" "」でOK。
\0
「これから0番キャラ(さくら側)がしゃべったり表情変えたりするぞー」という意味のさくらスクリプト。
この後に書いたテキストはさくら側のバルーンに表示されます。うにゅう側にしゃべらせたくなったら\1。
里々ではこの二つの切り替えを「:」のみでしています。
\s[0]
0番サーフェスを表示するさくらスクリプト。里々で(0)と書いていたもの。
里々では最初の(0)は省略できましたが、YAYAではこれを入れないとトークをする前のサーフェスがそのまま表示されてしまいます。
\e
トークの終了を表すさくらスクリプト。入れなくても特に問題はないようですが一応トークの最後に入れておきましょう。

ちなみに里々と違い自動でウェイトはつきません。入れたい場合はさくらスクリプトで入れてください。 さくらスクリプトはYAYA以外のSHIORIでも共通して使うものなので、このWikiでは説明していません。
これ以外も色々あるのでリファレンスサイトで実際に使いたいものだけ、ちょっとづつだけでも良いのでYAYAといっしょに覚えてみてください。

最初にイベント名を書く、中身を「{}」でくくるなどの書き方のルールがちゃんと合ってればこんな風に書いても

OnBoot {
"\0\s[0]いっちばーん。\e"
}

こんな風に書いちゃっても構いません。

OnBoot { "\0\s[0]いっちばーん。\e" }

OnBootと{の間などにある空白・改行は、入れても入れなくても大丈夫。タブをいれてもOK。
自分の見やすい、書きやすい書き方を選んでください。

OnBoot{"\0\s[0]いっちばーん。\e"}

基本的に""の外にある空白やタブ、改行は無視されるので、

OnBoot
  {
   
     "\0\s[0]いっちばーん。\e"
 
           }

こんなんでもよし。
要するに

【ここ】OnBoot【ここ】{【ここ】"\0\s[0]いっちばーん。\e"【ここ】}【ここ】

上の【ここ】の所に空白(半角空白、全角空白、タブ)や改行をいくらでも入れられるっていう訳です。

YAYAはこの仕組みを使って辞書を自由に整える事ができます。
これが里々より辞書の見通しが良いと言われる理由の一つです。

改行する

里々では辞書の中の改行がそのままトークの改行になりましたが、YAYAではさくらスクリプトを使って改行しないとバルーンに表示された時改行になりません
改行したい部分に「\n」をいれてください。

「これじゃあ辞書の中で改行になってなくてわかりづらい!」…と思う方は

OnBoot
{
 "\0\s[0]改行\n/
 します。\e"
}

こうやって行末に「/」を入れれば改行できます。
好きな位置に入れてつかいましょう。

OnBoot
{
 "\0\s[0]/
 改行\n/
 します。/
 \e"
}

" "や' 'でくくってあるところを末尾に「/」を入れないで改行してしまうとエラーになってしまうので気を付けてください

単語や文章をランダムで選ぶ

里々では同じイベントをたくさん書くとその中からランダムで選ばれました。

*OnBoot
:こんにちはー。

*OnBoot
:おっすー。

*OnBoot
:やっほー。

が、YAYAでこれをやるとエラーが出て起動しなくなります。
YAYAは同じイベント名のイベントを二つ以上書けません。

代わりにこんな風に、{ }の中で" "を改行区切りで並べましょう。

OnBoot
{
 "\0\s[0]こんにちはー。\e"
 "\0\s[0]おっすー。\e"
 "\0\s[0]やっほー。\e"
}

YAYAは{ }の中に" "や' 'でくくった文字列が複数あると、その中のどれか一コだけランダムで選びます

改行の代わりに「;」区切りにすると一行にまとめることもできます。

OnBoot
{
 "\0\s[0]こんにちはー。\e" ; "\0\s[0]おっすー。\e" ; "\0\s[0]やっほー。\e"
}



\0\s[0]や\eを何度も書くのが面倒という人は

OnBoot
{
 "\0\s[0]"
 --
 "こんにちはー。"
 "おっすー。"
 "やっほー。"
 --
 \e
}

こう書いてしまう事もできます。
「--」で区切ると、その区切った中からそれぞれ" "や' 'でくくった文字列がランダムで1コ選ばれ、くっつけて表示されます


ちょっとわかりづらいので例を出して説明。

てんき
{
 "きょうは"//←<1>この2つのどっちかが選ばれる
 "明日は"//←<2>
 --
 "晴れ"//←(1)この4つの中のどれかが選ばれる
 "雨"//←(2)
 "曇り"//←(3)
 "雷"//←(4)
 --
 "です。"//←1コしかないので必ずコレが選ばれる
}

こう書くと
「きょうは雨です。」
「明日は曇りです。」
「きょうは晴れです。」
「明日は雷です。」
「明日は晴れです。」
…といった文章が呼び出すたびランダムで作られるわけです。

ランダムなので同じ単語が連続して選ばれる事もあります。
ここで「あれ?里々みたいに重複回避ってできないの?」と疑問にお思いの方も出てくるかもしれませんが、できます。

OnBoot : nonoverlap
{
 "\0\s[0]"
 --
 "こんにちはー。"
 "おっすー。"
 "やっほー。"
 --
 \e
}

イベント名の後ろに「 : nonoverlap」をつけてください。同じ文が連続して選ばれなくなります。
上から順番に選ばせたい時は「 : sequential」です。

ちなみに、里々ではこんな風に書くことにより別な場所に書いてある単語群をトークに呼び出す事ができますが

*
:(季節)はいいね~
:どの季節でも言ってるジャン
@季節
春
夏
秋
冬

同じ事をYAYAでやるとこんな感じです。

Talk
{
 "\0\s[0]%(季節)はいいね~\w9\1\s[10]どの季節でも言ってるジャン\e"
}

季節
{
 "春"
 "夏"
 "秋"
 "冬"
}

トーク中で%(季節)または%季節と書くと、「季節」という名前の関数を呼び出すことができます。

里々だと単語のひとまとまりは「@季節」、改行が入るような文章は「*季節」と書くルールがありましたが
YAYAは単語と文章を区別しないので単語でも文章でも「季節{ }」です。
OnBootなどのSHIORIイベントも単語群もどちらも「関数」として書くので書き方も全く同じ。

もちろん上で書いた天気トークみたいに

Talk
{
 "\0\s[0]"
 --
 "春"
 "夏"
 "秋"
 "冬"
 --
 "はいいね~\w9\1\s[10]どの季節でも言ってるジャン\e"
}

こー書いてもよいです。
別なトークでも季節の単語群を使いたかったら「季節」の関数を作ってそれを別な関数から呼び出す方式ですね。

変数

使う人は使いまくり、使わない人は全然使わなかったかもしれない変数。
ユーザー名や起動回数・起動時間・好感度で使う人は多かったかも。
里々では変数は1種類しかありませんでしたが、YAYAはいろいろとあります。
まずはそのへんの説明。

文字列と数値

YAYAの変数は文字列と数値の二種類があります。(正確には整数、実数、文字列の3種類)

変数 = 1

こー代入すると変数の中身は数値の「1」

変数 = "1"

こー" "か' 'でくくって代入すると変数の中身は文字列の「1」となります。

里々と違い全角の「1」「2」「3」…は数値になることはできません。
文字列変数だと数値として比較や計算ができません。
例えば数字の数値「1」と「2」で足し算すると結果は「3」になりますが、文字列の「1」と「2」を足すと1と2がくっついて「12」になってしまいます。
他にも色々違いがあります。注意してください。

ちなみに変数はいつでも好きな時に文字列←→数値に変更できるので安心。
用途によって変更してください。

グローバルとローカル

_変数名

名前の頭に「_」をつけるとローカル変数

変数名

つけないとグローバル変数になります。

おおざっぱに言うと「すぐ消えてしまう」のがローカル変数、「削除しない限りずっと残る」のがグローバル変数です。
里々の変数は全部グローバル変数ですね。
ユーザー名や好感度などずっと残しておかないといけない変数以外はローカル変数を使うのが基本です。

で、ローカル変数がどれぐらいの期間使えるのかというと、
「現在の{ }内、およびそれより深い入れ子階層のみで使用できる。寿命は該当する{ }を抜けるところまで。」
です。(マニュアルより引用)

言葉では説明しづらいので一例をだしてみると

ローカル変数テスト {
  {
  _変数 = 1
  }
結果 = _変数
}

こう書くと「_変数」が深い階層から浅い階層に移った時に消えてしまうので「結果」の中身も空になってしまいますが

ローカル変数テスト {
_変数 = ""
  {
  _変数 = 1
  }
結果 = _変数
}

こうすれば「_変数」は浅い階層→深い階層→浅い階層…と、最初に浅い階層にいた経験があるので深い階層から浅い階層に移動しても消えずに残り、「結果」の中身は1です。
最初に「_変数」が生まれたところが「結果=_変数」と同じ(またはもっと浅い)階層かどうかがポイント。
つまりローカル変数を長生きさせたい時は最初に一番浅い階層で「_○○=""」などの一行を書いておけばOK。

変数の代入

プレゼントをあげてフラグを立てた例。
プレゼントフラグを数値の1にします。

これだけ。シンプル。
里々との違いは

【ここ】の部分には空白を入れても構いません。
見やすくするため演算記号の右と左に半角空白を入れる人が多いようです。

文字列を代入する場合はこんなかんじ。
「プレゼント」という変数に「花束」という文字を入れます。

数値じゃない時は必ず" "か' 'でくくりましょう。
トークを書くときと同じですね。 里々みたいに「プレゼント【タブ】"花束"」とは書けません。必ず「=」で代入します。

プレゼントした
{
プレゼント = 花束

 "\0\s[0]わーいありがとう!\e"
}

うっかりこう書いてしまうと「プレゼント」の中身はからっぽになってしまいます。
なぜかというと、YAYAでは「"花束"」ではなく「花束」だけだと「『花束』という名前の変数」になってしまうからです
そのため「プレゼント」という変数に「花束」という変数の中身を入れましたよ、という意味に理解され、
「花束」という変数は存在してないため中身は空になってしまう、という訳です。

里々でいうとこんな風に書いちゃった、ということです。

*プレゼントした
$プレゼント【タブ】(花束)
:わーいありがとう!

このへん里々とは逆なので最初はちょっと混乱するかも。

変数の計算

こっちもシンプル。
里々だと「好感度=(好感度)+1」のように右側の変数は()つきで書く必要がありましたが、YAYAは何もつけなくてOK。
これは前述したように" "や' 'でくくってない文字列は変数、関数名(半角数字だけの場合は数値)として見られるからです。

ちなみにYAYAはこう省略して書く事もできます。

プレゼントした
{
好感度++

 "\0\s[0]ユーザーさんだいすき!\e"
}

「好感度++」は「好感度を1増やしますよ」という意味で「好感度=好感度+1」と意味は同じです。
「好感度--(半角マイナス2コ)」だと1減ります。
「好感度+=2」だと「好感度=好感度+2」と同じ、「好感度-=2」は「好感度=好感度-2」と同じです。
そのほかYAYAで使える計算用の記号の説明はこのあたりに書いてあります。(専門用語多くてちょっとわかりにくいですが)

里々と同じく、文字同士の足し算もできます。

プレゼント = "花" + "束"

と書くと変数「プレゼント」の中身は「"花束"」となります。

変数はもちろんトーク中でも使えます。

プレゼントした
{
プレゼント="花束"

 "\0\s[0]わーい\w6%(プレゼント)だー!\w9\w9ありがとう!\e"
}

バルーンに「わーい花束だー!ありがとう!」と表示されます。
書き方は上で説明した単語群をトークに使う時と全く同じですね。
このあたりは里々もYAYAも変わりません。

変数がちゃんと保存されているかどうか確認したい時はゴーストを終了して「yaya_variable.cfg」をテキストエディタで開いてみてください。
上の例だったら

プレゼント,"花束",,

という一行があれば、保存成功です。
ちなみに数値型の変数の場合は

プレゼント,1,,

こんな風に変数の中身の数字が" "で囲まれてません。

R0とかS0とかA0のYAYAでの書き方

全て半角です。里々と違い、全角では書けません。

古いテンプレートではreference0 reference1 reference2 ..
新しいテンプレートでも設定次第でこう書けます。

SAORIの使い方はこのページの「SAORI」項目を参照。

見ての通りローカル変数。

ssuみたいなこと

「条件分岐」「比較」と「計算」はまた違った方法でやりますが、
それ以外はほぼYAYAのシステム関数で同じ事ができます。

関数用途別一覧?を覗いてみてください。
「これじゃ使いたいの見つけにくい!」って人にはYAYAシステム関数リファレンスなんかもあります。

SAORI

つかいかた

里々みたいに使うSAORIを事前に設定しておく必要はありません。
直接yaya.dllから見たSAORIの相対パスを指定します。

ちなみに「mciaudio.dll」と「鳥の詩.mp3」が「yaya.dll」と同じディレクトリにあるのではなく、そのひとつ下の「saori」ディレクトリにある場合

FUNCTIONEX( 'saori\mciaudio.dll' , 'load' , '鳥の詩.mp3' )

こう書きます。

SAORI( 'mciaudio.dll' , 'load' , '鳥の詩.mp3' )
SAORI( 'mciaudio.dll' , 'play' )

「FUNCTIONEX」ではなく「SAORI」でもOK。
どっちで書いても構わないのなら「FUNCTIONEX」で書きましょう。

返り値 Result

SAORI実行関数を使うとそのまま返ってきます。
返り値をバルーンにそのまま表示するのならこうやってトーク中に埋めこんで使ってもいいですし
(ただしSAORI実行関数の引数を" "ではなく' 'で囲まなければいけないので注意。" "の中に" "は書けないからです)

"\0\s[0]クリップボードにある文字を取り出します。\n「%(FUNCTIONEX( 'saori\textcopy.dll' , 'コピーする文字' ))」\e"

一旦変数に保存して使ってもよいです。

変数 = FUNCTIONEX( 'saori\textpaste.dll' )

Resultがそのままバルーンに表示されると困る時も適当なローカル変数に代入しておきます。

返り値 Value[n]

上でも書きましたが里々で「S0 S1 S2 ..」と書いていたものは「valueex0 valueex1 valueex2 ...」と書きます。

詳しくはこのページを見てください。

☆現在時刻を表示

システム辞書/yaya_shiori3.dic - 時刻系関数を参照。
メモリ量、センダーヘッダの変数もここで見れます。

時間をおしえる
{
 "\0\s[0]ただいま%(hour)時%(minute)分%(second)秒で~す。\e"
}

「里々みたいに日本語で書けないとやだー」って人はテンプレートを参考にして自分で書いてしまうのもアリです。

年 { GETTIME[0] }
月 { GETTIME[1] }
日 { GETTIME[2] }
分 { GETTIME[5] }
秒 { GETTIME[6] }

時間をおしえる
{
 "\0\s[0]ただいま%(時)時%(分)分%(秒)秒で~す。\e"
}

曜日を漢字表記にする方法はこちら。(SimpleYAYAテンプレートには掲載済み)

☆タイマー

「$○○タイマ【タブ】秒数」をYAYAで。

5秒待たせるイベント
{
 "\0\s[0]それでは5秒お待ち下さい。\e"
 
 SHIORI3FW.SetDelayEvent( '5秒待った' , 5 )
}
5秒待った
{
 "\0\s[0]お待たせしました。\e"
}

replace.txt

#defineで同じ事が出来ますが、失敗しないよう注意。

☆replace_after.txt

OnTranslateかOnTranslateInternalイベントでできます。
自動ウェイトなどに使うのならOnTranslateInternalの方をおすすめ。
(OnTranslateだと例えばヘッドラインの中身まで変換されてしまいます)

Φのように危険な記号を無効化する

里々と同様、YAYAでもそのままトークに書けない記号があります。
里々では記号の前に「Φ」を入れて無効化してました。
YAYAではCHRという関数を使って書きます。

こういったサイトを参考にし、書きたい記号の上位3ビット(上のサイトでいうと横の軸にある記号)と上位4ビット(縦の軸)を調べ

CHR(0x(上位3ビット)(上位4ビット))

と書きます。

例えば「1」でしたら

CHR(0x31)

です。
必ず半角で書きます。

記号表示テスト
{
	"\0\s[0]記号「%(CHR(0x22))」をバルーンに表示\e"
}

コメントアウト

#を//にするだけです。

こんな位置にも入れられます。
つまり「//」がついた所から右の部分が全てコメントアウトになります。  

OnBoot
{
 "\0\s[0]こんにちはー。\e"// 起動トーク
}

「/*」と「*/」でくくってもコメントアウトになります。
複数行ごとくくれるので行数が多いならこっちの方が楽。どこからどこまでコメントアウトかちょっとわかりづらいのが難点?

/*
起動イベント
一番最初に起動した時呼ばれる
*/
OnBoot
{
 "\0\s[0]こんにちはー。\e"
}

YAYAは里々より注釈が入れやすく、気軽に使いやすいです。
後で見返した時どこが何なのかすぐ思い返せるようばんばん入れておきましょう。


首頁   新建條目 一覽 搜索 最近的變更   幫助   最近更新的RSS