--------------------------------------------------------------------------------
XLV Motion仕様 MF版
--------------------------------------------------------------------------------
本Documentは筆者の朧げな記憶を元に執筆されています。
細かな差異等は適宜脳内補完しつつ読み進めてクダサイ
--------------------------------------------------------------------------------
■Motion構成

XLVでは1つのMotionファイルのペアを『Sequence』と呼びます。また、
フィニッシュ時(要は射精時)のMotionファイルのペアを『Finish』または
『END』と呼びます。

XLVのMotionは最大10Sequence+Finishで構成されています

例えばMiniLoversのMotionであれば、1体位あたり4動作で構成されていますが、
XLVではFinishを特殊扱いとするので『3Sequence+Finish』という扱いになります

XLVでのMotion最小構成は『1Sequence+Finish』で、最大構成は
『10Sequence+Finish』になります。MotionはFinishがあることを前提とし、
1Sequence〜10Sequenceまでの任意の数を設定することができます。

例えばMiniLoversの体位から2動作増えた『5Sequence+Finish』という構成
を取ることもできますし、逆に動作を減らした『2Sequence+Finish』という
構成を取ることもできます。

このあたりはMotion職人様の匙加減次第で、最初は4Sequence作る予定だった
けど途中で飽きたので2Sequenceで終わりというのもアリ。途中で興がノッて
7Sequence作ってしまったというのもアリです。

内部実装としては、現在のSequenceが最終Sequenceであった場合に、
NextSequenceの要求が発生するとFinish Stateへと移行する形となっています。

--------------------------------------------------------------------------------
■Motion再生時の配置

XLVの初期配置はMiniLovers準拠で、責め側受け側共に同じHeadingAngleで
通常時は受け側が責め側の100unit前方に配置、反転時は責め側が受け側の
100unit後方に配置されます。

正直Motion作成に関しては門外漢なのでMotion作成上の注意点等に言及する
ことができません。

位置調整に関しては、本当にやりたい事と実際にPapyrus言語でできる事に
随分とギャップがあるので、あーもーどしよっかなーメンドクセーなー。
という感じなのでいつかそのうち…。

--------------------------------------------------------------------------------
■Motion設定

XLVでは1つの体位をそれぞれMotionStructureという構造体にデータセットと
して保持しています。これらのインスタンスはxLVCellというCellに実体が置か
れており、このインスタンスのPropertyを設定する事で体位を定義することが
できます。

細かい設定をしないのであれば、これらのインスタンスは既に殆ど設定が終わ
っている状態なのでモーションファイルを配置し、sequenceの値を書き換える
だけでとりあえずの設定は終わりです。
(各MotionStructureの設定に関しては、『Skyrim エロMOD晒しスレ』の有志
の方にご協力いただきました。かなり膨大な数のクリック地獄だったと思います。
本当にありがとうございました。)

例としてMiniLoversと同じ形式のMotionファイルを設定すると仮定します
本Documentを書いている時点でXLVにはMFの000〜005まで使用している
ので006番のMotionStructureへ設定を行うとします。

○Data/meshes/actors/character/animations/xlv/以下に
LVMF006_000_D.hkx
LVMF006_000_O.hkx
LVMF006_001_D.hkx
LVMF006_001_O.hkx
LVMF006_002_D.hkx
LVMF006_002_O.hkx
LVMF006_END_D.hkx
LVMF006_END_O.hkx
を配置します。Motion再生は000番からはじまり、_Dが受けで_Oが責めです。
これらはFNIS経由で名前を固定してあるのでファイル名間違いには注意です。

○CKでxlv.esmを読み込みInteriorのxLVCellをLoadします

○xLVCell内の『MotionStructure006』をEditで開き
　Scripts TabのPropertiesを開き、sequenceのProperty値を3に書き換えます
　※用意したMotionファイルが4Sequenceであればこの値は4にします

○この内容を例としてxlvMotionSetup006.espとして保存し
　Skyrimに読み込ませます

※『新規導入の場合』はこれで完了です
MF Player testでUキーで体位を進めていき、背面騎乗の後に追加したMotion
が再生されれば成功です

--------------------------------------------------------------------------------
■Motion設定に関する注意点

※『新規導入でない場合』

SkyrimでのPropertyの扱いはSave内のものが最も優先度が高くなっています。
つまり一度Saveに取り込まれてしまったPropertyは、後からesmやらespで
値を変更しても『いやそれSaveにありますし。こっち使いますし。』
という事が起きます(タブン)。
まぁ要するにSkyrimはModをUpdate出来るようには作られてないのデス

hlpやreloadscriptを駆使すれば何とかなるかも知れませんが、
ここではより確実な方法を。

先ほどのxlvMotionSetup006.espに新しいQuestをStart Game Enabledで
作成し、

>>>>>
Scriptname xlvMotionSetup006Script extends Quest

xLVMotionStructure Property TargetMotion Auto

Event OnInit()
  TargetMotion.sequence = 3
  Stop()
EndEvent
<<<<<

こんなScriptを貼り付けてやり、TargetMotionにxLVCellのMotionStructure006
をProperty Linkしてやると良いかと。
ちなみにこのOnInitとMotionStorageのデータ構築のどちらが先に走るのか
というのが不確定なので、導入後一度Save&Loadをするとより確実。

メンドクサイですね。

ちなみにというか、この項の最初に書いたPropertyの問題が逆に良い方に働く
例と言いますか、このSetupを一度行ったらSaveDataに
このMotionStructure006のsequence=3という情報が書き込まれるので、
本項と前項で作成したespは外してしまっても変更内容は記録されたままになります。
まぁ、新規セーブではじめる場合はまた適用しないとなんですが…

--------------------------------------------------------------------------------
■MotionStructure詳細設定

[string SIGNATURE]
Motionの固有名です、OblivionのLovers時代にあったUMIDみたいな使い方を
想定してます。してますが今は何もしてません。

[string TYPE_TAG]
体位系列を設定するためのエントリです。例えば正常位であれば"[SEIJOUI]"
騎乗位であれば"[KIJOUI]"みたいな感じで何系の体位なのかを設定します。
パイズリフェラなら"[PAIZURI] [FERA]"みたいに複数のタグをつけたり
することも想定してます。してますが今は読み取り判定部分は作ってありますが、
分類部分を全く作ってないので機能してません。

[int sequence]
1〜10まででSequence数を設定します。この値が0だとそのMotionデータセット
はValidだと見做されないのでMotionStorageに反映されません。必須項目

[int VoiceLevel000〜VoiceLevel009 + VoiceLevelFin]
0〜3までの声の大きさを設定します。Motionの構成によってはSequence
進行に応じて動きが激しくなっていくとは限らないので、途中で動きの遅い
Motionを挟んだ場合などに、声の大きさを抑えたりできるようにSequence
ごとに設定できるようになっています。
デフォルトでは結構適当に割り振ってあるので動きの激しさなどに合わせて
適宜調整してください。

[int SoundDuration000〜SoundDuration009 + SoundDurationFin]
声の再生間隔をSequenceごとに設定します。デフォルトでは全て2.0秒間隔
に設定してあるので、動きの激しさ等に合わせて適宜設定してください。

[int EnvDuration000〜EnvDuration009 + EnvDurationFin]
効果音(クチュ音)の再生間隔をSequenceごとに設定します。デフォルトでは
2.0秒間隔に設定されています。SoundDurationと同値か近い値が無難かと。

[Idle iDef000〜iDef009 + iDefFin]
既に設定済みのハズですが、自前でFNIS設定を行ったAnim EventとLink済の
Idleが存在するならば置き換えてもイイかも知れません。

[Idle iOff000〜iOff009 + iOffFin]
iDef系コメント参照

[int ExpressionD000〜ExpressionD009 + ExpressionDFin]
各Sequenceごとの表情を設定します。デフォルトでは9番の『Mood Fear』
が設定されています。
7: Mood Neutral
8: Mood Anger
9: Mood Fear
10: Mood Happy
11: Mood Sad
12: Mood Surprise
13: Mood Puzzled
14: Mood Dusgusted
あたりが使用できるかと思います。詳細はSetExpressionOverride関数の
aiMoodの値を調べてみてください。

[int ExpressionO000〜ExpressionO009 + ExpressionOFin]
ExpressionD系コメント参照

[int EStrengthD000〜EStrengthD009 + EStrengthDFin]
ExpressionD系で設定した表情の適用度合いを設定します。設定可能な値は
0〜100(%)までです。詳細はSetExpressionOverride関数のaiStrengthの
値を調べてみてください。

[int EStrengthO000〜EStrengthO009 + EStrengthOFin]
EStrengthD系コメント参照

--------------------------------------------------------------------------------
