カードワース 私家版エンジン(Next,Py)の識別
雑多メモ@私家版エンジン関連情報
- 互換性まとめ
- どのエンジン向けに作るか
- 私家版の識別
私家版エンジンの種類とバージョンを見分ける
敢えて正規版のバグを利用したシナリオを作りたい、正規版とは仕様が異なる部分に触れるため注意書きを出したい、といった限られた状況下で使えると思います。見分けポイントは、以下の通りです。
- 対象消去後のNPCをランダム選択で選択出来たらCW1.50。
選択できなければNext1.60。 - フラグ判定やステップ判定直前の値の変更が検出できなければNext1.60。
正常に検出できたらCW1.50かPy。- 明らかにバグなので、今後修正される可能性も? この方法による見分けは、いずれ使えなくなる可能性あり。
- Py0.12.1~0.12.2開発版は、範囲「フィールド中の誰か一人」のクーポン分岐で同行NPCの称号が検出できることで見分けられる。
ただし、クーポン分岐の適用範囲に「フィールド中の誰か一人」が無かったCW1.30より古いエンジンでは状況によらず成功するため、最低でもCW1.30相当の機能を有する事を確認する必要がある。- さらに、睡眠中のキャストに対して「吸収」を行った際、睡眠状態が解除されなければPy0.12.1。
睡眠状態が解除されればPy0.12.2開発版。
- さらに、睡眠中のキャストに対して「吸収」を行った際、睡眠状態が解除されなければPy0.12.1。
- Py0.12.2の正式版からは、2種類のエンジンバージョン識別用仮想クーポンが実装されている。
- 1つ目は、バージョンアップ毎に追加されていくもの。
こちらのv.0.12.2分が検出できれば、v.0.12.2正式版以降のPyである事が確定。 - 2つ目は、バージョン固有のもの。
Pyのバージョンを知りたい時は、こちらを利用する。
- 1つ目は、バージョンアップ毎に追加されていくもの。
識別は、以下のような流れで行います。
(パッケージ内に下記イベントを作成し(※1)、CW1.50相当の機能を持ったエンジンである事を確認してからリンク/コール(※2))
▼私家版判定
└◆<キャスト離脱>その時点で加入しているNPCを全て離脱させる
└◆<キャスト加入>判定用キャストカードを加入させる
└◆<クーポン分岐>フィールド全体の誰か1人が、識別用キャスト専用称号を所持?
├[成功]
│└◆<効果>味方全員に必中・無属性で睡眠→HP吸収の順で効果付与
│ └◆<状態判定分岐>全員が睡眠?
│ ├[成功] →CWPy0.21.1→回復後、判定用キャストを離脱させて終了
│ └[失敗]
│ └◆<状態判定分岐>全員が中毒?(←CW1.20互換として動作中のPy0.21.1を見分ける)
│ ├[成功] →CWPy0.21.1→回復後、判定用キャストを離脱させて終了
│ └[失敗] →CWPy0.21.2(開発版)→回復後、判定用キャストを離脱させて終了
└[失敗]
└◆<クーポン分岐>誰かが「@CardWirthPy Version.0.12.2」所持?
├[成功]
│└◆<クーポン分岐>誰かが「@CardWirthPy Version.0.12.2 Only」所持?
│ ├[成功] →CWPy0.21.2(正式版)→判定用キャストを離脱させて終了
│ └[失敗] →CWPy0.21.3以降─(※3)→判定用キャストを離脱させて終了
└[失敗]
└◆<ランダム選択>対象=NPC全体
├[失敗] →CW1.30以前?→判定用キャストを離脱させて終了
└[成功]
└◆<効果>選択中メンバを対象消去(絶対成功するようにしておく)
└◆<ランダム選択>対象=NPC全体
├[成功] →CW1.50 →判定用キャストを離脱させて終了
└[失敗] →CWNext1.60 →判定用キャストを離脱させて終了
└◆<キャスト離脱>その時点で加入しているNPCを全て離脱させる
└◆<キャスト加入>判定用キャストカードを加入させる
└◆<クーポン分岐>フィールド全体の誰か1人が、識別用キャスト専用称号を所持?
├[成功]
│└◆<効果>味方全員に必中・無属性で睡眠→HP吸収の順で効果付与
│ └◆<状態判定分岐>全員が睡眠?
│ ├[成功] →CWPy0.21.1→回復後、判定用キャストを離脱させて終了
│ └[失敗]
│ └◆<状態判定分岐>全員が中毒?(←CW1.20互換として動作中のPy0.21.1を見分ける)
│ ├[成功] →CWPy0.21.1→回復後、判定用キャストを離脱させて終了
│ └[失敗] →CWPy0.21.2(開発版)→回復後、判定用キャストを離脱させて終了
└[失敗]
└◆<クーポン分岐>誰かが「@CardWirthPy Version.0.12.2」所持?
├[成功]
│└◆<クーポン分岐>誰かが「@CardWirthPy Version.0.12.2 Only」所持?
│ ├[成功] →CWPy0.21.2(正式版)→判定用キャストを離脱させて終了
│ └[失敗] →CWPy0.21.3以降─(※3)→判定用キャストを離脱させて終了
└[失敗]
└◆<ランダム選択>対象=NPC全体
├[失敗] →CW1.30以前?→判定用キャストを離脱させて終了
└[成功]
└◆<効果>選択中メンバを対象消去(絶対成功するようにしておく)
└◆<ランダム選択>対象=NPC全体
├[成功] →CW1.50 →判定用キャストを離脱させて終了
└[失敗] →CWNext1.60 →判定用キャストを離脱させて終了
(※1)なぜパッケージ内か?
- イベントをパッケージ内に作成するのは、CW1.30で追加された新しいコンテント(ランダム選択)を含むためです。
イベントをエリア上に作成すると、CW1.30より古いエンジンでシナリオ開始時にエラーが発生することがあります。
- ランダム選択コンテントの対象に「NPC全体」を指定できるようになったのは、CW1.50からです。
Nextの識別には、エンジンが最低でもCW1.50相当の機能を持っていることが必要です。 - クーポン分岐に「フィールド中の誰か一人」の条件が追加されたのはCW1.30です。
CW1.29までは、「フィールド中の誰か一人」の条件でクーポン分岐を実行すると、必ず成功します。
Pyの識別には、エンジンが最低でもCW1.30相当の機能を持っていることが必要です。
[▲上へ]
CardWirthNextの識別可能なバージョンと注意点
Nextの識別はNPC対象消去バグが修正された結果を利用しているため、今後もそれなりに長く使えるものと思います。- 確認済みバージョン
- Next1.60と識別される
- CardWirthNext(v.1.6.0.14)
- Next1.60と識別される
- ランダム選択の修正は1.6.0.1~1.6.0.14の間ですが、どの時点で行われたのかは不明です。
CardWirthNext初期バージョンを正しく識別できない可能性があります。
CardWirthPy(Reboot)の識別可能なバージョンと注意点
v.0.12.2(正式版)以降は、エンジンバージョン識別用の仮想クーポンによって見分けます。それより前は、CW1.50との挙動の差やバグによって見分けます。
- 確認済みバージョン
- Py0.12.1 (Reboot)と識別される
- CardWirthPy(v.0.12.1)
- Py0.12.2 (Reboot)と識別される
- CardWirthPy(v.0.12.2β1)
- CardWirthPy(v.0.12.2 RC3)
- CardWirthPy(v.0.12.2)
- Py0.12.1 (Reboot)と識別される
- v.0.01~0.12(Reboot以前)については、本体を持っていないため確認ができていません(今後もできません)。
- ここにないより新しいバージョンでもバージョン識別クーポンが使えるため、今後識別に困ることはなさそうです。
CardWirthPyの互換モードについて
CardWirthPyには「互換モード」という動作モードがあり、CW1.20(?)~1.30に相当する環境でシナリオをプレイできるとされています。ただし、互換モードでも、全てにおいて互換指定したエンジンと同じ動きをするわけではありません。
- 例えば、PCとメニューカードのどちらが上になるかや、CW1.20の状態判定バグなど、シナリオ進行に支障がでるような重要部分は互換指定したエンジンの動きが再現されます。
- 一方で、例えば仮想システムクーポン「@MP3」の検出や、CW1.30以降の状態判定分岐の拡張(混乱、沈黙などの判定)などは、CW1.50と同じ動き方です。
バグについても、CW1.20で睡眠者を絶対成功で攻撃すると睡眠が解除されないなど細かいものは再現されません。
- ただし、事前にCW1.50相当を確定させる際、CW1.20識別から始めてより新しいバージョンの識別に進んでいく方法を使うと、正しく識別できません。
- 正規エンジン識別の例のように最初に状態判定で沈黙を検出できるかを調べ、検出できたら私家版判定へ/検出できなければCW1.30以下の判定に進む、という形で実行してください。
対応するWSNバージョンを表すシステム称号について
Pyには、エンジンバージョンの識別クーポンとは別に、WSNの対応状況を識別するための仮想クーポンも存在します。- v.2α1からの実装のため、Wsn.2以降が対象になります。Wsn.0、Wsn.1への対応を表す仮想クーポンはありません。
対応するWSNバージョンが増えるごとに、「@Wsn.2」「@Wsn.3」……と増えていく模様。 - WSN形式の仕様追加は順次行われていくため、例えば「@Wsn.2」が検出できても、より新しく追加されたWsn.2の仕様には対応していないといった状況が発生する可能性はあります。
ただ、これまでWSNの仕様追加はメジャーバージョンアップの際の開発段階(α版、β版の間)に行われています。今後も今まで通りなら、開発に参加せず、正式版のみを使う一般利用者については問題ないはずです。 - PyエンジンのWSN対応バージョン識別クーポンとは別に、Wsn.2以降対応のCWXEditorで保存されたPy専用形式のシナリオは、それ自体がデータバージョンの情報を持っており、エンジン側で一部の新機能について実行可能かの判定に使われています。
- Wsn.2以降の新仕様を含むシナリオを、Wsn.2非対応のCWXEditorで編集して保存できる場合もありますが、そうするとシナリオ側のデータバージョン情報が消えてしまいます。その結果、シナリオ内容が変わらないのに、Wsn.2対応のPyエンジンでプレイしても仕様通りの効果が出ない現象が起きる場合があります。
通常、エディットツールは最新版のみを残すと思いますが、複数バージョンを併用している環境では注意が必要です。 - シナリオデータバージョンをチェックしてから実行される新機能は、WSN形式のシナリオでないと効果が出ないため、CW1.50仕様のシナリオにWSN仕様を混在させる形のシナリオが正常に動作しない場合があります。
- Wsn.2以降の新仕様を含むシナリオを、Wsn.2非対応のCWXEditorで編集して保存できる場合もありますが、そうするとシナリオ側のデータバージョン情報が消えてしまいます。その結果、シナリオ内容が変わらないのに、Wsn.2対応のPyエンジンでプレイしても仕様通りの効果が出ない現象が起きる場合があります。