スキン > スキン作成

Pyスキンの作り方


スキンのページは種族以外は導入案内的になったので
ここでは実際にスキン・バリアントを作りたい人向けの解説を行います。

目次

はじめに

無から作るのは大変なので、まずはClassicスキンか、CWから自動変換したスキンを用意しましょう。
画像や音楽を変えたいだけなら以下のフォルダ構成を参考にファイルを差し替えるだけでOKです。

いわゆるバリアントや種族などの機能を追加するにはXMLファイルの編集が必要になります。
XML編集にはXMLエディタまたはテキストエディタが必要です。Windows標準のメモ帳でも表示・編集は可能なものの、改行を認識できないことがあるので別のものを使う方が良いでしょう。また、僅かなミスでもエラーで入れなくなったりするので、慣れないうちはバックアップをマメに取りましょう。

具体的なサンプルとしてはスキン/実践例を見て下さい。


フォルダ構成

最低限、以下の5フォルダとSkin.xmlがあれば動きます。
Bgm/Table/Soundはシナリオ側が参照するため必須です。
バリアントでなければ基本的に1.50の構成に合わせた方が無難でしょう。

Bgm BGM。CWのMidiフォルダと同じ。
midiはmp3/oggに置き換え可。
Resource\Image エンジン内部素材。
Resource\Xml\GameOver ゲームオーバー画面のエリア情報。
Resource\Xml\Scenario キャンプとトレード画面のエリア情報。
Resource\Xml\Title タイトル画面のエリア情報。
Resource\Xml\Yado 宿画面とトレード画面のエリア情報。
Resource\Xml\ActionCard アクションカードの解説や内部能力値。
Resource\Xml\SpecialCard 特殊カードの解説。現在は「荷物袋から使用」のみ。
Table 背景画像。CWのTableフォルダと同じ。
bmpはjpg/png/gifに置き換え可。
Sound 効果音。CWのWaveフォルダと同じ。
wavはmp3/oggに置き換え可。

以下のフォルダ/素材は省略しても構いません。
(Resourceフォルダの素材は入っていなければSkinbaseから読まれる)

EffectBooster Schemeフォルダ。JPY1のdirtypeに3を指定した時、このフォルダに含まれるファイルが使用されます。使用率は低いですが、1.28-1.50に対応する場合はSchemeフォルダからコピーして入れておいた方がいいかもしれません。
Font スキンの設定でユーザー環境にない固有のフォントを使いたい場合、フォントファイルを置きます。
Face 顔画像フォルダ。
Data/直下にある方のFaceに置くと全スキンで使えますが、このスキンでしか使わないという顔画像はこちらに入れます。
どちらにも1枚もなければ、CWと同じく父母画像が表示されます。
Name 自動選択の名前リスト。
なければ、Skinbaseから参照されます。
Area(Py4以降) WSN形式で保存したシナリオのエリアを入れて、そのまま使う事ができます。
ただしIDが10001-20000の範囲である必要があります。(XEditorで振り直しが可能)
Package(Py4以降) WSN形式で保存したシナリオのパッケージを入れて、そのまま使う事ができます。




バージョン

 シナリオと同じくエンジンのバージョンによってできることが変わります。
下位バージョンにも対応したい場合は、対応バージョン以降の新機能を使わないorバージョン判定称号によって回避させるようにして下さい。

2021 Py 5
  • WSN5の機能
    • コモン関数で所持カードを詳しく調べられるようになった
    • キーコード不所持分岐でカードを探す機能など
  • シナリオ開始時およびスキン変更時の番号クーポン(_1~6)配布・剥奪ルールを変更
    • シナリオ開始時の処理タイミングを、「シナリオ開始時」から「04_StartScenario.xml」到着時に変更
    • 'number_1_coupon'が変更されている場合でも、「_1」を強制剥奪する仕様を廃止
    • `number_1_coupon_2`が定義されていた場合はそれを剥奪するようになった
  • レイヤ値の内部上限を10000に制限
    • これにより極端に高いレイヤ値をキャンプ画面で使用しているスキンは使用できなくなります。
  • キャンプ時、セルにおいてもレイヤ値を加算するように変更
  • 私物機能「パーソナル」関連のリソース追加

2020 Py4
  • WSN4の機能
    • コモンと以下の環境変数対応によりゴシップ操作なしでも高い自由度の変数管理ができるようになった
  • 「種族」の設定に成長係数を追加(EP・経験点)
  • 「年代」の初期レベル設定の廃止(種族等の初期経験点と係数を加味した合計点数での計算に変更)
  • スキン独自エリア・パッケージが使用可能になった
  • スキン宿内で状態変数が使用可能になった(4.3以前には致命的なバグあり)
  • 独自エリアにおいて、ESC/右クリック時の挙動の指定に対応(Property/BackgroundAction)
  • ゲームオーバー画面で、特殊文字やPCセルが使用可能になった
  • スクリーンショットタイトルの背景画像「SCREENSHOT_HEADER」に対応
  • 宿内でのスキン変更時に(イベント中断・時限称号・BGM)初期化処理が入るようになった
  • シナリオに入る時、時限称号が全て削除されるようになった(β1以降の仕様変更)
  • コマンド"ShowDialog"で添付テキストを開けるようになった
  • コマンド"ShowDialog"でロード(確認警告あり)を実行できるようになった(β2以降)
  • 貼り紙の「対象レベル」の表記法をCW準拠に変更(4.3以降の仕様変更、手動で修正する必要あり)
    • 旧:対象レベル x~y
    • 新:対象レベル:x ~ y

2018 Py3
  • WSN3の機能(選択カードの削除等)
  • 種族と特殊型のレベル上限でどちらか高い方が優先されるようになった(3.4にて修正)
  • コマンド"ShowDialog"でパーティの編成記録を直接開けるようになった

2017 Py2
  • WSN2の機能(仮想ステップ等)
  • スキン固有のシステムクーポンを持てるようになった
  • シナリオ開始直前に経由する特殊エリア「04_StartScenario.xml」を追加
  • ライフゲージ2に対応
  • 高解像度イメージ(x2)に対応

2016 Py1
  • WSN1の機能(背景再配置、PCセル、レイヤなど)
  • 種族の設定
  • 宿を初めて開いた時に経由する特殊エリア「03_YadoInitial.xml」を追加



基本設定

基本な要素はゲーム設定のスキン>「編集」から変更することもできます。
ここでの変更は後述のSkin.xmlに出力されているので、慣れないうちは見比べてみるとわかりやすいです。

  • スキン情報
    • 種別……スキンの種別。
    • 名前……スキンの名称。設定画面やエディタでのスキン指定などでも使用されます。
    • 解説……設定画面に表示されるテキスト。
    • 初期資金……拠点を新規作成した時の初期資金。デフォルトは4000。
    • CardWirth1.20相当の適性計算を行う……1.20まで使われていた適性ランクの旧基準を使用します。適性ランクは見た目だけでは無く、ゲームバランスに影響するので注意して下さい。
      (不安な方はチェック非推奨)

  • 描画
スキン固有のメッセージボードの背景カラーや壁紙を指定できます。
チェックを入れなければユーザー設定が使われます。

  • フォント
スキン固有のフォント設定を指定できます。
チェックを入れなければユーザー設定が使われます。
ユーザーの環境に無いフォントを指定した場合、ユーザー設定では無くデフォルト設定で代替されます。


Skin.xml

Skin.xmlは、スキンのコアとなる設定ファイルです。
基本設定に加え、種族、能力型と特徴、システム効果音、システムメッセージを設定することができます。

種族の追加


種族についてはスキンを参照。
種族を追加したいスキンのSkin.xmlを開き、<Races>タグ以下を編集します。

<Races> 種族の全体タグ。<Races />とすると種族設定そのものをオフに出来る。
種族設定がオフになっているスキンではダイアログに種族は表示されず
通常通りの表示になる。
<Race> 種族の個別タグ。一種ごとに定義する。
<Name> 選択リストに表示される種族名。また@R<Name>という形式でクーポンが配布される。
<Description> 解説。改行は\nでも代替可。
<Feature> 対属性の設定。※Trueで有効、Falseで無効
変更しない場合、<Feature />とすれば下位タグを省略できる。
<Type> 対効果属性。 undead:命を持たない automaton:心を持たない 
constructure:魔法生物 unholy:不浄な存在
・命を持たないは肉体属性が無効、心を持たないは精神属性が無効になる。
・魔法生物は魔法属性が有効、不浄な存在は神聖属性が有効になる。
<NoEffect> 対カード属性。 weapon:武器が効かない magic:魔法が効かない
大半のカードを無効化してしまうため、True化は非推奨。
<Resist> 属性耐性。 ice:冷気に耐性を持つ fire:炎に耐性を持つ
その属性モーションを無効化。
<Weakness> 弱点属性。 ice:冷気に弱い fire:炎に弱い
・その弱点である時、ダメージ/中毒/麻痺が固定値10分増加。
・持続時間が適性1ランク分伸びる。
<Ability> パラメータ変動。
<Physical> 身体的特徴。
基本値は6。最大値は基本値+6になる(たとえば8にした場合、変動後の最大値は14)。
<Mental> 精神的特徴。
基本値は±0。小数点有効(20160204版以降)。
<Enhance> 能力値修正。 avoid:回避力 resist:抵抗力 defense:防御力
所有時ボーナスとほぼ同じ。-1でもマイナスをつけた場合、「闇に隠れる」などの完全防御系スキルを使用してもダメージが通る/命中するようになるので注意。
<Coupons> デフォルトで追加されるクーポン。 value:称号の点数
複数可。<Coupon value="-2">アンデッド</Coupon>というような形で記述していく。
<Coefficient> 成長に掛かる補正(Py4以降)。変更しない場合は省略可能。
ep:レベルアップ時の獲得EP点数。0にすると増えない。(従来値は10)
level:レベルアップの必要経験点に掛かる係数。0.5で1/2減少、2.0で2倍に増加。


初期クーポンを使ったテクニック (注意!1.1/3.3では一部不具合があります)
初期経験点 上記例のように-で指定すれば汚名になるので成長が遅い/早いという表現ができる。
ただしどんなに上下させてもPy1~3では初期レベルは変わらない。
(レベルアップ条件を満たす場合、次に入ったシナリオ終了時にレベルアップ)
Py4では合計点から算出するように変更されました。
@レベル上限 連れ込みNPCで多用されているテクニックが同様に有効。点数=最大レベル。
型の最大レベルと競合する場合は大きい方優先(1.1以降/登録時は4.0以降)なので最大レベル11から設定できる。
@EP 最大レベル10の場合-90以上にしておけばシステム上そのキャラは子孫を残せない。
反対に増やして繁殖力が強いという表現も?
_消滅予約 全滅または対象消去された時、アルバムに載らない。
EPと併せて機械やアンデッドに設定するなど。
※現在の仕様ではレベル上限・EP以外のシステムクーポン(先頭が@のもの)を付けることが出来ますが、この仕様は将来的に変更される可能性があるため非推奨です。


記述例
+ ...
 <Races>
   <Race>
     <Name>人間</Name>
     <Description>この世界の最も標準的な種族。\n何でもそつなくこなす反面、突出したところはない。\n環境への適応能力が高く、多彩な文化を持つ。</Description>
     <Feature>
       <Type automaton="False" constructure="False" undead="False" unholy="False" />
       <NoEffect magic="False" weapon="False" />
       <Resist fire="False" ice="False" />
       <Weakness fire="False" ice="False" />
     </Feature>
     <Ability>
       <Physical dex="6" agl="6" int="6" str="6" vit="6" min="6" />
       <Mental aggressive="0" cheerful="0" brave="0" cautious="0" trickish="0" />
       <Enhance avoid="0" resist="0" defense="0" />
     </Ability>
     <Coupons />
   </Race>
 </Races>


性別・年代・能力型


キャラクターに設定する基本称号データ。カードワースでは、大半のシナリオで_♂/_♀/年代/能力型のクーポン所持判定が行われます。中には基本形を持っていないと進行が止まるケースもあります。独自世界観/非互換のバリアントを作る場合を除いて、基本的にこれらの名称は変えない方が良いです。

性別
<Sexs> 性別の全体タグ。下位に<Sex>タグを置いていく。
<Sex> 性別の個別タグ。3つの省略可能な引数を取る。
father=「父親になれる性別」/mother=「母親になれる性別」
両方省略するかTrueにした場合、父親・母親のどちらにも指定できるようになる。
subNameは登録ダイアログ上で優先表示される。省略した場合、<Name>が表示される。
<Sex>は種族などと同様に</Sexs>で閉じるまで何個でも配置することができる。
<Physical> 身体的特徴。種族ではベースとなる基本値だが、こちらは加減算式。
<Mental> 精神的特徴。
<Name> 性別名。_<Name>という形式でクーポンが配布される。

年代
<Periods> 年代の全体タグ。下位に<Period>タグを置いていく。
<Period> 年代の個別タグ。5つの省略可能な引数を取る。
subName 登録ダイアログ上で優先表示される。省略時:<Name>を表示。
abbr 顔画像フォルダで参照される「YNG」など。省略時:subNameで代替。
spendEP 親に指定した時のEP消費量。省略時:10。0を指定した場合は、親にできなくなる。(子供用)
level 初期レベル。省略時:1。
firstSelect 登録ダイアログで最初に選択されている項目。省略時:False。
<Physical> 身体的特徴。
<Mental> 精神的特徴。
<Name> 年代名。_<Name>という形式でクーポンが配布される。
<Coupons> デフォルトで追加されるクーポン。熟練・老獪はここで指定。

能力型
<Natures> 型情報の全体タグ。下位に<Nature>タグを置いていく。
<Nature> 型の個別タグ。4つの省略可能な引数を取る。
geneCount 遺伝子の1の数。
genePattern キャラ作成時の初期遺伝子パターン。
levelMax 最大レベル。省略時:10。
special 特殊型かどうか。
<Physical> 身体的特徴。
<Mental> 精神的特徴。
<Name> 型名。_<Name>という形式でクーポンが配布される。
<Description> 登録ダイアログに表示される解説。
<BaseNaturer> 特殊型の場合の派生元。下位に<BaseNature>を置いていく。


キーワードの変更

Pyでは、ゲーム中に表示される名称・システムメッセージはすべてSkin.xmlに格納されます。
これを書き換えていくことで独自世界観のバリアントを作ることが出来ます。

旧Verで作成したスキンを新Verに対応したい場合、SkinbaseのSkin.xmlを見てください。
SkinbaseのSkin.xmlでは、
<!-- 0.12.4 ここから --><!-- 0.12.4 ここまで -->
というようにそのVerで追加されたメッセージが区分けされています。(0.12.4は1.0~1.1のこと)
書き換えたいキーワードを自分が作っているスキンのSkin.xmlにコピーしましょう。

2.0以前ではキャラクター情報ダイアログの技能/アイテム/召喚獣カードにあたる文字列がスキンに含まれていなかったため、それ以前に自動生成した学園・大江戸・SFは修正が必要です。

スキンクーポン(Py2以降)

 Py対応のシナリオにおいて、どのバリアント・スキンを使っているのか判定したくなることがあります。
Py2以降、スキンに判定クーポンを付けることができるようになりました。
そのスキンを付けている間は、PCが持っているかに関係なく、定義したクーポンの所持分岐が成功します。

書式はData/SystemCoupon.xmlと同じで、例えばSkin.xmlで次のように設定します。

   :
</Property>
<SystemCoupons>
 <SystemCoupon>@SClassic</SystemCoupon>
</SystemCoupons>
<Race>
   :

 ※付属のClassicスキンには「@SClassic」は設定されていません(使用できません)。

状態変数と「VariablesKey」(Py4以降)

 Py4以降では、スキンのシステムエリアの中でもシナリオのように
ステップ・フラグ・コモンを扱う事ができるようになりました。

状態変数を使うにはまずスキンごとのキー、<VariablesKey>を定義する必要があります。
同名のフラグであっても<VariablesKey>が違えば別個のフラグになります。
状態変数とキーの定義は Skin.xmlで以下のように行います。

   :
 <VariablesKey>MySkin</VariablesKey>
 </Property>
 <Flags>
 <Flag default="True">
 <Name>MENU01</Name>
 <True>TRUE</True>
 <False>FALSE</False>
 </Flag>
 </Flags>

<VariablesKey>にはスキン毎に、なるべく被らないような固有の名前を指定してください。
同じ<VariablesKey>を持つスキン同士では状態変数値が共有されます。
各変数値は宿データの「SkinVariables.xml」に保存されますが、
同じ<VariablesKey>を持つスキンに存在しない変数だった場合、削除されます。
つまり、非互換な変数構成のスキンで<VariablesKey>を共有することはできません。

フラグ・ステップ・コモンの値はいつも通りCWXEditorでWSNシナリオを作り、
Summary.xmlから<Flags><Steps><Variants>タグをコピペしてくるのが手っ取り早いです。


Resource

Resourceフォルダには更に二つの下位フォルダがあり、
imageフォルダはエンジンのアイコンなどを格納します。
Xmlフォルダはエリアやアクションカードを設定するXMLファイルを格納します。
これらの素材・設定ファイルに不足がある場合は、SkinBaseから読まれる事になっています。
(Bgm/Table/Soundフォルダにはこの機能はないのでご注意下さい)

[Image]拡張仕様

imageフォルダは基本的にはそのまま画像を置き換えるだけでOKです。
以下はPy2の拡張仕様を使用したい人向けになります。

高解像度化(x2/x4)
 Py2以降、描画倍率ごとに表示するリソース素材を指定できるようになりました。
追加方法は単純に、名前.xX.拡張子というファイル名にして同一のフォルダに置くだけで完了です。
画像は両方用意する必要があります。(大きいサイズだけ用意して縮小表示ということはできない)

例: PCカードの台紙の2倍解像度画像
LARGE.x2.png

ただし、アクションカード等のイメージは、XmlフォルダのXMLで定義されているため、
一部の画像は置いただけでは有効になりません。
高解像度イメージを使いたいカードのXMLの全体タグに「scaledimage="True"」を追加してください。

例:アクションカードの高解像度化
Resource\Xml\ActionCard\00_Exchange.xml 2行目
<ActionCard scaledimage="true">

描画倍率が2倍以上で、なおかつ画面が拡大されている場合に、x2の画像が優先表示されるようになります。


ライフゲージの特別な仕様
Resource\Image\Status
LIFEBAR.bmp バーの色
LIFEGUAGE.bmp ゲージの枠(CW従来)
LIFEGUAGE2.bmp LIFEBARの上に描画(Py2以降)
LIFEGUAGE2_MASK.bmp ゲージの透過部分(Py2以降)

ライフゲージは2種類の透過情報を持つ必要があり(バー描画部分とゲージ枠の外描画部分)
CWでは左上から5・5pxの位置をバー部分の透過色として扱う仕様です。
Pyでもそのまま同じ仕様で使うことができますが、この仕様では複雑なライフゲージは表現できません。
そこでPy2以降では更にLIFEGUAGE2とLIFEGUAGE2_MASKが両方ある場合はこちらを優先使用し、
アルファ値(半透明度)やアンチエイリアスをそのまま活かすことができるようになっています。

[Image]Py追加リソースの変更

 貼り紙の一覧表示やカード操作のスターアイコンなどはSkinBaseに入っていて、
スキン側では一見変更できないように見えますが、参照優先度は常にSkin>SknBaseです。
スキンのディレクトリに同一ファイル名(拡張子は自由)で入れることでスキン側が優先認識されます。

 以下の表では便宜上、拡張子を振っていますが、対応フォーマット(BMP/PNG/GIF等)であればどれも認識されます。

Resource\Image\Dialog
ARRANGE_BOOKMARK.bmp ブックマークを編集
AUTO_START.bmp 自動戦闘ボタン
BACKLOG.bmp メッセージログボタン
BOOKMARK.bmp スターアイコン
BOOKMARK_EMPTY.bmp スターアイコン(無効)
BOOKMARK_LIGHTUP.bmp スターアイコン(発光)
BOOKMARK2.bmp 貼り紙(詳細表示)のブックマークアイコン(大)
DIRECTORY.bmp 貼り紙のフォルダ
EDITOR.bmp 貼り紙(詳細表示)「シナリオをエディタで開く」
FIND_SCENARIO.bmp シナリオ検索(小)
FIND_SCENARIO2.bmp シナリオ検索(大)
FIND_SCENARIO3.bmp 検索結果
HAND.png 手札アイコン
HIDE_CONTROLS.bmp 詳細モード切替ボタン(閉じる)
INFOVIEW.bmp 情報カードを開く
PREMIER_ICON.bmp プレミア表示(前面)
RARE_ICON.bmp レア表示(前面)
REPLACE_CARDS.bmp 所有カードと入れ替えボタン
REPLACE_POSITION.bmp パーティの並び替えボタン
SETTINGS.bmp 設定ボタン
SHOW_CONTROLS.bmp 詳細モード切替ボタン(開く)
SUMMARY.png 一覧表示の貼り紙
SUMMARY_COMPLETE.bmp 貼り紙「終了済シナリオを表示」
SUMMARY_INVISIBLE.bmp 貼り紙「隠蔽シナリオを表示」
SUMMARY_UNFITNESS.bmp 貼り紙「適正レベル以外の貼り紙を表示」
TO_PERSONAL_POCKET.bmp 「パーソナル」のトレード送り先(Py5以降)

Resource\Image\Button
PERSONAL.bmp カード操作ダイアログ上の「パーソナル」選択トグルボタン(Py5以降)
CAST_PERSONAL.bmp カード操作ダイアログ上の「パーソナル」送り先(Py5以降)

Resource\Image\Other
SCREENSHOT_HEADER.png 設定でスクリーンショットの背景画像を指定していない時に代替表示(Py4以降)



[Xml]システムエリア


スキンではオープニング画面、宿画面、パーティ画面、トレード画面、ゲームオーバー画面がそれぞれ擬似的にWSN形式の「エリア」として扱われます。このエリアでは通常通り到着イベントや背景セル、メニューカードイベント、コンテントツリーが使用できるので、自由度の高いインターフェースを作ることができます。
直接書くのはしんどいので、基本的にはXEditorでスキン用の試作エリアを作り、WSN形式で保存したものをコピペしましょう。

なお、Py1でWSN形式の構造が最適化されたため、古いスキンは書き方が異なっていることがあります。
その場合は<Event></Event>などきりの良いところまで上書きしてしまえば動きます。

Resource\Xml\Yado
01_Yado.xml パーティを開いていない状態の宿
02_Yado2.xml パーティを開いている状態の宿
03_YadoInitial.xml 初期状態(宿にキャラやカードが1枚も無い)の宿
04_StartScenario.xml シナリオを選んだ際に経由する特殊エリア(2.0以降)
-1_TradeArea.xml カード移動画面(宿のカード置き場)
-2_TradeArea2.xml カード移動画面(宿にいるパーティ)
-3_PartyBreakup.xml パーティ解散
Resource\Xml\Scenario
-4_Camp.xml キャンプ画面
-5_TradeArea.xml カード移動画面(シナリオ中)
Resource\Xml\Title
01_Title.xml スタート画面
Resource\Xml\GameOver
01_GameOver.xml ゲームオーバー画面

【重要】04_StartScenario.xmlについて
 04_StartScenario.xmlは無ければSkinBaseのものが使われるので省略できますが、宿内の背景でレイヤ機能(前面セル)を使いたい場合は必須です。yado2で1以上のレイヤを使うと「開始エリアで背景継承しているシナリオ」の画面を乱してしまうので、シナリオを開始する前にレイヤ0の背景に戻すようにして下さい。

WSN形式なのでWsn.1~3の機能も使えます。
使えないものは以下です。
  • 状態変数/通常エリア/パッケージ(Py4以降で対応)
  • バトル全般
  • キャスト/技能/アイテム/召喚獣/情報の獲得剥奪および所持分岐(WSN3の選択カードを除く)
  • キーコード発火イベント(イベントを作ることはできるが、カードを使用できないので無意味)
  • _番号、「:レベル補正中」クーポンの操作(シナリオに入らないとつかない)

WSN(XML)エリアの構造
<System> システムエリアであることを示す。
<Skin dataVersion> エンジンが対応するスキンバージョンかを示すタグ。
(スキン自体のVerではないので通常は変更する必要はない)
<Property> プロパティ。<System>直下の<Property>ではエリア名とIDを定義できる。
<BgImages> 背景セルの定義。下位に<BgImage>タグで置いていく。
<ColorCell><TextCell><PlayerCell>を使う事もできる。
<BgImage> 一枚の背景セルを表します。mask="True"で透過になる。
</BgImages>で閉じるまでいくつでも置くことができる。
<MenuCards> メニューカードの定義。spreadtypeはカードの並びをオートかカスタムか選択可能。
<MenuCard> 一枚のメニューカードを表す。セル同様に<MenuCard>タグで一つのメニューカードを表し、</MenuCards>で閉じるまでいくつでも置ける。
システムカードに付いているargやcommandについては次項を見て下さい。
<LargeMenuCard> キャストカードと同じ大きさ・下地のメニューカードを作る。
それ以外は<MenuCard>と全く同じに使用できる。(使用例:カードのトレード画面)
<Events> イベントの定義。<Event>タグで到着/クリックイベントを作る。
<Event> 通常のエリアではKCイベントもあるためセルやメニューカードと同じ複数置ける構造になっているが、システムエリアではKC発火出来ないため、実質置けるのは一つだけ。
<Post> <event>ツリーの中でシステムメニューを呼び出します。詳しくは次項を見て下さい。
<ImagePath> 画像のパス(場所)。既定通りならTable/Resource内から読むことになりますが
スキンのフォルダ内にあれば制限はありません。


末尾にsが付いている全体タグと下位の個別タグは別物です。
全体タグは1つしか置けない点に注意して下さい。


<MenuCards>
 <MenuCard></MenuCard>
 <MenuCard></MenuCard>
 <MenuCard></MenuCard>
</MenuCards>

×
<MenuCards>
 <MenuCard></MenuCard>
</MenuCards>
<MenuCards>
 <MenuCard></MenuCard>
</MenuCards>

[Xml]システムコマンド/システムメニューカード

 システムメニューカードとは、例えば「宿帳を開く」や「セーブ」などのことです。
実際にXMLの中身を見てみると<MenuCard>に引数commandとargが設定されているのがわかります。
これらが指定されているカードはクリックイベントよりシステム処理が優先して実行されます。

単体command
"DissolveParty" パーティ解散
"InterruptAdventure" 冒険の中断(シナリオ中)
"LoadParty" 冒険の中断(宿)
"MoveToYado" 宿に遷移(ゲームオーバーの続ける)
"MoveToTitle" タイトル画面に遷移
"Load" 最終セーブをロード
"Exit" 終了
"StartScenario" シナリオの開始(スタートエリア)

argはcommandと組み合わせて使用します。
たとえばarg="PARTYEDIT" command="ShowDialog"
「パーティ情報」の「ダイアログを開く」になります。
あり得ない組み合わせを指定するとフリーズするので注意。Py4以降では、警告ダイアログが表示されます。

command 対応するarg
"ShowDialog" ダイアログを開く "YADOSELECT" ゲーム開始(オープニング画面)
"CLOSE" ゲーム終了(オープニング画面)
"PLAYERSELECT" 宿帳を開く
"ALBUM" アルバムを開く
"SCENARIOSELECT" 貼り紙を見る
"PARTYEDIT" パーティ情報
"PARTYSELECT" 冒険の再開
"PARTYRECORD" パーティの記録(Py3以降)
"BACKPACK" 荷物袋
"STOREHOUSE" カード置き場
"SAVE" セーブ
"LOAD" ロード(Py4β2以降)
"ReturnTitel" 宿を出る
"MENUCARDINFO" メニューカードの
解説を開く※1
"SETTING" 設定ダイアログを開く(F2)
"F9" 緊急批難(F9)
"INSTRUCTIONS" 添付テキストダイアログ(F8)
を開く(Py4以降)※2
"MoveCard" 選択中カードを
argの場所へ送る
"BACKPACK" 荷物袋
"STOREHOUSE" カード置き場
"PAWNSHOP" 売却
"TRASHBOX" ゴミ箱
"ChangeToSpecialArea" 特殊エリアへ遷移 "-1", "-2", "-5" カード移動操作エリア
"-3" 仲間を外す
"-4" キャンプ
※1 メニューカードに指定した場合、左クリックで、右クリックをした時と同じ動作になります。
※2 シナリオ内のみ。宿内に配置してもNO TEXTとなります。

また、これらは<Post>タグによってイベントツリーの中で実行することも出来ます。
使用例:ゲームオーバー画面の選択肢、StartScenario
内部的には「PostEventContent(ポストイベントコンテント)」と定義されており、
<Post type="Event" arg="" command=""></Post>の形で使用します。
※現状ではコンテントツリーの末尾に手動で付け加えるしかありません。

その他
debugOnly="True" デバグモードのみで表示
<LargeMenuCard></LargeMenuCard> キャストカードの大きさ・下地になる

[Xml]アクションカード


「ActionCard」フォルダには、戦闘時に配布される「アクションカード」のデータが入っています。
これらを書き換えることによって、グラフィック・性能・効果を変更できます。

アクションカードの変更はカードワースの戦闘に大きな影響をもたらします。
たとえばカード交換のカード消去モーションを取ってしまえば、賢者の杖のようなカードを別に持たない限り1枚づつしか手札が循環しなくなります。エディタ製カードのように使用時イベントも付けることができますので、「属性相性」や「熟練度」といった独自システムを作ることも可能です。

Resource\Xml\ActionCard
00_Exchange.xml カード交換 01_Attack.xml 攻撃
02_PowerfulAttack.xml 渾身の一撃 03_CriticalAttack.xml 会心の一撃
04_Feint.xml フェイント 05_Defense.xml 防御
06_Distance.xml 見切り 07_Runaway.xml 逃走
-1_Confuse.xml 混乱



WSN(XML)カードの構造
<ActionCard> アクションカードの全体タグ。
scaledimage="true"を加えると高解像度イメージが有効になります。
<Property> プロパティ宣言。下位で効果以外のパラメータを定義。
 <Name> カード名。
 <ImagePath> カード画像のパス。
 <Description> 解説。
 <Id> アクションカードの識別番号を指定。配布率や選択率に影響。
 <Scenario> シナリオ名。アクションカードには通常付かない。
 <Author> 作者名。アクションカードには通常付かない。
 <Level> 対象レベル。アクションカードは通常0。
 <Ability> カードの適性値。
 <Target> 対象。allrange="True"で全体。
 <EffectType> カード属性。
 <ResistType> 命中属性。
 <SuccessRate> 成功率。
 <VisualEffect> カードアニメ。Horizontal=横に振動 Reverse=反転
 <Enhance> 使用時能力修正。
 <KeyCodes> キーコード。複数付ける場合は\nで改行。
 <Premium> レアリティ。
 <UseLimit> 使用回数。配布率に影響。山札にないカード交換や混乱は通常1。
 <Hold> ホールド状態。アクションカードは通常False。
<Motions> カード効果。
<Events> 使用時イベント。

 複雑な使用時イベントを作りたい場合は、普通に記述していくのはしんどいので
エリアと同じくWSNシナリオで適当なカードを作り、それをコピペする方法がお勧めです。


カード名とキーコードの注意点

 既存のCardWirthシナリオ(中世Ⅰ型)の一部には、アクションカードをカード名・キーコードで判定しているシナリオ・効果系カードがあるので、それらを正常に動作させたいスキンでは、アクションカードの名称・キーコードは変更しない方がいいです。
 カード名は変えたいが、互換性も保持したいという場合は、キーコードに従来のカード名・キーコードを追記しておきましょう。たとえば、JUDGEMENTでは「会心の一撃」を「クリティカル」に名称変更していますが、そのままでは「会心の一撃」を判定するキーコード所持分岐が正しく動作しません。そのため、「会心の一撃」もキーコードとして加えています。

元のアクションカード 判定に使用されるキーコード
カード交換 「カード交換」「手札の交換」
攻撃 「一撃」
フェイント 「フェイント」「撹乱」
防御 「守備」
見切り 「見切り」
会心の一撃 「会心の一撃」
渾身の一撃 「渾身の一撃」
混乱 「混乱」
逃走 「逃走」
 「逃走」はシステムに予約された特殊キーコードです。
「逃走」が付いたカードによる戦闘不能や対象消去では死亡時イベントが発火しません。



[Xml]スキン独自エリア/パッケージ(Py4以降)

 Py4以降は、Resource\Xml内にフォルダを作ることで、CWXEditorで作成したWSNシナリオのエリア/パッケージをそのまま流用できるようになりました。これらはシステムエリア内のイベントから通常のエリア移動コンテントや、パッケージコール/リンクコンテントで実行することができます。

Resource\Xml\Area
100xx_(エリア名).xml 独自エリアの実体
Resource\Xml\Package
0x_(パッケージ名).xml パッケージの実体
※ファイル名はなんでもOK

ただし、エリアの場合、1~10000までは既存のシステムエリア用に予約されているため、IDは10001-20000の間である必要があります。
CWXEditorでエリアIDを変更するには、テーブルビューでエリアを右クリックし、「IDの振り直し」を行います。またはXMLの<ID>タグを直接修正して下さい。

Property/BackgroundAction(Py4以降)
 通常、宿内ではESC/右クリックを行うと前の画面に戻る動作になります(Yado2ならYado1に、Yado1ならOpeningに戻る)が、独自エリアでそれを行われると困るケースもあります。
そこで、独自エリアではその動作を変更できるオプションが用意されています。

<BackgroundAction id="">command</BackgroundAction>という形で以下のように使用します。

例:エリアID:10002に移動(ドット置換(シェーブ)式・背景切替スピード5)。
<Area>
  <Property>
    <Id>10001</Id>
    <Name>スキン固有エリア</Name>
    <BackgroundAction id="10002" transition="PixelDissolve" 
transitionspeed="5">ChangeArea</BackgroundAction>
  </Property>
    :
</Area>

command一覧
(未指定時) なにもしない
ChangeArea エリアを移動する
CallPackage パッケージを実行する
ReturnSystemArea 通常の宿エリアへ戻る
ReturnTitle タイトル画面へ戻る
Close エンジン終了


スキン変更時・シナリオ開始時の動作

 Py4以降、複雑なイベントを組みこんだスキンに対応するため、スキン変更時の初期化処理が厳密になりました。

シナリオ開始時の挙動(Py5以降)
  1. シナリオ選択ダイアログからシナリオを決定
  2. 番号クーポンを配布
  3. 04_StartScenarioへ移動
  4. シナリオの開始エリアへ移動

 Py4までの番号クーポンは4.のタイミングで配布されています。

拠点でのスキン変更時の挙動
  • 拠点にいた場合、再生中のBGMは副音声を含めて停止します。
  • 独自エリアにいた場合、Yado2に強制移動します。
  • スキンイベント中だった場合、そのイベントは中断されます。
  • キャラクターの所持している時限称号は、剥奪されます。

シナリオ中のスキン変更時の挙動
  • BGMは変更されません。
  • イベントは中断されません。
  • キャラクターの時限称号は剥奪されません。

適性名などの対応表


適性名
dex 器用度。
agl 敏捷度。行動順と回避力に影響。
int 知力。
str 筋力。
vit 生命力。体力と中毒麻痺の緩和判定に影響。
min 精神力。体力と抵抗力に影響。
aggressive 好戦性。中毒麻痺の緩和判定に影響。
cheerful 社交性。
brave 勇猛性。抵抗力に影響。
cautious 慎重性。行動順と回避力に影響。
trickish 狡猾性。
ep EP(ExtraPoint)。新規作成PCの親に指定した時に消費される。

カード属性
名称 対応 物理無効 魔法無効 物理・魔法無効
Physic 物理属性 × ×
Magic 魔法属性 × ×
MagicalPhysic 魔法的物理属性 ×
PhysicalMagic 物理的魔法属性 × × ×
Normal 無属性

命中属性
Avoid 回避属性。回避に成功すると効果を無効化。
Resist 抵抗属性。抵抗に成功するとダメージ系モーションを半減、それ以外を無効化する。
Unfail 必中属性。必ず命中する。成功率修正+5とほぼ同効果。必中属性の成功率は死に設定。








各バリアントのキャラクター情報ダイアログタイトル修正例
skin.xml 670行目前後(</Messages>より前ならどこでも可) に以下を追加して下さい。

学園バリアント
 <Message key="beastcard">守護霊カード</Message>

大江戸バリアント
 <Message key="skillcard">技能絵札</Message>
 <Message key="itemcard">道具絵札</Message>
 <Message key="beastcard">召喚獣絵札</Message>

SFバリアント
 <Message key="beastcard">特殊 カード</Message>

タグ:

CardWirthPy CWEditor
+ タグ編集
  • タグ:
  • CardWirthPy
  • CWEditor

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2023年10月14日 11:29