スキン > スキン作成

スキン作成


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

目次

はじめに

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

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

フォルダ構成

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

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

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

Face Data/Faceにも1枚もなければCWと同じく父母画像が表示される。
EffectBooster 独自バリアントを作る場合以外不要です。
Name 自動選択の名前リスト。
Resource\Image\Button内13枚 小さいアイコン類
Resource\Image\CardBg内5枚 ペナルティ、プレミア、レア、ホールド、リバースの下地。
1.20に含まれていないため
Resource\Image\Card\COMMAND5.bmp カード置場の画像。同上
Resource\Image\Status\MIND0.bmp 同上
Resource\Image\Dialog内30枚 Py新機能のためのオリジナル素材


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> 身体的特徴。 dex:器用度 agl:敏捷度 int:知力 str:筋力 vit:生命力 min:精神力 
基本値は6。最大値は基本値+6になる(たとえば8にした場合、変動後の最大値は14)。
<Mental> 精神的特徴。 aggressive:好戦性 cheerful:社交性 brave:勇猛性 cautious:慎重性 trickish:狡猾性
基本値は±0。小数点有効(20160204版以降)。
<Enhance> 能力値修正。 avoid:回避力 resist:抵抗力 defense:防御力
所有時ボーナスとほぼ同じ。-1でもマイナスをつけた場合、+10の完全防御系スキルを貫通してしまうので注意。
<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>


キーワードの変更

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の位置をバー部分の透過色として扱う仕様です。
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の機能も使えます。
使えないものは以下です。(多分)
  • 変数/バトル/パッケージ全般
  • キャスト/技能/アイテム/召喚獣/情報の獲得剥奪および所持分岐
  • キーコード発火イベント(付けられるがカードを使用できないので無意味)
  • _番号クーポン(シナリオに入らないとつかない)


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" 冒険の再開
"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 混乱





タイトル修正例
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>