11. 里々/YAYAにあるが湊にない機能
「使っている機能が湊にあるか」を確認するための一覧です。「なし」と書いたものは、代替手段があれば併記しています。
凡例: ✕ なし / △ 一部あり・自作が必要 / ○ 別の形である
里々にあって湊にない機能
辞書の書き方に関わるもの
| 里々の機能 | 湊 | 代替・備考 |
|---|---|---|
括弧展開 ()、入れ子の展開 | ○ | ${…} と call(5.、6.) |
$ による代入・変数の自動保存 | △ | global save.…(5.) |
単語群 @ | △ | 配列、同名トークと return(6.) |
ジャンプ > | △ | call と return(4.) |
選択肢 _ | △ | \q[ラベル,ID] と OnChoiceSelect(7.) |
: による話者の自動交代 | ✕ | 話者を毎回書く |
辞書ファイル名(dic*.txt)による自動読み込み | ✕ | main.mnt から include で明示する |
| 採用条件を単語群・ジャンプにも付ける | ✕ | トーク定義の if(…) だけ |
全角記号の演算子・関数名(+、== など) | ✕ | 半角のみ |
| 変数名の全角・半角の同一視 | ✕ | A と A は別の名前 |
自動でやってくれていた処理
| 里々の機能 | 湊 | 代替・備考 |
|---|---|---|
自動挿入ウェイト、replace.txt / replace_after.txt | ✕ | \w を手書き、または replace() の関数(7.) |
スコープ切り替え時の挿入($スコープ切り替え時) | ✕ | \n[half] などを自分で書く |
$トーク開始時、$スクリプトの一番頭 | ✕ | 各トークの先頭に書く |
$会話時サーフェス戻し、$デフォルトサーフェス○、$サーフェス加算値○ | ✕ | トークごとに \s[…] を書く |
重複回避の方式の切り替え($文「○」の重複回避 など) | ✕ | 「一巡」に固定(4.) |
$呼び出し回数制限、$ジャンプ回数制限 | ✕ | 固定値(下の制限一覧) |
辞書の # コメント | ○ | // と /* … */ |
イベント・状態に関わるもの
| 里々の機能 | 湊 | 代替・備考 |
|---|---|---|
| 独自イベント(なでられ、つつかれなど) | △ | 自作(3.) |
*OnSatoriLoad など、里々固有のライフサイクル | ✕ | main.mnt 直下の global 文がロード時に実行される |
情報取得変数((現在時)、(起動回数)など) | △ | now、reference、get_property()。起動回数などは自作(5.) |
NOTIFY の自動保存($NOTIFYの自動保存、(導入済み○○)) | ✕ | 該当するイベントを自分で受けて、global に保存する |
トーク予約($次のトーク) | ✕ | \![raise,…]、\![timerraise,…] などさくらスクリプトで |
コミュニケート(→、$Value0) | ✕ | 専用構文はない。受け取る側は OnCommunicate を普通のイベントとして書ける |
| アンカー辞書(自動アンカー) | ✕ | 専用構文はない。\_a[ID] はさくらスクリプトなので使える |
辞書リロード、$辞書フォルダ、マルチキャラ辞書切り替え | ✕ | include による静的な分割のみ |
セーブ関連($手動セーブ、$自動セーブ間隔、$セーブデータ暗号化) | ✕ | 保存は終了時と再読み込み時だけ(9.) |
関数
里々の関数のうち、湊の組み込み関数で置き換えられるものです。
| 里々 | 湊 |
|---|---|
(for,…) (while,…) (times,…) | for、foreach、while |
(set,変数,値) | 変数 = 値、global save.変数 = 値 |
(calc,式) | 式をそのまま書く |
(sprintf,書式,…) | format("書式", …) |
(length,文字列) | len(文字列) |
(replace,文字列,前,後) | replace(文字列, 前, 後) |
(when,条件,真,偽) | choose(条件, 真, 偽) |
(iflist,…) (whenlist,…) | if … else if、match |
ssu.dll の substr split count replace | substr split count replace(split は配列を返す) |
ssu.dll の erase(消去) | replace(文字列, 対象, "") |
ssu.dll の compare | == |
ssu.dll の if unless switch nswitch | if、match、choose |
YAYAにあって湊にない機能
YAYAの機能の対応は付録Aにまとめています。主なものだけを挙げます。
| YAYAの機能 | 湊 | 代替・備考 |
|---|---|---|
EVAL(文字列をコードとして実行) | ✕ | なし |
名前空間(A.B のような関数名) | ✕ | トーク名や関数名に . は使えない |
関数のオプション(: nonoverlap : sequential など) | △ | nonoverlap に当たる動きは、同名トークで常に働く。順番に出すなら自作(6.) |
型の判定(GETTYPE、ISINTEGER) | ○ | is_num()・is_str()・is_null()・type_of() など |
ファイル操作(FOPEN FREAD FWRITE FDEL FENUM など) | △ | file_read file_write file_append file_move のみ。1行ずつ読む処理、削除、フォルダの列挙はない |
システム辞書(yaya_shiori3.dic)が提供する機能 | ✕ | OnBoot などは自分で書く |
湊の設定項目と、読まれない項目
config.toml の設定です。
| 項目 | 内容 |
|---|---|
[characters] | キャラ名とさくらスクリプトのタグ(必須) |
[settings] talk_interval_secs talk_jitter_secs | ランダムトークの間隔。初回起動後は save.json が優先される(9.) |
[settings] debug_log | true でログを出す。同上 |
[settings] auto_newline | 話者に戻るときの自動 \n(既定 true) |
[settings] shuffle_reset | 読み込まれるが、使われない。 設定しても動作は変わらない |
[settings] encoding | 読み込まれるが、使われない。 通信は常に Shift_JIS |
制限の一覧
湊には、暴走を防ぐための固定の上限があります。里々のように設定では変えられません。
| 対象 | 上限 | 超えたとき |
|---|---|---|
for / while のループ回数 | 2000回 | 打ち切って警告 |
foreach の要素数 | 2000個 | 以降を無視して警告 |
再帰・入れ子の call の深さ | 約100(101段目まで) | それ以上は呼ばれない |
saori() と get_property() の合計 | 1イベントあたり10回 | 呼ばずに空の値を返す。警告が出るのは saori() だけ(get_property() はログのみ) |
| SAORIの応答待ち | 5秒 | 打ち切り、そのSAORIは以後呼ばれない |
台本の { } ( ) [ ] の入れ子の深さ | 200 | 読み込みエラー |
file_read で読めるファイルの大きさ | 1MB | 読めず(null)、警告 |
format の幅・精度 | 1000 | 1000に丸められる |
次は12. 湊だけで簡単になる書き方に進んでください。