バリエーションは必須ではありません
バリエーションは提供され、かつ条件が満たされた場合に適用されますが、必須ではありません。基本スプライトは常に機能します。
スプライトのファイル名に対応するサフィックスを追加することで、バリエーションを提供できます。
例えば、id が doorframe_arch の場合:
doorframe_arch.pngdoorframe_arch_snow.pngdoorframe_arch_dir0.pngdoorframe_arch_dir0_snow.pngdoorframe_arch_skin1_snow.pngdoorframe_arch_skin1_dir3_snow.png- ...
バリエーションシステムは カスタムスキン、キャラクタースプライト、アニメーションスプライト で動作します。
基本スプライトを忘れずに
バリエーションを提供する場合でも、基本スプライト myCustomID.png が必要です。
以下に各種バリエーションを紹介します。
キャラクタースキンセット
これらは性別に依存するペアのテクスチャで、キャラクター作成時にランダムに選択されます。
キャラクターの性別がランダムの場合
例1:単一スキンセットペア
例えば、ninja に男性用と非男性用の異なるスプライトを提供するには、Excel の tiles 列に 0,1 を入力し、バリエーションとして ninja_skin0.png と ninja_skin1.png を提供します。("ninja" はキャラクター ID です)
例2:複数スキンセットペア
追加のスキンセットをサポートするために、より多くのペアを追加できます。
例えば、NPC に 6 つのバリエーション(男性用 3 種、非男性用 3 種)を与えるには:
_skin0から_skin5までのスプライトを提供します。- 次に、Excel の
tiles列に0,1,2,3,4,5を入力します。
ペアのいずれかがランダムに選ばれます。偶数インデックスが男性、奇数インデックスが非男性(女性と???)です。
定義できるバリエーション数に制限はありません。
キャラクターの性別が固定の場合
キャラクターの性別がランダムでない場合でもランダムなスキンバリエーションを提供したい場合は、各ペアで同じスキンインデックスを使用できます。
例えば、3 つのスプライト(_skin0、_skin1、_skin2)を使用するには、Excel の tiles 列に 0,0,1,1,2,2 を入力する必要があります。
定義できるバリエーション数に制限はありません。
注意
カウントは 0 から始まります。
idSkin は tiles 列に複数の値がある場合のみ有効です。実行時に特定のキャラクターのスプライトを切り替えるには、スプライトオーバーライドを使用してください。
方向スプライト
これは通常、家具に必要です。id_dir0.png、id_dir1.png、id_dir2.png、id_dir3.png で最大 4 つの方向バリエーションを提供できます。各方向はオプションで、スキップ可能です。
キャラクターも方向スプライトを使用できますが、推奨されません。
雪バリエーション
id_snow.png バリエーションを提供することで、雪原地帯や冬季に自動切り替えが有効になります。
サフィックスの順序
上記のバリエーションはすべて組み合わせ可能で、順序は自由です。id_snow_skin1.png と id_skin1_snow.png はゲーム上同じものとして扱われます。
複数のファイルが一致する場合は、次のリストで最も上にあるものが使われます。
_skinN_dirN_snow_skinN_dirN_skinN_snow_skinN_dirN_snow_dirN_snow- 基本スプライト
カスタム状態
Mod は戦闘用スプライトなど、独自の状態を追加できます。Mod の読み込み時にサフィックスとルールを一度だけ登録してください。
SpriteReplacer.states.Add(("_combat", c => c.Chara?.IsInCombat == true));ルールが成立している間は、id_combat.png が通常のスプライトの代わりに使われます。id_combat.ini を置くとアニメーションになります。このサフィックスは id_combat_snow.png や id_skin1_combat.png のように、他のバリエーションと任意の順序で組み合わせられます。
- 同時に有効な状態は 1 つだけです。複数のルールが成立した場合は
statesの先頭に近いものが優先されます。他より優先したい状態にはstates.Insert(0, ...)を使ってください。 - ルールは、該当ファイルを持つ画面上のオブジェクトごとに毎フレーム実行されます。アイコンの描画時にも実行され、そのときキャラクターが現在のマップにいるとは限りません。軽い処理にして副作用を持たせないでください。ルールが例外を投げた場合は不成立として扱われ、ログは一度だけ記録されます。
- 状態は独立したテクスチャにのみ有効で、タイルシートには効きません。
- 状態スプライトには基本スプライトの
.prefが使われます。
ルールで表現できない場合は GetSpriteData(int dir = 0, bool snow = false) にパッチを当てて、描画したい SpriteData を返すようにしてください。アイテムは Card.GetSpriteData、キャラクターは Chara.GetSpriteData にパッチを当てます。静止画でもアニメーションでも、独立したテクスチャにはこの戻り値が使われます。