このページでは、仕様混在シナリオに関する情報を紹介します。
1.50仕様のシナリオにNext・Pyの独自機能を混ぜ込んで、私家版で再生したときだけ専用機能を使える全エンジン向けのシナリオを作る方法です。

具体例については百聞は一見に如かず、HANDさんの「バージョン混在サンプル」をご覧ください。

混在の仕組みについて

データバージョン4(CW1.20~1.50仕様)で作成したシナリオの中に、データバージョン7(Next専用)やWSN形式(Py(など)専用)のパッケージデータを混在させると、私家版専用機能ありの【全エンジン向け】シナリオを作ることができます。

データバージョン4でパッケージのリンク・コールの呼び出し先がパッケージの番号(=パッケージID)で管理されていることは、Thomasさんの解析などで知られています。
そのため、【全エンジン向け】シナリオの中で、私家版を識別してエンジンの種類ごとに呼び出すパッケージを変える処理を作り、
  • Nextでプレイする際に呼び出すパッケージをデータバージョン7で独自機能を盛り込んだものに差し替えておけば、【全エンジン向け】を維持しつつ、そこだけNextの独自機能が使える。
  • Pyで使えるWSN形式はファイルの構成が他とは違うが、同じ番号の Package(ID).wid と Package/(ID)_(パッケージ名称).xml があればXML形式の方が優先で読み込まれるため、Pyでも「そこだけWSNの機能」が可能。
……というわけです。
私家版で作成するのが専用機能を使うパッケージのみなので、全体を別々に各エンジン向けに作成するよりメンテナンスが容易です。シナリオに用いる私家版専用機能を、全てパッケージ内部に詰め込める内容なら、検討してみても良いかもしれません。

ただし、PyでパッケージIDが同じならWIDファイルよりXMLファイルが優先で読み込まれるのは意図的な仕様ではない可能性があり、今後変更されない保証はありません。その点には留意すべきです。
また、全く同じXMLのパッケージを実行しても、混在時と純粋なWSNシナリオで挙動が異なる場合があります。
混在シナリオを作成する場合は、各種エンジンで慎重にテストプレイを行った方が良いです。

[▲上へ]

仕様混在シナリオの作り方

以下、CW1.50仕様のシナリオの一場面で、
  • Nextエンジンでプレイしているとき、荷物袋の使用・セーブ・キャンプを禁止する。
    (→Nextの機能「制限」を使用)
  • Wsn.4対応エンジン(Py4以降など)でプレイしているとき、荷物袋の使用を禁止する。
    (→Wsn.4の機能「状況設定」を使用)
という内容のシナリオを作る例で説明していきます。
なお、シナリオ開始時に使用エンジンが「Next」「Wsn.4対応」「それ以外」のどれにあたるかを調べ、結果をステップに保存しておくものとします。

(1)土台となる全エンジン向けのシナリオを作成

まずは、土台となる【全エンジン向け】のシナリオを作成します。
作成に使用できる編集ツールは、シナリオデータの互換性の項でご覧ください。

私家版用パッケージのID確保

公式エンジンや他の私家版でプレイ時にエラーが出ないよう、私家版独自機能を用いるイベントはパッケージ内に作成します。
土台シナリオの作成時、私家版用パッケージが入る場所は、ダミーのパッケージを作成してIDを確保しておきます。
ダミーパッケージの中身は、空で構いません。

<例>
ID=3(Package3.wid)がNextエンジン用、ID=4(Package4.wid)がWsn.4対応エンジン用パッケージのダミーです。
どちらも、作成ボタンを押しただけの空パッケージです。
[img:ダミーパッケージ作成例]

イベント作成例

私家版独自機能を使う箇所は、それ用のダミーパッケージをリンク or コール(呼び出し)しておきます。
この段階ではパッケージの中身が空なので、私家版でテストしても何も起こりません。
後で私家版で作成したパッケージを導入すると、私家版専用機能が使えるようになります。

<例>
私家版の種類とバージョンを示すステップの値に応じて、対応した専用機能パッケージ(のダミー)を呼び出しています。
[img:イベント作成例]

(2)私家版用パッケージの作成

私家版用のパッケージを、それぞれ専用の作成ツールで作成します。
ID(パッケージの番号)と名称は、土台シナリオと一致させておきましょう。
  • Py用のシナリオは、「展開されたWSN(XML)形式シナリオ」として保存してください。
  • 私家版用パッケージ内からフラグやステップ、他のパッケージなどを参照する場合は、それらの参照先も土台シナリオと私家版側でID(IDがあれば)・名称が一致するように準備しておいてください。
<例>
▼「制限」を用いたNext用のパッケージ。Next付属のWirthBuilderで作成。
土台シナリオでNext用パッケージのIDは3なので、Package3.wid にイベントを作成します。
[img:Next用パッケージ]

▼「状況設定」を用いたWsn.4対応エンジン用のパッケージ。Wsn.4対応のCWXEditorで作成。
土台シナリオでWsn.4対応エンジン用パッケージのIDは4なので、同じくIDが4のパッケージにイベントを作成します。
[img:Py用パッケージ]

(3)公開用データの作成

Next仕様を混在させる場合は、公開用のデータは土台シナリオの複製を用い、必ず混在前の状態を残しておいてください
この後、私家版用パッケージの導入段階で、【全エンジン向け】のパッケージファイルを【Next専用】のパッケージファイルで上書きします。このため、複製を作らずに土台シナリオに直接上書きすると、
  • 後で土台シナリオを更新したくなったとき、Next仕様の部分が認識できず、編集に支障が生じることがある。
  • 上書きするパッケージを間違ったとき、(バックアップがなければ)誤って上書きしたパッケージを最初から作り直すことになる。
といった問題が生じます。
Wsn仕様のみの混在なら、土台シナリオをそのまま公開用データとしても構いません。

(4-1)Next用パッケージの導入

Next用のパッケージは、公開用データのフォルダにコピーし、同名ファイルに上書きします。

<例>
例では、ID=3がNext用パッケージです。
(2)で作成したNext用のシナリオから Package3.wid を公開用データのフォルダにコピーし、同名ファイルに上書きします。
[img:Next用パッケージの導入]

(4-2)Py用パッケージの導入

Py用のパッケージは、公開用データのフォルダ内に「Package」フォルダを作成し、必要な分だけその中にコピーします。
ダミー用のパッケージは、そのままにしておいてください。削除する必要はありません。

<例>
例では、ID=4がPyなどWsn.4対応エンジン用パッケージです。
(2)で作成したWSN形式シナリオのフォルダを開き、「Package」フォルダの中を見てください。格納されているXMLファイルは、ファイル名の先頭がパッケージのIDです。名称が「04_(パッケージ名称).xml」となっているXMLファイルを、公開用データフォルダ内の「Package」フォルダにコピーします。
ダミーとして作成した Package4.wid は、そのままにしておきます。
[img:Py用パッケージの導入]

作成手順は、以上です。

[▲上へ]

仕様混在できない例外について

Wsn.2の機能のうち、以下のものは、今のところPyエンジン上での混在ができません。
  • 特殊文字 $??Player1~6$ によるセリフ・メッセージ内でのPC名表示
  • 専用のシステム称号(@効果対象 など)による機能拡張
混在状態では、Wsn.2以降に対応したPyで再生しても、セリフやメッセージ中の「$??Player1$」はそのまま「$??Player1$」と出力されるし、本来効果対象外のキャラが「@効果対象」クーポンを持っていても、効果の範囲が拡大されることはありません。
(→実際に試してみたい方は、サンプルをご利用ください。)

これは、バージョン2以降のPyエンジンがこれらをWSN独自の機能として扱うかを判断する際、シナリオのサマリに書き込まれているWSNのデータバージョンを見ているためです。XML形式のパッケージにもデータバージョンの情報は入っていますが、シナリオの土台がデータバージョン4のためサマリからシナリオのデータバージョンが読み取れず、Wsn.2シナリオと解釈されません。テキスト入力に依存し、Wsn.2非対応のエディットツールで作成したシナリオにも現れる可能性があるものに対する安全策と思われます。
なお、同じ場所にSummary.wsmとSummary.xmlの両方がある場合は、Summary.wsmの方が優先されるようです。土台シナリオ(データバージョン4)のフォルダにSummary.xmlを入れても、貼紙はSummary.wsmの方が表示され、XML形式のパッケージが読み込まれた際にWSN仕様と認識されることもありませんでした。

今後、Pyでこうした場合のWSNデータバージョンの読み込み先が変わるなどの仕様変更があれば別ですが、基本的に、非対応ツールでも入力可能なものについては混在できないと考えた方が良いでしょう。

※※※
ちなみにNextでは、データバージョン4のシナリオ(CW1.20~1.50仕様)のシナリオでも、セリフやメッセージに「$??Player1$」と書かれていれば_1の名前が表示されます。こちらは、通常の文章でまず使われることがない「$??Player1~6$」は、専用シナリオでなくてもPC名と解釈して問題ないということでしょうか。
同種の機能で、エンジンによって扱いが分かれるのは面白いですね。

[▲上へ]