コンテンツにスキップ

里々からの移行

主に里々しか SHIORI を使ったことがないが、YAYA も使ってみたい、という人向けの説明。

はじめに

里々から YAYA にする利点

プログラミング的なことをするのに強いので、ゴーストのトーク以外の部分がごちゃごちゃしてきて書くのが面倒な場合に楽になる。

ただし、それは YAYA だけに限った特性ではなく、華和梨という選択肢もある。更新が停止していてもよいのなら、それ以外の SHIORI も選択肢に入る(ただし、それらは不具合が発見されても修正は望めない)。SHIORI の特性を把握し、自分で使いやすそうな SHIORI を選ぶのがよい。

YAYA への素朴な疑問集

バリバリ理系向けの SHIORI と聞いたけど…

「文系で今まで里々しか使っていなかったが、YAYA が肌に合っていて使いやすかった」と言っている人も何人かいる。つまり YAYA が向いているかどうかは理系かどうかには関係なく、その人との相性による。実際に使ってみないとなんとも言えない。

プログラミングや C 言語をやったことがある人しか使えないの?

少なくとも、この文章を書いた人はプログラミングも C 言語もやったことがない。

里々より難しいんでしょ?

どんなゴーストを作るかによる。トーク中心のシンプルなゴーストなら里々のほうが楽だが、複雑な動作をするゴーストの場合は、むしろ里々のほうが YAYA より難解な SHIORI になることもある。特にループや配列を多用する場合、里々だと記述するのが辛くなる可能性が高い。

重いって本当?

特に重いという話は聞かない。少なくとも里々よりは軽い。シンプルな YAYA 製ゴーストなのに重いと感じたら、「実行ログ出力設定」や「インストール済みゴーストリスト取得の制限なし取得」をオンにしている可能性が高い。

参考になるかもしれないサイト: ファイル読み書きはどれくらい遅いのか(追記あり) | すくりや(一番下のまとめ)

ファイル操作や正規表現は YAYA しか使えないの?

他の SHIORI でも SAORI を使えばできる。たとえば YAYA as SAORI で YAYA を SAORI として使うと、YAYA と同じようにファイル操作や正規表現ができる。つまり、それだけを目当てにして YAYA を選択する必要はない。

里々だと絶対に作れないようなゴーストが作れるようになる?

上で書いたように、だいたいのことは、里々でも SAORI を使ったり記述を工夫したりすることで実現できる。ただし、辞書が記述しやすいか、記述がどれだけ長くなるか、記述した辞書が後から見やすいか、などの違いは出てくる。

注意点

  • 里々はウェイト、改行、スコープ切り替えタグなどが自動で入ったが、YAYA はそれらをすべてさくらスクリプトを使って自分で書く。選択肢も必ずさくらスクリプトで書くことになる
  • YAYA は基本的に、トーク以外は半角で書く
  • 里々はテンプレートゴーストがなくても satori.dll を用意してマニュアルを見ればなんとかなったが、YAYA は SHIORI/3.0 設定スクリプトなど(ゴーストが動くときの歯車の部分)を自力でゼロから作るのが難しいため、テンプレートはほぼ必須。最低限、SHIORI/3.0 設定スクリプト(SimpleYAYAテンプレートでいう yaya_shiori3.dic)だけは流用したほうが無難
  • 里々は拡張子が .txt でファイル名が dic から始まる辞書ファイルを自動的に読み込んだが、YAYA は yaya.txt で設定した辞書しか読み込まない。その代わり、どの拡張子の辞書も読み込める、辞書を好きなディレクトリに置ける、という利点もある
  • どの辞書にどのイベントを書いてもよいのは里々と同じ
  • フォルダごとの辞書読み込み切り替えはできない(多重人格のやり方は多重人格モードにあるが、読み込みフォルダ切り替え方式ではない)
  • 里々は SAORI-basic をそのまま使えたが、YAYA では Tc604-1 より前のバージョンは proxy_ex.dll という SAORI を経由しないと使えない。里々で satori_conf.txt に書いたような saori 定義はいらない(詳しくはSAORIの使い方を参照)

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

  • テキストエディタ: 基本的に何でもよいが、エディタ色分けファイルにあるテキストエディタと、それに対応した色分けファイルをダウンロードしておくことをお勧めする。記述がとても見やすい。拡張子が .dic のファイルを開くと自動的に色分けされるよう設定しておくと、さらに便利
  • テンプレートゴースト: YAYAでゴーストを作るから自分に合ったものを選ぶ。前述したように、ほぼ必須

YAYAの辞書を書いてみる

以下は、はろーYAYAわーるど(紺野ややめ)や SimpleYAYAテンプレート以外のテンプレートでは通用しないかもしれない(特にタイトルに「☆」がついている項目)。

起動イベントで例を出す。

基本

里々ではこう書いていた。

*OnBoot
:いっちばーん。

YAYA では次のように書く。

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

何だかよくわからない記号がいろいろあるが、1 つずつ見ていく。

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

里々と違い、自動でウェイトはつかない。入れたい場合は、さくらスクリプトで入れる。さくらスクリプトは YAYA 以外の SHIORI でも共通して使うものなので、このマニュアルでは詳しく説明しない。これ以外にもいろいろあるので、リファレンスサイトで「実際に使ってみたいもの」を「少しずつだけ」で良いので、YAYA といっしょに覚えること(いきなり全部覚えようとすると頭がパンクする)。

最初にイベント名を書く、中身を { } でくくる、などの書き方のルールが守られていれば、次のように書いても、

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

次のように書いてもかまわない。

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

OnBoot と { の間などにある空白・改行は、入れても入れなくてもよい。タブを入れてもよい。自分の見やすい、書きやすい書き方を選ぶこと。

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

基本的に " " の外にある空白やタブ、改行は無視されるので、次のようなものでもよい。

OnBoot
    {

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

                            }

要するに、

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

の【ここ】の所に、空白(半角空白、全角空白、タブ)や改行をいくらでも入れられる、ということ。YAYA はこの仕組みを使って、辞書を自由に整えられる。これが、里々より辞書の見通しがよいと言われる理由の一つ。

改行する

里々ではこう書いていた。

*OnBoot
:改行
します。

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

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

「これでは辞書の中で改行になっていなくてわかりづらい」と思う場合は、次のようにする。

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

このように行末に / を入れれば、改行できる。好きな位置に入れて使うこと。

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

悪い例:

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

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

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

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

*OnBoot
:こんにちはー。

*OnBoot
:おっすー。

*OnBoot
:やっほー。

しかし YAYA でこれをやると、エラーが出て起動しなくなる。YAYA は同じイベント名のイベントを 2 つ以上書けない。 かわりに、次のように { } の中で " " を改行区切りで並べる。

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

YAYA は、{ } の中に " " や ' ' でくくった文字列が複数あると、その中のどれか 1 つだけをランダムで選ぶ。

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

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" になってしまう。ほかにもいろいろ違いがあるので注意すること。

変数は、いつでも好きなときに文字列 ⇔ 数値に変更できるので安心。用途によって変更する。

  • 変数を文字列変数にする: 変数 = TOSTR(変数)
  • 変数を数値変数にする: 変数 = TOINT(変数)

自動的に整数、実数、文字列のどれなのかを判断して変換してくれる TOAUTO もある。

グローバルとローカルの違い

名前の頭に _ をつけるとローカル変数、つけないとグローバル変数になる。

_変数名
変数名

おおざっぱに言うと、「一時的に使うものですぐ消えてしまう」のがローカル変数、「削除しない限りずっと残る」のがグローバル変数。里々の変数は、すべてグローバル変数にあたる。YAYA では、ユーザー名や好感度など、ずっと残しておかないといけない変数以外は、ローカル変数を使うことをお勧めする。

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

言葉では説明しづらいので、一例を示す。

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

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

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

こうすれば、_変数 は浅い階層 → 深い階層 → 浅い階層… と、最初に浅い階層で生まれているので、深い階層から浅い階層に移動しても消えずに残り、結果 の中身は 1 になる。最初に _変数 が生まれたところが、結果 = _変数 と同じ(またはもっと浅い)階層かどうかがポイント。

つまり、ローカル変数を長生きさせたいときは、最初に一番浅い階層で _○○ = "" などの一行を書いておけばよい。

変数の代入

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

里々:

*プレゼントした
$プレゼントフラグ=1
:わーいありがとう!

YAYA:

プレゼントした
{
    プレゼントフラグ = 1

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

里々との違いは次のとおり。

  • 頭に「$」はつけない
  • トークや計算などは、すべて { } の中に書く({ } の外に書くとエラーになる)
  • = などの計算用の記号、1 などの数値は、すべて半角で書く

里々でも、計算式や数値を半角で書く癖があった人は楽かもしれない。

【ここ】プレゼントフラグ【ここ】=【ここ】1【ここ】

【ここ】の部分には、空白やタブを入れてもかまわない。見やすくするため、演算記号の右と左に半角空白を入れる人が多い。

文字列を代入する場合は、次のようにする。「プレゼント」という変数に「花束」という文字を入れる。

里々:

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

YAYA:

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

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

数値でないときは、必ず " " か ' ' でくくる。トークを書くときと同じ。里々みたいに「プレゼント【タブ】"花束"」とは書けない。必ず = で代入する。

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

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

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

里々でいうと、次のように書いてしまったということ。

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

このあたりは里々とは逆なので、最初は少し混乱するかもしれない。

変数の計算

里々:

*好感度アップ
$好感度=(好感度)+1
:ユーザーさんだいすき!

YAYA:

好感度アップ
{
    好感度 = 好感度 + 1

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

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

ちなみに 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,",",

のように、変数の中身の数字が " " で囲まれていない。保存形式の詳細は SAVEVAR を参照。

分岐

つつかれ反応での例。OnMouseDoubleClick イベントは、0 番キャラ(さくら側)がつつかれると Reference3 の中に「0」が入る、という仕様。そこで、Reference3 に 0 が入っているのを確認したら「0番つつかれ反応」に飛ばす辞書を書いてみる。

里々:

*OnMouseDoubleClick
>0番さんがつつかれた【タブ】(R3)==0

*0番さんがつつかれた
:(7)つつくなっ!

YAYA:

OnMouseDoubleClick {
    if reference[3] == 0 {
        0番さんがつつかれた
    }
}

0番さんがつつかれた {
    "\0\s[7]つつくなっ!\e"
}

ここで新しく登場した if。if は、その後にある条件式(ここでは reference[3] == 0)が正しければ、次の { } の中身を実行する、という意味。

OnMouseDoubleClick {
    if reference[3] == 0 {
        "\0\s[7]つつくなっ!\e"
    }
}

もちろん、このように { } の中に直接トークを書くこともできる。必要に応じて記述法を変えること。

if とあわせて else を使うと、次のようなこともできる。

OnMouseDoubleClick {
    if reference[3] == 0 {
        "\0\s[7]つつくなっ!\e"
    }
    else {
        "\0\s[7]あたし以外の子もつつくなっ!\e"
    }
}

if 条件式 { } にひっかからなかったら、その次にある else { } の中身を実行する。この例だと、0 番以外のキャラがつつかれたら、すべて else { } の中身を実行する。else は if の後専用で、else 単体で書くとエラーになるので注意。

0 番キャラの「頭が」つつかれたときだけトークさせたい、というときは、こう書く。

OnMouseDoubleClick {
    if reference[3] == 0 && reference[4] == "Head" {
        "\0\s[7]頭を叩くなっ!\e"
    }
}

二つ以上の条件式を並べられる。半角か全角かの違いだけで、== と && の記号の使い方は里々とまったく同じ。if と reference[3] == 0 の間に、空白かタブを入れるのを忘れずに。

ところで、里々でのつつき反応は、こう書いていたはず。

*0Headつつかれ
:(7)頭を叩くなっ!

*1つつかれ
:やめれ!

YAYA では、似たようなことはできないのか。そんなあなたのために、こちらの記述法。

OnMouseDoubleClick {
    EVAL( "%(reference[3])%(reference[4])つつかれ" )
}

0Headつつかれ {
    "\0\s[7]頭を叩くなっ!\e"
}

1つつかれ {
    "\1\s[10]やめれ!\e"
}

普通なら "%(reference[3])%(reference[4])つつかれ" とだけ書くと、0 番の頭がつつかれたとき、「0Headつつかれ」としゃべるゴーストのトークになる。それを EVAL( ) で包み込むと、「0Headつつかれ」が関数名になる。

この EVAL は、こういった「いきなり独立した関数を書ける分岐」以外でも、いろいろな場面で役立つ便利な関数。

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

すべて半角で書く。

里々 YAYA 備考
R0 R1 R2 … reference[0] reference[1] reference[2] … 古いテンプレートでは reference0 reference1 reference2 … だった(新しいテンプレートでも、設定次第でこう書ける)
S0 S1 S2 … valueex0 valueex1 valueex2 … SAORI の使い方は、下の「SAORI」の項を参照
A0 A1 A2 … _argv[0] _argv[1] _argv[2] … 頭に _ が付いていることからわかるとおり、ローカル変数

ssu みたいなこと

「条件分岐」「比較」と「計算」は別の方法で行うが、それ以外はほぼ YAYA のシステム関数で同じことができる。システム関数一覧を見る。

SAORI

つかいかた

里々:

(mciaudio,load,鳥の詩.mp3)(mciaudio,play)

YAYA:

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

里々のように、使う SAORI を事前に設定しておく必要はない。直接、yaya.dll から見た SAORI の相対パスを指定する。

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

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

FUNCTIONEX のかわりに SAORI でも実行できる(システム辞書の関数で、FUNCTIONEX の別名)。どちらで書いてもよいなら、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 の時間変数(year month day weekday hour minute second)を参照。メモリ量、センダーヘッダの変数もここで見られる。

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

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

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

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

曜日を漢字表記にする方法は、曜日を判別を参照(SimpleYAYAテンプレートには掲載済み)。

☆タイマー($○○タイマ【タブ】秒数)

replace.txt

#define で同じことができる。ただし #define は、SHIORI で計算などが実行される前の「辞書に書かれている文字列そのまま全部」を変換してしまう強力なものなので、重要な文字列まで変換してしまう、などの失敗をしないように注意すること。詳しい使い方は、関数・変数・さくらスクリプトを短縮して書くを参照。

たとえば次のような記述をしておくと、

#define @r reference

今まで reference[0] と書いていた所を、@r[0] と短縮して書ける。

☆replace_after.txt

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

トークに自動でウェイトをつける例:

OnTranslateInternal
{
    _text = _argv[0]
    _text = REPLACE(_text, "…", "…\w3")
    _text = REPLACE(_text, "、", "、\w5")
    _text = REPLACE(_text, "。", "。\w9")
    _text
}

シェルの見切れ・重なり反応をつける

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

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

次のようなサイトを参考にして、書きたい記号の上位 3 ビット(表の横の軸にある記号)と上位 4 ビット(縦の軸)を調べる。

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

と書く。たとえば 1 なら CHR(0x31) になる。必ず半角で書く。

" " の中に " を書くサンプル:

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

ダブルクォートは、Tc569-8 以降なら "" と 2 つ続けて書く方法もある(値と変数)。

コメントアウト

# を // にするだけ。

里々:

# 起動イベント
*OnBoot
:こんにちはー。

YAYA:

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

次のような位置にも入れられる。つまり // がついた所から右の部分が、すべてコメントアウトになる。

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

/* と */ でくくってもコメントアウトになる。複数行をまとめてくくれるので、行数が多いならこちらのほうが楽。どこからどこまでがコメントアウトなのか少しわかりづらいのが難点。

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

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

里々から YAYA に移行した人にありがちな疑問

ゴーストを起動しても全然動かない!

YAYA では里々と違って、辞書の記述方式が一文字でも間違っていると、ゴーストが動作しなくなる。どこの記述が間違っていたのか確認すること。

もしくは、実行ログを見ても確認できる。yaya.dll と同じ階層にある yaya.txt に log, ayame.log の一行を追加してからゴーストを起動し、出力された ayame.log をテキストエディタで開く。

satori_savedata.txt(セーブデータ)はどこ?

グローバル変数は yaya_variable.cfg に保存されている(テンプレートによってファイル名が違うこともある)。

エイリアスエラーが出たけど、これは何?

descript.txt が shiori,satori.dll のままではないか。

そのほか

困ったときの対処法も見ること。

関連