マニュアル>シナリオ制作


 CardWirthPyLite/CWXEditor-Classicを使って、CardWirthシナリオ(WSM形式)や、Py専用シナリオ(WSN形式)を作る際の補足情報です。

目次


CWXEditor-Classicについて


 PyLite2.0以降同梱している「CWXEditor-Classic」は、「CWXEditor」のアレンジパック※のようなものです。
原・開発者のk4nagatsuki氏の規約(CC0)に基づいて暗黒騎士がフォークした個人的なバージョンですが、
PyLiteと異なり、特別な機能はありません。

アイコンを変えるだけならリソースオーバーライド機能があるのになぜフォークしたかというと、
「ここからアイコンパックをDLしてこの場所において…」という説明時点で導入が面倒だと思われるのと
アイコンセットを別に同梱するとファイル数が増える(400近くある)のを嫌ったのが最大の理由です。
なので、本家「CWXEditor」に満足している方はこの派生版を使う必要はありません。


CW1.28-1.50やPyReboot向けのシナリオを作るのにCWXEditor-Classicだけ使っても良い?

 問題ありません。
PyLiteとRebootの仕様差を利用すればPyLite専用シナリオを作ることも可能ですが、
特にそうする理由がなければ、クラシック形式シナリオはCW1.50向け、WSN形式シナリオはPyReboot向けに制作した方が良いでしょう。(より多くのプレイヤーが遊べるので)

 なお、特にPy対応を明記していないシナリオが正常に動作しない場合、それは未対応のNEXT形式であるかPy側の不備なので、各シナリオ作者様の迷惑にならないよう、エンジン/エディタ開発者側に報告して頂けると助かります。


CWXEditor-Classicを宣伝・再配布・改造してもいい?

 構いません。オリジナルの規約が「CWXEditorはフリーソフトウェアです。いかなるしがらみにもとらわれず、誰でも自由に使う事ができ、改造する事、再配布する事も自由です。」という事なので、このフォークについても同様に扱って下さい。ただし、groupASKのアイコンを使用しているのでそちらの規約(無償・CW関係のみ)に違反する使い方はNGです。


エンジンはPyLiteを使うが、エディタは純正のCWXEditorを使いたい
 動作はするのですが、オリジナルのCWXEditorは他のフォークの改変部分までは考慮していないため、PyRebootのフォルダに置かず、単体同士で組み合わせる場合にいくつか細かい問題が生じます。

  1. 「Pyの場所」にPyLiteを参照指定できない。(「CardWirthPy.exe」を捜査する設定のため)
  2. Pyの場所にPyLiteを指定する場合、サウンド関係のプレビューでBASSを利用出来ない。
    (サウンドフォントを使用出来ない、一部のOGGファイルを正常に再生出来ない)
 対処としては、1.は直接入力で指定してください。2.はPyLiteのフォルダにある「Settings_Lite.xml」をコピーし、「Settings.xml」にリネームして同時に置いて下さい。そうすれば、CWXEditorはPyLiteをPyだと認識してくれます。


シナリオ側でPyLiteを判定したい


 CWXEditorを使って、クラシック形式シナリオを作る場合はCW1.50仕様(Py系でも遊べる)・WSN形式シナリオを作る場合はPyRebootの仕様に合わせた方が無難で、PyLiteでもそれでほぼ問題なく動作します。

しかしその上で、エンジン間の僅かな挙動の差異がシナリオでやりたいことをするのに致命的になってしまうこともあります。
PyLiteのみでシナリオの挙動を変えたい、あるいはプレイされたくないという場合は、
称号判定分岐コンテントで「@CardWirthPy Lite」を判定して下さい。PyLiteでは、この称号を使った判定は、CardWirth1.29以降、MP3ループが使えるエンジンであることを示す「@MP3」のように必ず成功します。

また、他のPyRebootベースのフォークと同じようにバージョン判定称号も使えます。PyLiteの3.0以降を判定したい時は「@CardWirthPy Lite」と「@CardWirthPy Version.3.0」の両方を使って判定してください。


PyLite「専用」になるのはどんなシナリオか


 上述の特殊称号「@CardWirthPy Lite」を持っていないと入れないシナリオは、PyLite専用シナリオになります。
PyLiteは基本的にCardWirth 1.28-1.50仕様に合わせているので、PyRebootで対応されていない以下の1.28-1.50仕様を利用したWSN形式シナリオまたは以下の機能を使いつつ、素材持ち帰り機能などのPyエンジン専用機能を併用したクラシック形式シナリオが、実質のシナリオ動作上のPyLite専用ということになります。(2023/10/11現在)

バトル仕様


  • 戦闘時、キャスト・召喚獣の行動選択で、同じ回復対象を重複して選ばない
    PyRebootでは重複毎に優先度-1。負傷者が一人でも居た場合、それを対象に取れる回復召喚獣は全て発動する。
    CW1.28-1.50・PyLite3.0以降では2番手以降は発動しない。
    具体的には、「ウンディーネ」を複数体召喚している際の消耗スピードが全く違う。「再生」が重複発動しないなどの違いが生じるので、使用時イベントでそれを織り込んだギミック・カードを作る場合に注意が必要。

  • 戦闘時、キャスト・召喚獣の行動選択で、中毒・麻痺モーションの対象として同じ対象を重複して選ばない
    回復モーションとほぼ同じ挙動。PyRebootでは考慮していない。PyLiteでは5.0以降で対応。

  • 戦闘時、キャスト・召喚獣の行動選択順が異なる
    CW1.20-1.50とPyLite3.0以降では、味方は左から、エネミーはエディタ上の配置順で手前のキャストから行動を決定していくが、PyRebootでは陣営の区別がなく、行動可能な全てのキャストが敏捷度と大胆性で判定を行い、実際の行動順に並び替えてから行動選択を行う。
    上記仕様差と連動して、「回復系カードを選択しやすいキャスト」が異なる(複雑なので、詳細は開発資料>スポイラーを参照)。
     PyReboot 5.0でマージされました。

  • 「カード交換」という名前のカードがアイテム欄1番目に存在するとアクションカード「カード交換」が配布されない
    CW1.20から存在する仕様/不具合。
    これを利用したシナリオを2件確認済みで有用な挙動に思われるためPyLite3.0以降では対応。

  • キーコード所持分岐「アイテム」で戦闘中の手札(技能カード&アクションカード)も検索される
    1.50の仕様。Rebootでは「戦闘中の手札」を新たに設け、クラシックシナリオを読み込む際に自動でチェックが入るという修正を行っているが、PyLiteではパラメータ「そのまま」の振る舞いをする。
    戦闘中に、キーコード所持分岐で、アイテムをWSN3の「選択中カード」にした場合、見つかるカードが異なる場合がある。

  • キーコード所持分岐「戦闘中の手札」でアイテムカードが検索されない
    PyRebootではアイテムカードも検索範囲に入るが、「行動不能」「手札消去された時」アイテムカードも検索できなくなる。これはCardWirthの振る舞いとは矛盾した実装(カード消去後も行動不能でもアイテムカードは所持したままであることは暴露状態で確認可能)であり、また、「手札に攻撃系アクションカード&スキルカードが来ているか」という条件での検索も手札からアイテムカードを排除できないことで実現しにくくなっている。加えて、アイテムカードを検索したいときはアイテムに追加でチェックを入れれば済む。上記問題から仕様の分断自体は避けられないため、5.1以降利益のある挙動に変更。

キーコード所持分岐「戦闘手札(WSN2)有効、アイテム無効」条件での検索結果
非戦闘時 戦闘時・通常状態 行動不能 手札消去
PyLite 5.1 手札なし 手札内アクション・スキル 使用済カード 使用カード
PyLite 5.0 手札なし 手札内アクション・スキル・アイテム 使用済カード
(以外のアイテムは不所持)
使用カード
(以外のアイテムは不所持)
Py-Reboot 手札なし 手札内アクション・スキル・アイテム 使用済カード
(以外のアイテムは不所持)
使用カード
(以外のアイテムは不所持)

キーコード所持分岐「戦闘手札(WSN2)無効、アイテム有効」条件での検索結果
非戦闘時 戦闘時・通常状態 行動不能 手札消去
PyLite 5.1 アイテム 手札内アクション・スキル・アイテム アイテム・使用済カード アイテム・使用カード
PyLite 5.0 アイテム 手札内アクション・スキル・アイテム アイテム・使用済カード アイテム・使用カード
Py-Reboot アイテム 手札内アイテム アイテム アイテム

キーコード所持分岐「戦闘手札(WSN2)有効、アイテム有効」条件での検索結果
非戦闘時 戦闘時・通常状態 行動不能 手札消去
PyLite 5.1 アイテム アクション・スキル・アイテム アイテム・使用済カード アイテム・使用カード
PyLite 5.0 アイテム アクション・スキル・アイテム アイテム・使用済カード アイテム・使用カード
Py-Reboot アイテム アクション・スキル・アイテム アイテム・使用済カード アイテム・使用カード
使用済みカード…行動順が回ってきて使用した後のカード
使用カード…戦闘行動で選択したカード

シナリオ演出等


  • 終了印が付いたシナリオにキー・ホイール操作で不正に突入できる
    1.28世代から裏技として広く認知されており、開始エリアで終了シナリオ分岐コンテントを使って警告や禁止処理を入れているシナリオが多数存在。また、終了印が付いた後が本編の店シナリオが1件確認されている。
    PyLite1.1以降では1.28/1.50の挙動を疑似再現しているが、PyRebootではデバッグモードでしか入れない。

  • 緊急避難(F9)でゴシップと終了印が巻き戻らない
    F9したかどうかをシナリオ側で検知できる。
    進行状況をゴシップで管理しているシナリオでことごとく不具合が発生するため、PyLiteでもデフォルト設定では無効。
    この仕様を利用したPyLite対応シナリオを作る場合、設定変更を貼り紙解説やReadme等でプレイヤーに明示するのが望ましいです。

  • 変数名に半角記号「=」を付けたステップ・フラグの現在値が中断・セーブ時に保存されない
    CW1.50固有のバグ。初期値に戻るので中断・セーブしたかをシナリオ側で検知できる。
    「中断・セーブしないと進行しない」1.50仕様シナリオが1件、「中断・セーブ後再開すると不具合(ギミックが初期化)が発生する」1.28仕様シナリオが1件それぞれ確認されているので後者は中断しなければ軽微と判断し、PyLite3.0以降ではデフォルト有効のオプションとしている。

  • デフォルト宿BGMの「Definn」と同一ファイル名のBGMをシナリオで流して中断やシナリオ終了すると次回BGMが変更されるまでシナリオ側の「Definn」が再生される。
    CW1.28から存在する、同名ファイルの使用順位仕様(シナリオ内>Data)の応用。使用シナリオが1件以上存在するので、PyLite 5.0以降で「Definn」のみを例外として対応(BGMはそれぐらいしか使い道はない?)。独自スキンで宿帰還時に再生されるファイル名が「Definn.mid」でない場合には未対応。


エディタ制限外・巨大な数値への対応(バイナリ改変等)


  • 称号の得点上限を符号付き整数上限値まで受け付ける
 CardWirthの数値データの多くは「符号付き整数32bit」で管理されており、2147483647が最大値。
 PyRebootでは当初999点上限でレベル32以上の連れ込みNPCの経験点が下がっており、エディタで設定可能なレベル99までに対応可能な値として、9999に拡張された。しかしそれ以上に設定された連れ込みNPCは少なくとも2件以上存在する。
 PyLite3.0で従来どおりの値を持つようにしたが、レベルアップ処理に問題があり、10000点以上の@レベル上限が正常動作するのは5.1以降。

  • 0以下のレベルでCapをx/0以下・戦闘手札の所持枚数を4枚以下にする
 レベルをマイナスにすることで手札を1枚も所有できないエネミーを作る事ができる。
 (演出として、大量にエネミーカードを配置する場合の自動選択処理速度等に影響)
 マイナスレベルの連れ込みNPC・エネミーカードが少なくとも3例以上ある。PyLite5.0で対応。
 PyRebootではCapは1、手札は5を下限、能力変化は10/-10を上限とし、それを超えることはない。

  • 各能力変化(行動力・回避力・抵抗力・防御力)で10~-10を超える不正値を受け付ける
 これによって能力を極端に高める・低下させるスキルの作成例が少なくとも10件以上確認されている。
 PyLite3.0で行動力に対応。5.0以降で回避力・抵抗力・防御力に対応。

  • 成功率修正+-6以上で絶対効果が発生しない
 命中率がとても高いが、「闇に隠れる」等の完全効果には回避される、というようなスキルの作成例が2件以上ある。
 5.1で対応。Rebootでは5以上は無条件で絶対効果が発生する。

  • 手動選択不可のスキル・アイテムカード (効果範囲値:2)
 この値になっている場合、「効果目標」の値に関係なく「対象なし」になり、自動選択以外でそのカードを使用できなくなる。
 使用例が1件以上存在するため、5.1で対応。
 以前のバージョンとRebootでは「効果範囲:全体」として誤認識されている。


1.28規格外カード適性(PyLite 5.1以降)

 5.1以降、CardWirth 1.20-1.30で有効であり、1.50で動作しない規格外カード適性をサポートしています。
 性質上、網羅的なデータは提供しませんが、内部的な変換例と現状の実装を以下に提示します。

PyLite WSN変数 CardWirth 1.28の指定番号 効果
変数名 身体 精神
MaxLife -1[FFFFFFFF] - 最大体力
Level -2[FEFFFFFF] - レベル
Aggressive 7 1 好戦性
Unaggressive - -1[FFFFFFFF] 平和性(好戦性-で+)
Bind 19[13] 13 呪縛持続ラウンド
Unbind - -13[F3FFFFFF] -呪縛持続ラウンド(マイナス反転)

※注意!
 WSN形式で規格外適性を使用することは可能ですが、そのシナリオ/カードはPy-Rebootでは動作しない(非対応変数は適性0になります)ため、PyLite専用のシナリオ/カードになります。

 「1.28-1.30仕様のバイナリ改変クラシック形式シナリオ」はPyLiteの更新が続く限り対応を保証しますが、PyLiteの変数名は暫定のもので将来的に破壊的に変更される可能性があり、WSN形式のPyLite専用シナリオはシナリオの修正を余儀なくされる場合があることをご了承下さい。エンジンの都合に左右されたくない場合は、1.28-1.30仕様でシナリオを作ることをお勧めします。

現状判明している仕様差
  • CardWrth 1.28では動的適性は即時反映が行われないが、PyLiteでは行われている
 これらは現状有意義に働いていたとしても、将来的に1.28に合わせる形で解消される可能性があります。

未対応の不明値
  • 身体適性の-3~-10
  • 精神適性の9~11
 これらは詳細が判明次第対応しますので、情報提供していただける方は開発者にご連絡下さい。


システムクーポン/ゴシップについて

 バージョンアップで状況が変化した、シナリオに利用される可能性のあるシステム称号を記載します。

  • @デバグ
 CardWirthではデバグ宿で「簡易作成」したPCはシステムクーポン「@デバグ」を持ちます。通常作成したPCは持っていません。「@デバグ」を持つPCは、解説欄をクリックすることで能力型の変更(バランス/ファイター/プリースト/メイジ)を行うことができます。また、デバッグ専用シナリオなどでデバグ宿製PCの判定に少数ながら使われています。

 旧Pyでは簡易作成したPCでも「@デバグ」が付与されていません。PyLite3.0/Reboot4以降で対応。既に作成済みのキャラクターを修正したい場合、デバッグモードのキャラクター編集ダイアログのオプション「デバッグメンバに指定する」でこのクーポンの付与・剥奪を行うことができます。

  • :レベル補正中
 CardWirth1.28以降、レベル調節機能を使って現在レベルよりもレベルを下げているPCに付与される。仮想クーポンではなく、通常の時限消滅称号のため、シナリオ側で剥奪するとシナリオ再突入までそのまま非所持扱いになります。

 旧Pyでは配布されていませんでした。PyLite3.0/Reboot3.2以降で対応。なお、「:レベル補正中」が配布されるタイミングはシナリオ開始時点なので、スキンで独自の宿内イベントを作る際の所持分岐に利用することはできません。


PyLite専用のシステムクーポン/ゴシップ

 以下のクーポン・ゴシップはPyLite以外では使用されません。
 他エンジンに逆変換などして残留した場合、ユーティリティモード/デバッグモードで削除しても問題ありません。

  • @デバグモード
 PyLite5.0 以降、その宿が「デバッグモード」かを判定・保存するためのシステムゴシップです。クーポンではありません。
 Pyの設計上、エンジン単位のマスター設定が大半なので、宿単位の設定をセーフティに管理するためゴシップという形式を取っています。
 シナリオで同名ゴシップが使われている場合、判定したい場合に備えて現状、通常のゴシップと同じように判定・付与・剥奪が可能にしてあります。

  • _年代成長禁止
 PyLite5.1 以降、同名称号を所持しているキャラクターの年代成長機能を無効化する特殊クーポンです。
 連れ込みNPCや種族で真っ当な寿命を持たないキャラクターが成長できるのは不自然というフレーバー需要に対応するものです。
 「_消滅予約」と同様の扱いを想定し、削除不可の「@」ではなく通常の隠蔽称号「_」で付け外し可能にしてあります。


バージョン判定称号一覧

PyLite5.1現在有効な、バージョン判定称号の一覧です。
以下の文字列によって「称号所持分岐」を行うと条件や結果に関わらず必ず成功扱いになります。

「Only」が付いたものは該当バージョンのみを判定したい時に使用します。
たとえばPyLite 4.4では「@CardWirthPy Version.4.3」も(それ以前のバージョンも)すべて持っていますが、
「@CardWirthPy Version.4.3 Only」はPyLite / Py-Reboot系フォークの4.3しか持っていません。

  • 基本
@CardWirthPy Lite
@CardWirthPy Version.5.1 Only

  • 5系
@CardWirthPy Version.5.1
@CardWirthPy Version.5.0

  • 4系
@CardWirthPy Version.4.4
@CardWirthPy Version.4.3
@CardWirthPy Version.4.2
@CardWirthPy Version.4.1
@CardWirthPy Version.4.0

  • 3系
@CardWirthPy Version.3.4
@CardWirthPy Version.3.3
@CardWirthPy Version.3.2
@CardWirthPy Version.3.1
@CardWirthPy Version.3.0

  • 2系以前
@CardWirthPy Version.2.3
@CardWirthPy Version.2.2
@CardWirthPy Version.2.1
@CardWirthPy Version.2.0
@CardWirthPy Version.1.1
@CardWirthPy Version.1.0
@CardWirthPy Version.0.12.3b
@CardWirthPy Version.0.12.3
@CardWirthPy Version.0.12.2

※PyLiteの初版は1.0ですが、Rebootの2系から分岐しているので互換性のためにすべて持っています。




スキン外種族の表示について(PyLite3以降)

Pyのスキンではキャラクターに「種族」を設定できます。
種族は「@R」で始まるシステム称号で管理されています。
Rebootではスキンで設定可能な種族しか表示されませんが、PyLiteでは以下の条件を満たす場合にキャラクター情報ダイアログの種族欄に青文字で表示されるようにしています。

1.種族を1種以上設定できるスキンであること (ex.JUDGMENT…○ Classic…×)
2.当該スキンの種族を指定していないキャラクターであること (ex.JUDGMENTで@R愚者を持っている場合、他に@R称号を持っていても愚者が優先表示される)

連れ込みNPCに「@R」で始まる独自称号を持たせればそちらも有効です。肩書きや通り名を載せても良いでしょう。

タグ:

CardWirthPyLite
最終更新:2023年11月12日 11:13