スキン > 実践例

実践例


このページは書きかけです。(追記歓迎)
XMLの編集実践例をいくつか書いていきます。


機能追加


「仲間を外す」解散エリアに「宿帳」を追加する


 JUDGMENTでは「仲間を外す」(パーティ編成)の中にも「宿帳を開く」が追加されています。これによってキャラを外した空き空間にすぐに別キャラを加入させることができます。便利な機能なので、他のスキンでも使いたいところです。
 今回はClassicスキンに移植してみましょう。


1.JUDGMENTのResource\Xml\Yado「-3_PartyBreakup.xml」を開く

 これは、仲間を外す(解散)特殊エリアのデータが記録されたXMLです。
30行目あたりから以下の「宿帳を開く」カードの実体をコピーします。

    <MenuCard arg="PLAYERSELECT" command="ShowDialog">
     <Property>
       <Name>宿帳を開く</Name>
   <ImagePath>Resource/Image/Card/COMMAND2.bmp</ImagePath>
   <Description>宿の待機メンバーを表示。</Description>
   <Flag />
   <Location left="121" top="75" />
   <Size scale="100%" />
   </Property>
  <Events />
  </MenuCard>

 またはClassicスキンのYado1 or 2から持ってきても良いです。中身は同じなので。
 慣れないうちはとりあえず「<MenuCard>から</MenuCard>まで全部コピーする」と覚えておくのがいいでしょう。


2.ClassicスキンのResource\Xml\Yado「-3_PartyBreakup.xml」を開く

 コピーした上記テキストを貼り付けます。
どこに貼り付けるべきかというと
メニューカードの配置を決める<MenuCards>の後ならどこでもいいのですが、
変なところに貼り付けてしまうとスキンが開けなくなるので
ひとまずは安全のために「次の<MenuCard>の直前に置く」と覚えましょう。

15行目の <MenuCards spreadtype="Custom">の次、<LargeMenuCard command="DissolveParty">より前にに貼り付けて下さい。改行はあってもなくても関係ないです。読みやすい程度に入れましょう。




3.確認してみる

 それでは、実際にCWPyを起動して確認してみます。


見事追加することができました!
今回は運良く一発で成功できましたが、現実には変なところに文字を混入させてしまい、「起動しなくなった!なんで!?」ということは非常にありがちなので、いざという時のために編集前のものを丸ごとコピーして別の場所に退避しておくといいです。

解散メニューカードと同じ台紙にしたい時は、
<MenuCard arg="PLAYERSELECT" command="ShowDialog">
↓
<LargeMenuCard arg="PLAYERSELECT" command="ShowDialog">
とします。
要するにLargeをつけるとキャストカードと同じ大きさになります。



宿に「BGM変更」機能を追加する

 色んなスキンに追加されていて、今一番需要が多いと思われる機能です。
BloodWirthでは背景に組みこまれていて自然なUIになっていますが、
エフェクトブースターでの背景くりぬき、レイヤ、scenariostartエリアについても
覚えなくてはならないので、とりあえずJUDGMENT型でやってみましょう。


1.追加したいスキンのBGMフォルダに追加で再生する音楽ファイルを入れる
 まずは指定する音楽を入れなければなりません。
JUDGMENTからBGM1~4をコピーしてきます。

JUDGMENTではBGM2~3はmidiになっていますが、Pyは拡張子が違っていても再生できるので
これらを自前で用意したMP3などにすり替えても構いません。
PyはMIDI, WAV, MP3, OGGをサポートしています。


2.JUDGMENTのResource\Xml\Yado\「02_Yado2.xml」を開く

 これは、パーティを開いた状態の宿エリアのデータが記録されたXMLです。

前回習得した「メニューカードを移植する方法」が応用できます。
50行目あたりから150行目あたりまでの「レコード」をコピーしましょう。


3.追加したいスキンのResource\Xml\Yado\「02_Yado2.xml」を開き、ペースト

 21行目、<MenuCards spreadtype="Auto">の次以降に貼り付けます。
spreadtypeはカードの並びを自動で中央に並べるか、カスタムで自由に配置するかの設定です。
レイアウトにこだわりたければ"custom"に変えてみましょう。

再生を変更するメニューカードを作るだけならこれにて完了です。
が、これだと宿に入ったタイミングではDefinnのままです。
これを任意に変更できるようにするにはシナリオと同じように「到着イベント」を作る必要があります。


4.到着イベントを移植する

 再度JUDGMENTのYado2.xmlを開いて、到着イベントがどこで設定されているのか探してみます。
「到着」でテキスト検索してみると、273行目にあるのがわかります。
※これはエディタでのデフォルト名なのですべてのスキンでそうなっているとは限りません。

実際にはメニューカードを置き終わったことを示す</MenuCards>の
次の<Events>からが到着イベントとなります。

<Events>から</Events>までを全コピーして、自前のスキンの到着イベントに貼り付けましょう。


5.細かい修正

 機能的にはこれで完成ですが、このままだとゴシップ設定を共有している状態になります。
自前の設定を持ちたければ、
たとえば<Branch gossip="JUDGMENT/BGM0" type="Gossip">となっている部分の
"JUDGMENT/BGM0"部分を自分の管理したい文字列に置き換える必要があります。




宿やキャンプ画面に「ロード」機能を追加する(Py4以降)

 CardWirthでロードを行う(前回のセーブからやり直す)には、F9か冒険の中断を行い、宿を出る→スタートで拠点を再選択する必要があり、これは少々手間です。

 Pyではゲームオーバー時に実行できる「ロード」は、ポストコマンドコンテントとしていつでも呼び出すことができるようになっています。ただそれだけだとクリックした瞬間に確認なくロードされてしまうので、Py4以降は確認ダイアログ付きで「ロード」を行うポストコマンドが実装されました。


1.「ロード」を追加したいXmlを開く

 キャンプ画面(シナリオ中)に追加するなら、Resource\Xml\Scenario\-4_Camp.xml
 宿内(パーティを開いた状態)に追加するなら、Resource\Xml\Yado\02_Yado2.xml
 宿内(パーティ無し)に追加するなら、Resource\Xml\Yado\01_Yado.xml
 を、開いて下さい。

2.「ロード」用のシステムメニューカードを追加する

 以下のような感じでロード用メニューカードを作ります。
 挿入位置は「宿帳を開く」の追加で覚えたように、
 他のメニューカードの閉じタグ</MenuCard>の直後からペーストすると安全です。
 メニューカードの位置は<Location>タグの数値をいじって調整して下さい。

<MenuCard arg="Load" command="ShowDialog">
<Property>
<Name>ロード</Name>
<ImagePath>Resource/Image/Card/COMMAND11.bmp</ImagePath>
<Description>ロードを行います。</Description>
<Flag />
<Location left="150" top="75" />
<Size scale="100%" />
</Property>
<Events />
</MenuCard>

 <MenuCard arg="Load" command="ShowDialog">の部分は、単に<MenuCard command="Load">とすることもできます。こちらはゲームオーバー画面で使われている機能で、警告なしで(ダイアログを開かず)ロードが実行されます。警告など要らない、もしくはメッセージイベントの選択肢から実行する際はそちらを使っても良いでしょう。

 JUDGEMENTの2.2以降では、実践例としてパーティ情報ダイアログを開く前に選択肢を設けて、ロードや付属テキストを開く(F8)を実行できるようにしています。自由にコピペして下さい。




システム変更

血縁システムを師事システムに変更する


 CWのシステム上、二世代三世代と育ってくると、親子PCだらけになってしまうので、かつては「父:」「母:」のクーポン部分テキストを改造して、「師:」にする非公式パッチが提供されていました。
 これはPyではスキンのキーワードを書き換えるだけで達成できますが、BloodWirthでは、そこから更に踏み込み、男女関係なく親に指定することが出来るようになっています。
 これは簡単なフラグの変更によって実現しています。


1.Skin.xmlを開く
 「親に指定可能な性別のフラグ」はSkin.xmlの<Sexs>タグで管理されています。
 以下のfather= mother=の値を両方とも"True"にするだけでOKです。

<Sexes>
   <Sex father="True" mother="False" subName="Male">
     <Physical agl="0" dex="0" int="0" min="0" str="1" vit="0" />
  <Mental aggressive="0.5" brave="0.0" cautious="0.0" cheerful="0.0" trickish="0.0" />
  <Name>♂</Name>
  </Sex>
 <Sex father="False" mother="True" subName="Female">
     <Physical agl="0" dex="1" int="0" min="0" str="0" vit="0" />
  <Mental aggressive="0.0" brave="0.0" cautious="0.5" cheerful="0.0" trickish="0.0" />
  <Name>♀</Name>
  </Sex>
 </Sexes>


血縁システム関連のキーワードもこのファイル内にあるので、ついでにこれらを書き換えるといいでしょう。デフォルトで入っている「%s」は、CWで言えば「#m」というか、実際に指定したPCの名前が入ります。
つまり、「%sさん」という風に名前の後ろに敬称を付けたりすることも可能です。

 <Message key="relation_message">親となる条件を満たしている冒険者が宿にいます。</Message>
 <Message key="father">Father</Message>
 <Message key="mother">Mother</Message>
 <Message key="father_coupon">父:%s</Message>
 <Message key="mother_coupon">母:%s</Message>


独自イベントの実装

到着イベントやカードイベントの構造がわかってくれば、
CWXEditorのWSN形式で独自のイベントを作り、スキンに持ってくることも容易になります。
その際の注意点やテクニックなど。


PCに番号クーポンを配る


 CWでキャラクターを操作するには「選択メンバ」にすることが基本です。
シナリオ内で選択メンバを選ぶには_1~6までの番号クーポンを使う事が多いですが、シナリオ開始時に配布する物なので宿内では使用することが出来ません。
これでは不便だという場合は、以下のようにして疑似的に配布してしまいましょう。

CWXスクリプト(CWXEditorでそのまま貼り付け可能です)
start "手動番号クーポン配布"
getcoupon T, ":判定用", 0, false
brcoupon R, false, ":判定用", and, false
sif true
losecoupon M, ":判定用", false
getcoupon M, ":1", 0, false
brcoupon R, false, ":判定用", and, false
sif true
losecoupon M, ":判定用", false
getcoupon M, ":2", 0, false
brcoupon R, false, ":判定用", and, false
sif true
losecoupon M, ":判定用", false
getcoupon M, ":3", 0, false
brcoupon R, false, ":判定用", and, false
sif true
losecoupon M, ":判定用", false
getcoupon M, ":4", 0, false
brcoupon R, false, ":判定用", and, false
sif true
losecoupon M, ":判定用", false
getcoupon M, ":5", 0, false
brcoupon R, false, ":判定用", and, false
sif true
losecoupon M, ":判定用", false
getcoupon M, ":6", 0, false

※基本的にイベント終了前に剥奪するのが安全です。時限称号なのでシナリオから帰ってくれば消えますが、パーティ構成が変わる可能性のある宿帳や、解散エリアに行く前に剥奪しないと順番が狂う可能性が出てきます。念のためStartScenarioでも剥奪した方が良いでしょう。



スクリーンショットに表示されているリソースは、groupAskによって作成され、CardWirth愛護協会によって配布されている「CardWirth ver1.50 Fullpack」に入っているものです。ReadMe_1st_Full.txt内の「● 著作権/免責/転載に関して」節の内容に基づいてスクリーンショット内に使用しています。
最終更新:2020年10月20日 23:43