13. 段階移行 vs 全置換
「少しずつ湊に移す」ことはできるのか、それとも一度に全部置き換えるのか。この節では、機能ごとの状況と、移行の進め方を整理します。
先に結論
基本は「全置換」です。 1つのゴーストで動かせるSHIORIは1つだけなので、里々と湊を同時に動かすことはできません。「里々のまま、湊の機能だけ足す」ことはできません。
段階的に進めたい場合は、辞書を移植しながら、まだ移していない部分だけ里々をSAORIとして呼ぶ、という方法が考えられます(下記)。ただし、この方法は、このガイドでは実機のSSPでは検証していません。
機能ごとの星取表
凡例は次のとおりです。
- ◎ 里々とほぼ同じように書ける
- ○ 書き換えれば同等のことができる
- △ 制限がある、または自作が必要
- ✕ なし
| 機能 | 判定 | 移行のメモ |
|---|---|---|
| トーク定義・同名トークからのランダム選択 | ○ | 書式が違う。一巡保証の固定(4.) |
| 採用条件 | ○ | トーク定義だけ(4.) |
| 単語群 | △ | 専用構文なし。配列か同名トークで(6.) |
ジャンプ(>) | ○ | call + return(4.) |
| 変数(保存) | △ | 自動保存されない。型がある(5.) |
| セーブデータの引き継ぎ | △ | 自動変換はない。台本での取り込みか変換スクリプト(9.) |
| 選択肢 | ○ | \q[…] を手書き。ラベル=トーク名の形も可能(7.) |
| ランダムトーク | ○ | OnRandomTalk。間隔は save.json に注意(3.) |
SSPの基本イベント(OnBoot など) | ◎ | ほぼそのまま(3.) |
| 里々独自のイベント(なでられなど) | △ | 自作(3.) |
自動ウェイト・replace.txt | ✕ | 手書き、または関数(7.) |
| スコープ切り替えの自動処理 | ✕ | 話者を毎回書く(7.) |
| サーフェスの自動処理 | ✕ | トークごとに書く(7.) |
| SAORI呼び出し | △ | Result が取れない場合がある。1イベント10回まで(8.) |
| 文字列操作 | ◎ | 組み込み関数で足りる。ssu.dll は不要になることが多い |
| ループ・関数 | ◎ | 里々よりずっと素直に書ける |
| 配列・マップ | ◎ | 里々にはない(12.) |
| 正規表現・ファイル操作 | ◎ | 里々にはない(12.) |
| 情報取得変数 | △ | now reference get_property()。ない項目は自作(5.) |
| NOTIFY の自動保存 | ✕ | 必要なイベントを自分で受ける |
| アンカー・コミュニケート | ✕ | 専用構文なし(11.) |
トーク予約($次のトーク) | ✕ | さくらスクリプトで代用 |
| 辞書リロード・マルチ辞書 | ✕ | include だけ |
| 構文チェック | ◎ | minato_check がある(12.) |
全置換の進め方
- 土台を作る(2.)。
config.tomlとmain.mnt、OnBootで「こんにちは」を出す。 - セーブデータの移行を先に決める(9.)。既存のユーザーがいるなら、この設計が一番重い。変数を
saveの下に置くかどうか、型をどうするか、を決めてから書き始める。 - 起動・終了・ランダムトークを移す(3.、4.)。ゴーストが「喋る」状態にする。
- 反応(マウス操作、選択肢)を移す(3.、7.)。
- SAORI、特殊機能を移す(8.、11.)。
minato_checkでチェックし、実機で通しで動かして、14. FAQにあるような「動くが結果が違う」箇所を確認する。
辞書の移植は、1トークずつ手で書き直す作業になります。機械的な変換ツールはありません。* の中身を 湊: に、() を ${} や call に直す作業は、パターンが決まっているので、ファイルごとに順に進められます。
段階的に進める方法(実験的)
里々は、SAORIとして呼び出すこともできます(里々Wikiの「SAORI/里々」)。Argument0 に *トーク名 や @単語群名 を渡すと、里々のルールで整形されたさくらスクリプトが返ります。
湊から里々のSAORI版を呼べば、「移植済みの部分は湊、未移植の部分は里々」という状態を作れるはずです。
OnRandomTalk => {
// 湊で書き直したトークがなければ、里々のトークを借りる想定
let r = saori("saori/satori.dll", "旧トーク名")
return r[0]
}
ただし、次の点に注意が必要です。このガイドでは、この方法を実機では確認していません。
- 里々のSAORI版は、独自の
satori_savedata.txtを持ちます。湊のsaveとは別の変数になり、片方の変更がもう片方に反映されません。 - 里々のSAORI版は、SSPのイベントを受け取りません。呼び出すタイミングは、湊が決める必要があります(里々Wikiの注意点)。
- 里々の選択肢記法(
_)や\q[…]を、SAORIとして呼ぶトークの中で使うには注意が必要です。里々が選択肢のタグに内部用の情報(バイト値)を挿入するため、受け取る側がそれを想定していないと、選択肢の飛び先が正しく動きません(里々Wikiの注意点)。選択肢は、湊側で\q[…]を書くのが安全です。 - 湊は、SAORIの
Resultを、Value0があると取り出せません(8.)。里々のSAORI版が返す内容によっては、期待どおりに受け取れない可能性があります。 - 1イベントあたりのSAORI呼び出しは10回まで、応答は5秒までです。
変数の共有が難しいため、この方法が向くのは、変数をあまり使わない読み物のようなトークに限られます。
どちらを選ぶか
| ゴーストの状況 | おすすめ |
|---|---|
| 小規模(トークのファイルが数個、変数が少ない) | 全置換。数日で終わる |
| セーブデータ(変数)が多い・ユーザーが多い | 全置換。移行の設計(9.)に時間をかける |
SAORI依存が大きい(Result を使う) | 全置換の前に、8.の制限を確認する |
| 里々独自の機能(アンカー、コミュニケート、トーク予約)に依存している | 移行しない、または機能を諦めて全置換 |
| 大規模で、少しずつ移したい | 上の実験的な方法を、小さく試してから判断する |
次は14. FAQ: 見た目は同じで結果が違うに進んでください。