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.)

全置換の進め方

  1. 土台を作る(2.)。config.toml と main.mnt、OnBoot で「こんにちは」を出す。
  2. セーブデータの移行を先に決める(9.)。既存のユーザーがいるなら、この設計が一番重い。変数を save の下に置くかどうか、型をどうするか、を決めてから書き始める。
  3. 起動・終了・ランダムトークを移す(3.、4.)。ゴーストが「喋る」状態にする。
  4. 反応(マウス操作、選択肢)を移す(3.、7.)。
  5. SAORI、特殊機能を移す(8.、11.)。
  6. 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: 見た目は同じで結果が違うに進んでください。