対応エンジン
Sakuraは内部的に2つの独立したエンジンフレームワークでゲームを動かしています。classicエンジン(NScripter/ONScripter)と、うみねこのなく頃にのような、より新しく負荷の高いタイトルで使われるGPUアクセラレーション版のフォークであるONScripter-RUです。
エンジンマトリクス
Section titled “エンジンマトリクス”| エンジン | 表示名 | バッジ | 用途 |
|---|---|---|---|
| NScripter / ONScripter(Shift-JIS) | ONScripter | NScr | 従来の日本語エンコードのゲーム |
| NScripter / ONScripter(UTF-8) | ONScripter | NScr | UTF-8のファン翻訳・リパック版 |
| ONScripter-RU | ONScripter-RU | RU | Uminekoなど、GPU世代のゲーム |
classicの2つのバリアントはエンコーディングの違いであり、別のエンジンではありません — どちらもライブラリ上は「ONScripter」として表示され、エンコーディング(Shift-JISまたはUTF-8)はゲームの詳細チップに個別に表示されます。
ゲームをインポートすると、Sakuraはそのファイルをスキャンして必要なエンジンを判定します — 手動で選びたい場合を除き、選択する必要はありません。検出は次の順序で行われます。
script.fileが存在する → ONScripter-RU。これはONScripter-RUが使用するパック済みスクリプト名で、classicエンジンがこの名前のファイルを生成することはないため、単独でも信頼できるシグナルです。fonts/フォルダと0.txtが両方ある → ONScripter-RU。リパックされたRUゲームの一部は素の0.txtを同梱しますが、それと一緒にある必須のfonts/サブフォルダが決め手です — classicゲームがこれを同梱することはありません。単独のブートスクリプト → classic ONScripter:
0.txt/00.txt→ Shift-JIS0.utf/0.utf.txt/00.utf/00.utf.txt→ UTF-8nscr_sec.dat/nscript.___/nscript.dat→ Shift-JISpscript.dat→ UTF-8
(もしゲームがShift-JISとUTF-8両方のマーカーを同梱している場合、Shift-JISが優先されます。)
アーカイブのみのインポート — フォルダにパック済みアーカイブ(
arc*.nsa、*.ns2、*.sar)のみが含まれ、単独のブートスクリプトがない場合でも、正しいライブラリバッジが付くようclassic ONScripterとしてタグ付けされます。それ以外の場合、ゲームは不明としてマークされます。
手動での上書き
Section titled “手動での上書き”各ゲームの設定 → エンジンピッカーでは、検出結果に頼らず自動 / ONScripter / ONScripter-RUを強制的に指定できます。これはゲームごとの固有設定であり、「グローバル設定を使用」トグルの影響を受けません。次にそのゲームを起動したときから適用されます。
各エンジンが対応する機能
Section titled “各エンジンが対応する機能”classicエンジンとONScripter-RUは機能面で同等ではありません。RUは負荷の高いゲームを問題なく動かすことに重点を置いた新しいGPUベースのフォークであり、classicエンジンの追加機能の多くに対応するフックを備えていません。
classic ONScripter(NScripter/ONScripter、Shift-JISまたはUTF-8)
Section titled “classic ONScripter(NScripter/ONScripter、Shift-JISまたはUTF-8)”- レンダリング倍率、アップスケールフィルタ(Smooth/xBRZ/Sharp)、コントラスト適応型シャープ化(CAS)。ゲームごと、またはゲームオーバーレイでリアルタイムに調整可能
- ロールバック/巻き戻し。ロールバックの深さは調整可能
- 未読テキストをスキップ
- ランタイムでのフォント切り替え(ゲームフォルダのフォント、Sakura同梱フォント、インポートしたフォントライブラリ)
- 自動翻訳(Appleのオンデバイス翻訳、iOS 18以降) — 詳細は翻訳を参照
- テキスト言語/メニュー言語の自動判定
ONScripter-RU
Section titled “ONScripter-RU”- オートモードのタイミングとオーディオバッファサイズ(classicと共通)
- ゲームIDとNSAオフセットの上書き(classicと共通)
- 表示フィルタ(レンダリング倍率/アップスケール/CAS)なし、ロールバックなし、未読スキップのトグルなし、ランタイムのフォント切り替えなし、翻訳なし — RUにはこれらいずれの制御フックもないため、動作しない設定項目を表示する代わりに、Sakuraはこれらの設定をRUゲームでは完全に非表示にします。ゲームごとの設定画面には、この理由を説明する簡潔な「エンジンの制限」の注記が表示されます。
- ゲーム内オーバーレイも同じ制限を反映します。RUのクイックメニューにはスキップとオートモードの操作のみが表示され(巻き戻しはなし)、フルオーバーレイメニューでは「タイトルに戻す」とエンジン内メニューのショートカットが無効化されます。これらもRUが対応していないためです。
セッションごとに1エンジンファミリーというルール
Section titled “セッションごとに1エンジンファミリーというルール”両方のエンジンフレームワークは、それぞれ独自のSDL2を組み込んだ自己完結型のネイティブライブラリです。同一の実行中アプリで両方を同時に読み込むのは安全ではないため、Sakuraは1つのアプリセッションにつき1つのエンジンファミリーのみを許可します。classicゲームまたはONScripter-RUゲームのどちらかを起動した後は、そのセッション内で起動する他のすべてのゲームが同じファミリーである必要があります。ONScripter-RUはさらに、クリーンなシャットダウン経路がclassicエンジンより新しいため、セッションにつき1回の実行に制限されています。
すでに使用中のものとは異なるエンジンファミリーが必要なゲームを起動しようとすると、Sakuraはそのまま起動する代わりに再起動が必要ですアラートを表示します。
「このゲームは、今回のセッションで既に使用しているものとは別のエンジンで動作します。アプリを閉じて開き直し、このゲームを最初に起動してください。」
アプリを閉じるを選ぶとSakuraが終了するので、再起動して別のゲームから始められます。Uminekoのようなclassicゲームと RUゲームを行き来する場合は、その都度アプリを再起動することになります。