スキン > スキン作成

スキン作成


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

目次

はじめに

無から作るのは大変なので、まずは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フォルダからコピーして入れておいた方がいいかもしれません。
Face 顔画像フォルダ。
Data/直下にある方のFaceに置くと全スキンで使えますが、このスキンでしか使わないという顔画像はこちらに入れます。
どちらにも1枚もなければ、CWと同じく父母画像が表示されます。
Name 自動選択の名前リスト。
なければ、Skinbaseから参照されます。



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>というような形で記述していく。

初期クーポンを使ったテクニック (注意!1.1では一部不具合があります)
初期経験点 上記例のように-で指定すれば汚名になるので成長が遅い/早いという表現ができる。
ただしどんなに上下させても初期レベルは変わらない。
(レベルアップ条件を満たす場合、次に入ったシナリオ終了時にレベルアップ)
@レベル上限 連れ込みNPCで多用されているテクニックが同様に有効。点数=最大レベル。
型の最大レベルと競合する場合は大きい方優先(1.1以降)なので最大レベル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。
level 初期レベル。省略時:1。
firstSelect 登録ダイアログで最初に選択されている項目。省略時:False。
<Physical> 身体的特徴。
<Mental> 精神的特徴。
<Name> 年代名。_<Name>という形式でクーポンが配布される。
<Coupons> デフォルトで追加されるクーポン。熟練・老獪はここで指定。

<Natures> 型情報の全体タグ。下位に<Period>タグを置いていく。
<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以降、スキンに判定クーポンを付けることができるようになりました。
そのスキンを付けている間は、PCが持っているかに関係なく、定義したクーポンの所持分岐が成功します。

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

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

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です。
スキンのディレクトリに同一ファイル名(拡張子は自由)で入れることでスキン側が優先認識されます。

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 貼り紙「適正レベル以外の貼り紙を表示」


[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は無ければSkinBaseのものが使われるので省略できます。
yado2で1以上のレイヤを使うと開始エリアで背景継承しているシナリオの画面を乱してしまうのでシナリオをはじめる前に0の背景に戻すなどの使い方があります。

WSN形式なのでWsn.1~3の機能も使えます。
使えないものは以下です。(多分)
  • 変数/バトル/パッケージ全般
  • キャスト/技能/アイテム/召喚獣/情報の獲得剥奪および所持分岐(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"
「パーティ情報」の「ダイアログを開く」になります。
あり得ない組み合わせを指定するとフリーズするので注意。

command 対応するarg
"ShowDialog" ダイアログを開く "YADOSELECT" 開始(スタート画面)
"CLOSE" 終了(スタート画面)
"PLAYERSELECT" 宿帳を開く
"ALBUM" アルバムを開く
"SCENARIOSELECT" 貼り紙を見る
"PARTYEDIT" パーティ情報
"PARTYSELECT" 冒険の再開
"PARTYRECORD" パーティの記録(Py3以降)
"BACKPACK" 荷物袋
"STOREHOUSE" カード置き場
"SAVE" セーブ
"ReturnTitel" 宿を出る
"MoveCard" 選択中カードを
argの場所へ送る
"BACKPACK" 荷物袋
"STOREHOUSE" カード置き場
"PAWNSHOP" 売却
"TRASHBOX" ゴミ箱
"ChangeToSpecialArea" 特殊エリアへ遷移 "-1", "-2", "-5" カード移動操作エリア
"-3" 仲間を外す
"-4" キャンプ

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

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

[Xml]アクションカード

アクションカードのグラフィック・性能・効果を変更できます。
これらはエディタ製カードのように使用時イベントも付けることができます。


アクションカードの変更はカードワースの戦闘に大きな影響をもたらします。
たとえばカード交換のカード消去モーションを取ってしまえば、賢者の杖のようなカードを別に持たない限り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シナリオで適当なカードを作り、それをコピペする方法がお勧めです。


適性名などの対応表

名称 解説
dex 器用度。
agl 敏捷度。行動順と回避力に影響。
int 知力。
str 筋力。
vit 生命力。体力と中毒麻痺の緩和判定に影響。
min 精神力。体力と抵抗力に影響。
aggressive 好戦性。中毒麻痺の緩和判定に影響。
cheerful 社交性。
brave 勇猛性。抵抗力に影響。
cautious 慎重性。行動順と回避力に影響。
trickish 狡猾性。

カード属性
名称 対応 物理無効 魔法無効 物理・魔法無効
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>