里々まとめ†
- 里々WikiやSatoriSpecWikiとは一味違う里々の文法のまとめを目指しています。
- もうずっと書きかけです
- デマやウソ情報を見つけたら一番下のコメントフォームへ報告お願いします。
- 俺、このWikiを書き終えたら界隈から離れるんだ……。
もくじ†
- 里々まとめ
- もくじ
- 里々関連ファイル
- 里々が読み込むファイル
- 文法
- 前書き
- トーク要素
- 単語群
- 括弧
- エスケープ
- コメントアウト
- 演算子
- 変数
- 括弧
- イベント
- SAORI
- (S[数字])
- (Sの数)
- ssu.dll
- (calc,[計算式])
- (calc_float,[計算式])
- (if,[条件式],[真の場合に返す文字列],[偽の場合に返す文字列])
- (unless,[条件式],[偽の場合に返す文字列],[真の場合に返す文字列])
- (iflist,[条件式の左辺],[条件式の右辺1],[真の場合に返す文字列1],[条件式の右辺2],[真の場合に返す文字列2],…,,[条件式の右辺n],[真の場合に返す文字列n],[それ以外の場合])
- switch
- nswitch
- substr
- split
- replace
- replace_first
- erase
- erase_first
- count
- compare
- compare_head
- compare_tail
- length
- sprintf
- is_empty
- is_digit
- is_alpha
- han2zen
- zen2han
- kata2hira
- hira2kata
- join
- choice
- reverse
- at
- lsimg
- mkdir
- 内部関数
- (set,[変数名],[値])
- (nop,[,...])
- (sync,呼び出す関数,引数1,引数2...引数n)
- (loop,[括弧で呼び出すモノの名前],[回数])
- (loop,[括弧で呼び出すモノの名前],[開始値],[終了値])
- (loop,[括弧で呼び出すモノの名前],[開始値],[終了値],[増分])
- (remember,[全半角自然数])
- (call,[括弧呼び出しの対象の名前][,[引数0],[引数1],...])
- (バイト値,[1以上の全半角数字])
- (単語の追加,[単語群名],[単語名])
- (追加単語の削除,[単語群名],[単語名]
- (追加単語の全削除,[単語群名])
- (合成単語群,[単語群名],[単語群名],...)
- (乱数[全半角数字]?[全半角数字])
- 環境変数
- 特殊変数
- 品質保証部
里々関連ファイル†
satori.dll†
初期状態†
ssu.dll†
- satori.dllの機能を補うSAORI
- 「里々はゴースト作成に最小限の機能しか実装しない」という理念のもとに別々になっている。
- 機能は後述
satorite.exe†
- 里々スクリプトのデバッグ用ソフト。
- satori.dllをUIをつけたもの。
- satori.dllと同じフォルダに入れて使うと辞書をロードしてくれる。
- もちろんsatori_conf.txtも読み込むのでSAORIも使える。
- 窓中の里々スクリプトを解釈してSakuraScriptを生成し、起動中のゴーストにDirectSSTPで送る。
- れしばでも内部の動作が見られる。
- 前回の状態を保存しておいて、次の起動時にはその内容を復帰します。
れしば.exe†
- satori.dllやsatorite.exeから送られてくる里々スクリプトの実行ログを表示する。
- 「リアルタイムで表示する」とれしばの表示が追いつかなくて里々本体の処理も遅くなる。
- Ctrl+Sでログ内容をれしば.exeと同じフォルダにれしば.txtとして保存できる。
- リアルタイムで表示せず、F5とCtrl+Sを使いまわすと複雑な里々スクリプトの実行ログも追いやすい
- 表示が速すぎてログを見る前に流れてしまうときに便利。
satori_pack.exe†
- dic***.txtのあるフォルダにsatori_pack.exeを置いて実行。
- 里々辞書を暗号化したdic*.satを生成できます。
satori_license.txt†
- 里々の著作権について書いてある。
- 修正BSDライセンスとか。
- 里々を配布する上で必須のファイル。
- 別に里々が読み込むわけではない。人間が読むためのもの。
- 里々を使ってゴーストを配布する際には忘れずにいれておくこと。
里々が読み込むファイル†
ファイル読み込み順序†
- replace.txt
- replace_after.txt
- characters.ini
- satori_conf.txt
- satori_savedata.txt
- satori_savedata.sat
- dic***.txt
- dic***.sat
replace.txt†
- 里々が辞書やセーブデータを 読 み 込 む と き に辞書やセーブデータの内容を置換する。
- 実際にはない里々スクリプトを書いたとしても、ここで整形できる。
- このファイルがなくても里々は動きます。というか、里々は何もなくても動く。タフなのだ。
- replace.txt, replace_after.txtのタブ区切り解釈 †
- 区切り符であるタブ記号が連続していた場合、2つめ以降を無視していた。これを先頭のタブ記号だけを区切り符とし、以降に出現したタブ記号は置き換え後文字列として扱うように変更。
- また、連続しない複数のタブ記号が含まれる行は存在を無視していたので修正。
- 文法
[置換前の単語]【タブ】[置換後の単語]【改行】
- 例
【タブ】
(hoge, (call,hoge,
- 実用例
replace_after.txt†
- 簡易トランスレータ。
- 里々がMAKOTOトランスレータを積んでるような。
- 里々が里々スクリプトを実行後、生 成 さ れ た SakuraScript を置換する。
- このファイルがなくても里々は動きます。
- replace.txt, replace_after.txtのタブ区切り解釈 †
- 区切り符であるタブ記号が連続していた場合、2つめ以降を無視していた。これを先頭のタブ記号だけを区切り符とし、以降に出現したタブ記号は置き換え後文字列として扱うように変更。
- また、連続しない複数のタブ記号が含まれる行は存在を無視していたので修正。
- replace.txtと同じ文法。
[置換前の単語]【タブ】[置換後の単語]【改行】
- 例
。 。\w8
、 、\w5
- 実用例
- 本体にさくらスクリプトを返す直前、つまり「しゃべる直前」に置き換えます。
- 例えば、
:(ゴースト名)さん、またねー
- みたいなのが
ととたんさん、またねー
- になってしまうのを防ぐために、
たんさん たん
- と書くと。
- replace.txtだと、まだカッコが展開されてないので「たんさん」になっておらず、置き換えが効かないわけです。逆に、カッコを含むものはreplace_after.txtだと既に展開されており、手遅れなわけです。
- このへんが影響しない場合は、どっちでも同じです。
- 「里々Wiki - replace.txtとreplace_after.txt」より転載
characters.ini†
- 説明
- キャラクター設定ファイル。
- [名前の頭文字]:でスコープ指定可能になる。
- 現在、名前の情報はfamily-nameしか使用されていない模様。
- このファイルがなくても里々は動きます。
- 文法
[半角スコープ番号]
popular-name=[一般名、名前]
initial-letter=[名前の頭文字]
full-name=[フルネーム]
family-name=[性]
first-name=[名]
base-surface=]デフォルトサーフェス番号]
- 例
[0]
popular-name=名雪
initial-letter=名
full-name=水瀬名雪
family-name=水瀬
first-name=名雪
base-surface=0
[1]
popular-name=あゆ
initial-letter=あ
full-name=月宮あゆ
family-name=月宮
first-name=あゆ
nickname=あゆあゆ
base-surface=500
[2]
popular-name=栞
initial-letter=栞
full-name=美坂栞
family-name=美坂
first-name=栞
base-surface=1000
[3]
popular-name=真琴
initial-letter=真
full-name=沢渡真琴
family-name=沢渡
first-name=真琴
nickname=まこぴー
base-surface=1500
[4]
popular-name=舞
initial-letter=舞
full-name=川澄舞
family-name=川澄
first-name=舞
base-surface=2000
- このとき、辞書内では
名: | \p[0] |
あ: | \p[1] |
栞: | \p[2] |
真: | \p[3] |
舞: | \p[4] |
- のように置換される
- 関連リンク
- http://yagi.xrea.jp/SatoriSpecWiki/pukiwiki.php?cmd=read&page=%CA%B8%CB%A1%BE%E5%A4%CE%CC%E4%C2%EA&word=replace#content_1_17 -- SatoriSpecWiki
影響範囲は
- 一般名(未使用)
- 基本サーフェス(サーフェス加算値)
- 頭文字(う: さ: とかに使える)
satori_conf.txt†
- 説明
- 里々の設定ファイル。
- 里々が辞書及びセーブデータをロードをする前に読み込まれる。
- 変数の初期化とSAORI呼び出しについて定義する。
- このファイルがなくても里々は動きます。
- *初期化
- 説明
- 変数等の初期化。
- 上書きしないので、途中追加した変数にも初期値を設定できます。
- 里々がセーブデータや辞書を読み込む前に初期化変数を定義する。
- SAORI定義よりも先に読まれるのでSAORIは使用できない。
- 謎の理由で里々の内部関数も使用できない。
- トークを書いても無視される。
$辞書フォルダ
*初期化
$辞書フォルダ【タブ】mjk
$辞書フォルダ【タブ】kwsk
としたとき、
*初期化
$辞書フォルダ【タブ】.,mjk,kwsk
と同義。satori.dllのルートフォルダは強制的に読み込まれ、他の辞書フォルダもまとめて読み込まれてまう。
- ↑確認できませんでした。間違いのようです。
- ここに辞書フォルダを定義するとロードするたびに必ずその指定した辞書フォルダが読み込まれます。
- ここでの辞書フォルダ定義はセーブデータには反映されません。
*セーブデータ
$辞書フォルダ【タブ】.
であったとき、実質的に
$辞書フォルダ【タブ】mjk,.
となります。
しかし、里々アンロード時や手動セーブ時に出力されるsatori_savedata.txtには
*セーブデータ
$辞書フォルダ【タブ】.
としか記載されません。
- つまり、satori_conf.txtに書かれた辞書フォルダの内容は、セーブデータによって上書きされるのではなく、追記されます。
- @SAORI
- 例
*初期化
$喋り間隔 180秒
$喋り間隔誤差 10%
$会話時サーフェス戻し 有効
$デフォルトサーフェス0 0
$デフォルトサーフェス1 10
$スコープ切り換え時 \n[half]
$ユーザ名 ユーザ
$自動挿入ウェイトの倍率 100%
@SAORI
fill_desktop,saori/fill_desktop.dll
fill_red,saori/fill_desktop.dll,255,0,0
mciaudio,saori/mciaudio.dll
- 関連リンク
satori_savedata.sat†
satori_savedata.txt†
satori_savebackup.sat†
- セーブデータのバックアップの暗号化バージョン。
- satori_savebackup.txtの項を参照。
satori_savebackup.txt†
- セーブデータのバックアップ。
- 里々のセーブデータが消える?というバグ対策の名残。
- 実際にはSSPのバグだったらしい。
- このファイルは里々にはロードされません。
- (多分)書き出し専用です。
dicAnchor.txt†
- 特殊辞書。
- 他の辞書ファイルのトーク中にこのファイルに書いたトークの名前があった場合、自動的にアンカーになる。
- \_a[]
- 例
- dicAnchor.txt
*親父の秘密
:実はでべそ。
- dic○○.txt
*
:僕の親父の秘密知りたい?
:いいや。
- →\1\0僕の\_a[親父の秘密]知りたい?\n\1いいや。\w8\e
dic○○.sat†
- 説明
- 暗号化辞書ファイル
- 詳しくはdic○○.txtの項を参照。
dic○○.txt†
- 7文字以上。最低「dic.sat」「dic.txt」
- dicAnchor.txt
■2009/11/05■
里々のアンカー処理の話。既出、間違い、勘違いでしたらスミマセン。
dicAnchor.txtに半角英数字が先頭に来るワードを登録した場合に、
トーク内の書き出しまたは改行の先頭に登録ワードが来た場合、
もしくはその行の登録ワードの直前が半角英数字の文字列のみの場合、
アンカー処理がスルーされます。
先頭が半角英字の ABCの歌 という語句をdicAnchor.txtに登録していた場合の
アンカー処理がスルーされる具体例として、
*
:ABCの歌アンカーテストです。
:アンカーされてへんな。
:あれれ。
*
:え~っともう一回、
ABCの歌アンカーテストです。
:やっぱアンカーされてへんな。
:あれれ~。
*
:三度目の正直!
194ABCの歌アンカーテスト!
KONDOKOSOABCの歌アンカーテスト!
\w6ABCの歌アンカーテスト~!
:今回もアンカーされてへん。
:そんな~
3つ目の例はかなり無理やりですが・・・。で、これを回避する方法として、
dicAnchor.txtに ABCの歌 のように先頭文字(A)だけ全角で登録し、
ABCの歌【タブ】\_a[ABCの歌]ABCの歌\_a
とreplace.txt(replace_after.txtでも可)に登録する方法や、
「ABCの歌」【タブ】\_a[ABCの歌]ABCの歌\_a
とreplace.txt(replace_after.txtでも可)に登録し、
アンカーさせたい語句はトーク辞書内で「ABCの歌」のように括弧付きで書く(バルーン内では括弧なしで表示されます)という方法があります。
こんな面倒なことしなくても、全角登録・全角表示でいいじゃんって話かもですけど。
前書き†
トーク宣言、または単語群宣言が存在する行までは前書き空間となります。
ここには何を書いても構いません。すべてエスケープされます。
トーク要素†
*[トーク名]【タブ】[採用条件式] ←[トーク宣言]
[トーク本文] ←[トーク空間]
- トークはトーク宣言とトーク空間からなります。
- トークとは、“ゴーストの会話及びその挙動”を簡単に記すための定義です。
¥uから喋る
*[トークラベル]【タブ】[採用条件式]
¥uのスコープ。
:¥hのスコープ。
:¥uのスコープ。
characters.iniを設定していると
*[トークラベル]【タブ】[採用条件式]
:¥hのスコープ。
:¥uのスコープ。
名:¥p[0]のスコープ。
あ:¥p[1]のスコープ。
栞:¥p[2]のスコープ。
真:¥p[3]のスコープ。
舞:¥p[4]のスコープ。
とかできる。
トーク宣言†
*[トーク名]
*[トーク名]【タブ】[採用条件式]
トーク名†
採用条件式†
- 式が1を返した場合、採用されます。
- 同じトーク名の複数のトーク要素が採用された場合、ランダムに1つ選ばれます。
- トーク名が同じで、採用条件式が書いてあるトーク要素と、採用条件式を書いていないトーク要素が混在した場合、
- phase124までは 条件式なしトーク要素のグループだけで評価
*起動 ←評価対象が無いので真、ランダムにどちらか採用
*起動 ←評価対象が無いので真、ランダムにどちらか採用
*起動【タブ】(現在時)==11 ←式に関係なく評価されない。不採用
*起動【タブ】(現在時)==12 ←式に関係なく評価されない。不採用
- phase Mc-*からは 先に条件式のあるトーク要素を評価して、真のトーク要素が無かった場合、条件式のないトーク要素がランダムに採用される
*起動 ←条件式つきトーク要素が採用されなかった場合、どちらかを採用
*起動 ←条件式つきトーク要素が採用されなかった場合、どちらかを採用
*起動【タブ】(現在時)==11 ←式が真なら採用
*起動【タブ】(現在時)==12 ←式が真なら採用
トーク空間†
- トーク空間にはゴーストに関する挙動を書いていきます。
- 最後の文字列のある行までがトーク空間になります。
トーク空間では、変数代入、ジャンプ、選択肢、コミュニケート、コミュニケートサーチが出来ます。
変数代入†
$[変数名]【タブ】[値]
$[変数名]=[値]
変数。=で計算式代入の場合、値を計算。タブの場合文字列として扱う。
数字のみの変数名無効。代入するものが無かった場合変数の削除
ジャンプ†
>[トーク名]
>[トーク名]【タブ】[採用条件式]
- トーク本文を他のトーク要素のトーク本文に繋げて分岐することができます。
- 単語群要素へはジャンプできません。ジャンプできるのはトーク要素だけです。
- トーク名には変数を指定できます。
完全一致ジャンプ
>変数ジャンプ_(利用変数)
とした場合、(利用変数)が存在していなければ「変数ジャンプ_」がジャンプ先になる。
ssu.dllとの兼ね合いも考えれば、出来るだけ初期化した方がいいかも。・・・要検証!
コミュニケートサーチ†
≫
and検索ジャンプ。
選択肢†
_[トーク名]
_[選択肢ラベル]【タブ】[トーク名]
_選択肢ラベル【タブ】ジャンプ先
(全角アンダーバー)
選択肢。SakuraScript置き換え。
話しかけ†
→
トーク本文†
- トーク空間のスコープはうにゅう側から始まります。
- トーク空間でトーク本文を改行すると、改行するSakuraScript「\n」が自働挿入されます。
- 自働改行を無効にしたい場合は行末にエスケープ文字「φ」を書きます。
こんφ
にちは
↓
\1\s[10]こんにちは\e
- 「。」「、」「!」「?」などには自動的にSakuraScriptのウェイトタグが挿入されます。
- 特殊変数「自働挿入ウェイトの倍率」や「自働挿入ウェイトタイプ」で自働挿入ウェイトの設定ができます。
- トーク本文の末尾には\eが自働挿入されます。
単語群†
単語群解釈 †
各行が要素。それぞれに定義行が適用される。
末尾空行を認識しないのはまぁいいか。明示的に「文字列」を指定する書式を用意する?
- 単語群定義 := 単語群宣言 単語内容+
- 単語群宣言 := '@' 単語群名 '\n'
- 単語群名 := 文字列
- 単語内容 := 項 '\n'
- 項 := (文字列|かっこ)+
単語群宣言†
単語群名†
採用条件†
単語空間†
- かっこ := '(' 項 (区切り子 項)* ')'
- 区切り子 := がんばれ。
情報取得系 条件として取得されるケース 情報設定系 そのまま
文字列の再解釈(eval)
文字列 := ('(' | ')' | ':')以外*
エスケープ†
コメントアウト†
演算子†
論理演算†
文字列操作†
==、!=で両辺の文字列が同じかどうか比較。
-で左辺から右辺文字列消去。
*で、例えば■*5なら■■■■■。
<、>、>=、<=は文字列の長さを比較。
- 計算式(calc、calc_float、SAORI引数、ジャンプ時条件)
http://yagi.xrea.jp/SatoriSpecWiki/pukiwiki.php?%CA%B8%CB%A1
スコープ切り替え。
コミュニケートについて†
単語群†
演算子†
- かっこ := '(' 項 (区切り子 項)* ')'
- 区切り子 := がんばれ。
情報取得系 条件として取得されるケース 情報設定系 そのまま
文字列の再解釈(eval)
文字列 := ('(' | ')' | ':')以外*
単語を選択した
*に定義があれば文を取得
変数名であれば変数の内容を返す
サーフェス切り替え
「:」(数字)引くことの現在のスコープのデフォルトサーフェスの値。
*
:(6)→\s[6]
:(0)\s[10]
:(10)\s[10]
:(11)\s[21]
見つからなかった。通常喋り?
- 計算式(calc、calc_float、SAORI引数、ジャンプ時条件)
イベント†
特殊イベント†
このラベルのトークが無かった場合、「他のゴーストから変更」へ飛ぶ。
このラベルのトークが無かった場合、「他のゴーストへ変更」へ飛ぶ。
このラベルのトークが無かった場合、自動的に下記のように補完される。
*OnMouseDoubleClick
>(R3)(R4)つつかれ
()
ころころ
$選択ラベル【タブ】(R0)
$選択名【タブ】(R1)
・・・わすれた!(ぇ
このトークが無かった場合、里々が独自にコミュニケート探索を行う。
詳しくはコミュニケートを参照。
- 存在するタイマのディクリメント
- 自動セーブ
- タイマ
- タイマ予約発話
- 自動発話
- 喋らない
- scriptへの付与処理
- 喋りカウント初期化
- 1トーク中でのみ有効な重複回避をクリア
- バルーン位置が有効なら設定
独自イベント†
- satori.dllのロードが終了したとき。
- OnSatoriLoadは変数の初期化とか設定とか里々の内部の準備用イベントとして使う
- トーク無視。
- satori.dllのアンロードの直前。
- トーク無視。
- 「OnSatoriLoad」の後、ベースウェアからイベントが送信され始める直前。
- OnSatoriBootは起動イベント全般に分岐をかけたい時に使うといいかも
- おそらく里々がOnSatoriBootのイベントを処理したときにトークがあった場合、そのトークをOnBoot、OnGhostChanged、OnGhostCalledの本来のイベント処理を無視して使っているのかと。
(R0):0なら「今話すべきトークはない=ランダムトークでいい」、1なら予約あり。
(R1):(R0)が1の場合、そのトーク名。
COMMUNICATE該当なし†
「OnCommunicate」が無く、里々が独自のコミュ探索を行った後で、一致するトークがなかったときに呼び出される。
他のゴーストから変更†
他のゴーストへ変更†
消滅指示†
消滅撤回†
消滅決定†
消滅中断†
特殊単語群†
@\ms†
%msを定義
@\ml†
%mlを定義
@\mc†
%mcを定義
@\mh†
%mhを定義
@\mt†
%mtを定義
@\me†
%meを定義
@\mp†
%mpを定義
@\m?†
%m?を定義
@\dms†
%dmsを定義
オーナードローメニュー定義†
sakura.recommendsites†
()展開有効です。
SAORI†
(S[数字])†
SAORIなどコール時の結果処理
(Sの数)†
ssu.dll†
(calc,[計算式])†
(calc_float,[計算式])†
- calc_floatは小数点以下も計算する。
- 「$SAORI引数の計算【タブ】自動」だと、calcが実行される前に引数として計算式が計算されてしまう。
$SAORI引数の計算【タブ】自動
(calc_float,5÷2)
- (calc_float,5÷2)
- (calc_float,(calc,5÷2))
- (calc_float,2)
- 「$SAORI引数の計算【タブ】無効」にしてから使おう
$SAORI引数の計算【タブ】無効
(calc_float,5÷2)
- (calc_float,5÷2)
(if,[条件式],[真の場合に返す文字列],[偽の場合に返す文字列])†
- 条件式を評価し、真(0以外)ならば真の結果を返す。
- そうでないならば、偽の結果を返す(偽の結果が書かれている場合)か、空を返す(偽の結果を省略している場合)。
- ※重要なこと
- 普通のプログラミング言語と違って、括弧の中身が先に評価される。
(if,(乱数0?1),(set,値,0),(set,値,1))
(値)
- (if,(乱数0?1),(set,値,0),(set,値,1))
- (if,0,(set,値,0),(set,値,1))
- (if,0,,(set,値,1))
- (if,0,,)
- (値)
- 解決策
((if、(乱数0?1)、set,値,0、set,値,1))
(値)
- (if、(乱数0?1)、set,値,0、set,値,1)
- (if、0、set,値,0、set,値,1)
- (if、0、set,値,0、set,値,1)→set,値,1
- (set,値,1)
- (値)
(unless,[条件式],[偽の場合に返す文字列],[真の場合に返す文字列])†
(iflist,[条件式の左辺],[条件式の右辺1],[真の場合に返す文字列1],[条件式の右辺2],[真の場合に返す文字列2],…,,[条件式の右辺n],[真の場合に返す文字列n],[それ以外の場合])†
ifと違う点は、条件式が左右に分かれたことと、複数の条件を順番に評価できること。
まず、左辺と右辺1を組み合わせた条件式を評価し、真ならば結果1を返す。
そうでなければ次の右辺2と組み合わせ、真ならば結果2を返す。
そうでなければ…(以下略)。
いずれの右辺を評価しても真にならばければ、空を返す。
switch†
nswitch†
substr†
split†
replace†
replace_first†
erase†
erase_first†
count†
compare†
compare_head†
compare_tail†
length†
sprintf†
is_empty†
is_digit†
is_alpha†
han2zen†
zen2han†
- ssu.dll han2zen / zen2hanで変換タイプ指定可能に
- 例:(zen2han、ABC123アイウガギグ?、数字 アルファベット カナ 記号)
- 2番目に空白等適当な文字で区切って指定します。
- 省略時は全指定。 数字・アルファベット・カナ・記号 が指定可能(複数指定・任意の組み合わせ可能)
kata2hira†
hira2kata†
join†
choice†
reverse†
lsimg†
mkdir†
内部関数†
(set,[変数名],[値])†
変数へ代入
(set,ほげ,ふが)
は
$ほげ【タブ】ふが
に等しい。
(nop,[,...])†
何も返さない。
(nop,ほげ)→
(sync,呼び出す関数,引数1,引数2...引数n)†
(sync,fill_desktop,255,255,255)
は
\![raise,OnDirectSaoriCall,fill_desktop,255,255,255]
になる・・・ハズ。
(loop,[括弧で呼び出すモノの名前],[回数])†
(loop,[括弧で呼び出すモノの名前],[開始値],[終了値])†
(loop,[括弧で呼び出すモノの名前],[開始値],[終了値],[増分])†
[括弧で呼び出すモノの名前]カウンタ†
(remember,[全半角自然数])†
今からn回前のランダムトークのスクリプトを取得する。
(call,[括弧呼び出しの対象の名前][,[引数0],[引数1],...])†
(A[全半角数字])†
(Aの数)†
- callの引数の数を返す。
- 最後の引数の番号とは(A(Aの数)-1)の関係。
(バイト値,[1以上の全半角数字])†
(単語の追加,[単語群名],[単語名])†
(追加単語の削除,[単語群名],[単語名]†
(追加単語の全削除,[単語群名])†
(合成単語群,[単語群名],[単語群名],...)†
- (合成単語群、A、B、C)と書くとA/B/Cそれぞれの単語群の内容全てからランダム選択
(乱数[全半角数字]?[全半角数字])†
環境変数†
変数取得
変数名であれば変数の内容を返す
リクエスト情報†
(ID)†
(Reference[半角数字])†
(R[全半角数字])†
- Event通知時の引数取得。
- (Refference[半角数字])の省略
(Rの数)†
(status code)†
(Status)†
Sender†
Charset†
内部情報†
(里々のバージョン)†
- 整備班カスタムから実装
- バグ報告するときにはこれで里々のバージョンを確認しておこう。
(pwd)†
- satori.dllのあるフォルダまでの絶対パスを返す。
(本体の所在)†
- ベースウェアがインストールされているフォルダを取得。
(直前の選択肢名)†
(H[全半角数字])†
- ([全半角H][全半角数字])
- 過去に括弧で展開した値を取得。
- 1オリジン。
(サーフェス[全半角スコープ番号])†
- 現在の指定したスコープのキャラクターが表示しているサーフェス番号を返す。
(前回終了時サーフェス[全半角スコープ番号])†
- 前回終了時の指定したスコープのキャラクターが表示していたサーフェス番号を返す。
(ウィンドウハンドル[全半角スコープ番号])†
外部情報†
(FMO[半角数字][半角英数])†
([ゴーストの\0の名前]の存在)†
- わすれた
- 呼び出し時に里々は保持するゴースト情報を更新する。
([ゴーストの\0の名前]のサーフェス)†
- わすれた
- 呼び出し時に里々は保持するゴースト情報を更新する。
(隣で起動しているゴースト)†
(起動しているゴースト数)†
存在判定†
(文「[トーク名]」の存在)†
- 指定したトークが存在する場合は「1」
- 存在しない場合は「0」
(文「[トーク名]」の数 )†
(単語群「[単語群名]」の存在)†
- 指定した単語群が存在する場合は「1」
- 存在しない場合は「0」
(単語群「[単語群名]」の数)†
(変数「[変数名]」の存在)†
- 指定した変数が存在する場合は「1」
- 存在しない場合は「0」
時間情報†
(time_t)†
- 万国標準時(UCT)の1970年1月1日の00:00:00からの経過時間を秒単位で表した数値
- 半角数字
(現在年)†
(現在曜日)†
(現在月)†
(現在日)†
(現在時)†
(現在分)†
(現在秒)†
(起動時)†
(起動分)†
(起動秒)†
(単純起動秒)†
(単純起動分)†
(OS起動時)†
- OS(Windows)が起動してからの時間の時間の部分
- 実は「OS起動?」の情報が実際には取得できていないというウワサが・・・
(OS起動分)†
- OS(Windows)が起動してからの時間の分の部分
(OS起動秒)†
- OS(Windows)が起動してからの時間の秒の部分
(単純OS起動秒)†
(単純OS起動分)†
(累計時)†
(累計分)†
(累計秒)†
(単純累計秒)†
(単純累計分)†
(最終トークからの経過秒)†
(ゴースト起動時間累計ミリ秒)†
- このゴーストを起動したミリ秒単位の累計時間
- セーブデータに自動的に保存される。
辞書情報†
(countTalk)†
- ランダムトーク数
- トークのラベル(名前)がないもの。
(countWords)†
(countWord)†
(countParenthesis)†
(countVariable)†
(countAnchor)†
(countLine)†
トーク予約情報†
(次のトーク)†
- 次の予約されているトーク名
- (次から1回目のトーク)と同義。
(次から[全半角数字]回目のトーク)†
- 指定した回に予約されているトークがあればそのトーク名
- なければ何も返さない
(トーク「[トーク名]」の予約有無)†
- 指定したトークが予約されていれば「1」
- されていない場合は「0」
(予約トーク数)†
特殊変数†
スクリプト挿入†
$スコープ切り換え時【タブ】[任意の文字列]†
- デフォルトでは
$スコープ切り換え時【タブ】\n[half]
$さくらスクリプトによるスコープ切り換え時【タブ】[任意の文字列]†
- 「$スコープ切り換え時」のさくらスクリプト版。
- \0,\1,\h,\u,\p[n]が対象です。デフォルトで設定なし。
- 改行せずにキャラを切り替える用途で\0,\1,\h,\u,\p[n]が使えます。
- :と全く同じ動作にしたい時は\n[half]と設定してください。
$スクリプトの一番頭【タブ】[任意の文字列]†
- 里々Mc131-1以降で使用可。
- 里々はスクリプトの先頭に自動でデフォルトサーフェイス等が挿入される為、任意のタグ等をスクリプトの先頭に書く事が出来ませんでした。
- "$スクリプトの一番頭"に代入する事で次のスクリプトの先頭に挿入されます。
- また一度使用されると変数は初期化されます。
- 利用例としては\Cタグはスクリプト先頭に記述する必要がある為これで利用します。
$トーク開始時【タブ】[任意の文字列]†
$トーク終了時【タブ】[任意の文字列]†
$選択肢開始時【タブ】[任意の文字列]†
$選択肢終了時【タブ】[任意の文字列]†
$自動挿入ウェイトの倍率†
- 「。」「、」「!」「?」などに自動的に挿入されるウエイトタグの倍率。
- 0で無効
- %指定
- 「**%」と数値以外の文字が付いた場合、文字は無視される。
$自動挿入ウェイトの倍率【タブ】5%
$自動挿入ウェイトタイプ†
- 「無効」で自動挿入全て無効、
- 「里々」で従来の処理、
- 「一般」でゴーストで一般的に使われるウェイトを自動挿入します。
- 「一般」=「、」で\w5ぐらい、「。!?」や改行など文末で\w9ぐらい、話者変更で\w9\w9ぐらい。「ぐらい」はわざと微妙にランダム調整してるので。
ランダムトーク設定†
$喋り間隔【タブ】[全半角数字]†
- 秒単位
- 「**秒」と数値以外の文字が付いた場合、文字は無視される。
- 3未満は喋らない
喋り間隔誤差【タブ】[全半角数字]†
- %指定
- 「**%」と数値以外の文字が付いた場合、文字は無視される。
システム設定†
$見切れてても喋る【タブ】有効†
$呼び出し回数制限【タブ】[全半角数字]†
- 里々Mc128-1以降で使用可。
- 数値を代入し、最大呼び出し回数を設定する。
- デフォルトでは200。
- 主にcallによる呼び出し回数を制限している。
- callによる再帰ループとか多用する人(俺みたいな人)とか最低2000は欲しいところ。
ジャンプ回数制限†
会話時サーフェス戻し†
- $会話時サーフェス戻し=強制で、スクリプトの頭で必ずサーフェス戻しを実行
- 有効
- 強制
※それ以外無効
サーフェス加算値○†
デフォルトサーフェス○†
$SAORI引数の計算【タブ】[任意のコマンド]†
$引数区切り追加【タブ】[任意の1文字]†
- callやSAORI呼び出しに使う引数区切りを追加できる。
$引数区切り追加【タブ】(バイト値、5)
(split(バイト値、5)(html)(バイト値、5)<)
- ちなみに起動直後では
$引数区切り追加【タブ】、#全角句点
$引数区切り追加【タブ】、#半角句点
$引数区切り追加【タブ】,#全角カンマ
$引数区切り追加【タブ】,#半角カンマ
$引数区切り追加【タブ】(バイト値,1)
- が有効。
- この変数はセーブデータに保存されないので、OnSatoriLoadやOnSatoriBootなどに入れておくと吉。
$引数区切り削除【タブ】[任意の1文字]†
$自動セーブ間隔【タブ】†
$セーブデータ暗号化【タブ】有効†
- セーブデータを暗号化する
- 「有効」以外の文字を入れると無効。
なでられ設定†
トーク中のなでられ反応†
なでられ持続秒数†
なでられ反応回数†
れしば†
$Log【タブ】[有効]†
- れしばにログを送るか否か
- 「有効」以外の文字を入れると無効。
- れしばにログのリクエストの部分を送るか否か
- 「有効」以外の文字を入れると無効。
- れしばにログの里々の内部動作の部分を送るか否か
- 「有効」以外の文字を入れると無効。
- れしばにログのベースウェアに返す値の部分を送るか否か
- 「有効」以外の文字を入れると無効。
括弧取得の設定†
$単語群「[単語群名]」の重複回避【タブ】[呼び出す方法]、[有効期間]†
$文「[単語群名]」の重複回避【タブ】[呼び出す方法]、[有効期間]†
- コマンド区切りに使える文字「、」「,」
- 呼び出す方法
- 「直前」
- 「降順」or「正順」
- 「昇順」or「逆順」
- 「有効」or「完全」
- 「無効」
- 有効期間
トーク予約†
$次のトーク【タブ】[トーク名]†
$次から[全半角数字]回目のトーク【タブ】[トーク名]†
- 次の任意の回数のトーク後にで喋るトークを予約できる。
$トーク予約のキャンセル【タブ】[トーク名]†
- 値に「*」を指定することで予約トークを全てキャンセルできる。
$トーク予約のキャンセル【タブ】*
タイマ†
$[トーク名]タイマ【タブ】[全半角数字]†
$全タイマ解除†
$全タイマ解除 実行
実行変数†
- 特定の名前の変数に特定の値を入れると里々が何らかの動作をする。
- 関連リンク
$教わること†
$Value[全半角数字]【タブ】[任意の値]†
$今回は喋らない【タブ】有効†
$辞書リロード【タブ】実行†
$辞書フォルダ【タブ】[フォルダパス]†
$手動セーブ【タブ】実行†
品質保証部†
- クレーム対応とかしてます
- 採用条件について。
「先に条件式のあるトーク要素を評価して、真のトーク要素が無かった場合
、条件式のないトーク要素がランダムに採用される」とありますが、実際には「条件式が無い場合、常に条件式が真と判断される」が正しいようです。つまり、条件式が真のトークの有無に拘わらず、条件式が無いトークは採用される可能性があります。 -- 匿名
|