※ 追記:V1.96に更新されてましたね。それに関しては記事の下の方で書いてます。
HENTAI SKYRIM 万歳!!
変態MODSKyrim街道まっしぐらな今日この頃、とても重宝させていただいているMOD「Fill Her up Baka Edition」、アニメーションが本当にハイえちリティで思わずはへーっ!と見とれてしまいます。作者さんのセンスには脱帽ですね。
…おや?ご存じないとな?それはご自分の目で確かめてみてネ(注意:NSFWです)。もし興味ないとのことでしたらブラウザバック推奨です。そういう記事ですハイ!
ただちょっとこのMODには意図した動作なのか判断ができないものがあり、個人的にはどうにか変えたいなと思ったところもあります。
1. 意図しない動作?
基本的には複数のNPCが同時にデフレーション(漏れるアニメーション)した時に発生します。
アニメーション関連
同時に複数NPCがデフレーションした場合、他方のNPCが装備しているアイテムが他NPCに混ざってしまうことがある
アニメーション再生が終了した後脱衣したアイテムを再装備させる処理があるのですが、その装備を保持しているFormListが一つしかなく、各NPC間で使いまわされているため同時にデフレーションが発生するとFormListが上書きされて一番最後にFormListを更新したNPCの装備が追加、装備されてしまうケースがありました。
アニメーションが再生されない場合がある
・条件分岐によって再生するアニメーションを設定しているが、どの条件にも該当しないパターン用のアニメーションが何もないためその場合は棒立ちになります。(←仕様の可能性もあります。
・どのアニメーションを再生したかを保持している変数が一つしかなく、かつ各NPC間で使いまわされているため別NPCの情報で上書きされてアニメーションの再生が正しくできていないケースがあるようです。
アニメーション再生から抜けられない
・上記に同じく変数が各NPC間で使いまわされているため終了用のアニメーション設定がおかしくなって再生されていないケースがあるようです。
・↑に追加で、何らかの要因、タイミングによってはモーション再生中に内部的に武器を装備した状態になってしまっていることがあるようです。それが原因なのか、そのまま終了モーションを再生させようとしても再生されず現在実行中のモーションのままになるケースがあるようです。
スペル〇関連
スペル〇のエフェクトが意図したように反映されていない
※要MCM設定。
どの種族のスペル〇(人間、ドラウグ、動物など)を中〇しされたかによって、確率で股から漏れ出す液体のエフェクトが変わる機能が実装されていますが、expel(設定したキーを押して自分でスペル〇を押し出す)を実行した時だけになっています。
NPC、プレイヤーに対して一定確率で自動デフレーションする処理では反映されず、常に1パターン。NPCは自動デフレーション以外にないため実質常に1パターンです。
喘ぎ声関連
プレイヤーは10秒間隔で喘ぎ声が再生されるようになっていますが、NPCは一回だけです。ただこれは意図的にプレイヤーのみに実行するように実装しているような感じなので仕様なのかもしれません。
脱衣設定関連
NPCに脱衣処理が反映されない
これはSkyrimの仕様の問題でもありますが、NPCに脱衣処理をした後スペル〇関連の防具を装備させているので、バニラの自動最強装備処理が動いてしまいスペル〇以外のスロットの装備が元に戻ります。
舌がずっと装備されたままになる
舌MODを入れていて、MCMのオプション上で舌を使うオプションにチェックをするとデフレーション時に舌を出すようになるんですが、これがデフレーションが終わっても付いたままになることがあります。
原因は装備の舌装備アイテムの追加、削除、着脱を行っている関数にあり、装備時と着脱時でどの舌装備アイテムを使うのかを共有できておらずそれぞれでランダムで抽選しているためです。
2.パフォーマンス関連
bodymopth、SLIFをonにしてアニメーションが再生されるとFPSが著しく低下する
当環境ではFPSが10程度削られてしまいます。漏れるアニメーションを再生しているNPCが増加すれば比例して悪化します。3人同時に発生した時に試しにFPSを60出ている状態から観測したところ30まで下がりました。
原因はSlifのモーフィング処理(SLIF_Morph.morph)を0.1秒感覚で繰り返しコールしている処理があり、ここで相当なコストがかかっているためです。
デフレーション中にリアルタイムでおなかのふくらみの変化を表現するためにやっている処理ですが、このSlifのモーフィング処理はループごとにjsonファイルを読み込んだり書き込んだりなどのファイル入出力処理があるようなのでここがボルトネックになっているのでしょう。後は単純にこの関数の処理量(ステップ数)が多いという事もあると思います。
追記:SLIFの中身をみたんですけど、ファイルへの保存や読み出し処理などの前処理をやって最後に結局はNiOverrideのSetBodyMopthを呼び出して体系変えてるんで、これを直接コールして体系変えた方がずっと軽いんじゃないか、という気がしてきました。
3. その他
デフレーション時に手に入る錬金術素材がオートデフレーションの時は手に入らない
※要MCM設定。
プレイヤー用の実装ですが、expelでデフレーション後、スペル〇の種類に応じて追加で錬金術アイテムが手に入ります。(シャウラスの卵とか)しかしオートデフレーション時はNPCも共有している処理なのか実装されていないようです。
プレイヤーがデフレーションするときフリーカメラ(tfc)をすると、デフレーション終了後に一切キャラクターが動かせなくなる
スケベ心全開でまじまじと観察していたらゲームが続行不可能になってしまいました。武器も取り出せないしメニューも開けなくなります。とはいえ、これは通常の仕様の想定ではないきもします。
水泳中にも発生する
泳いでいるときにもオートデフレーションは動きます。潜っている時に発生すれば操作不能状態で下手すると窒息する可能性があります
ちなみに戦闘中でも動きますがこれはこれでアリなのでいいのです(圧
会話中でも動きますが…これは会話が進めづらくなってしまいますね。ほかにも錬金術台などの作業中にも再生されるようです。そうなると武器が取り出せなくなったり攻撃ができなくなったりします。
まとめ
基本的にプレイヤー一人で遊ぶように実装されていて、ところどころNPCにも処理をさせようとしているものの想定外の動作をしている箇所があるようで。NPCごとに持つべき変数をグローバル変数のように一つのスクリプト上で使いまわして共有しているためにデータに不整合が起きている印象です。
主人公オンリーでこのMODを使うのであればいいのですが、フォロワーを複数連れまわしてフォロワーにあれこれさせようとすると上記のような事象が発生してきます。私はもっぱら後者なので困る機会が多かったです。
で、これを全部変更してみたのですが
そんなわけでスクリプトをいじって遊んでます。
パフォーマンス問題もクリアし、各種アニメーションもプレイヤー、NPCともにexpelした時の処理をさせることができるようになり、NPCに処理させた場合の不都合な部分も修正しました。コードの変更内容はたくさんあるので省略で。
コードをいじらなくてもできることとしては、パフォーマンスの問題に関してはBodyMopthを使わなければ起きないのでとりまの対策としてMCMでこのオプションを無効にすることで片付くかもしれません。
後はフォロワーなどの他NPCに中〇しをしないこと、したとしてもそのNPCを連れまわさないこと、自分は中〇しをされないこと、まぁ要するに中〇しされるアクターが常に一人をキープできればパフォーマンスの問題も含めて特に問題はなく使えるんじゃないかと思います。後は自キャラを観察するのにtfc使わないこと。スケベ心を抑えよう!
…エ〇MODでスケベ心を抑えるとはこれ如何に
…で、直したはいいんですけど
どうせなら公開したいところだよなぁと思ってはいます。しかし他人様のものですから原作者のBAKAFACTORY氏とFill Her Upのオリジナルの作者さんに連絡を取って許可もらえたら公開したい、ところなんですが、となるとソースコメントもちゃんと書きたいですし、なんならもっとちゃんと直したいで、どうしようかなぁと。そういえばLLの成果物はLL外ではアップロードしてはいけないとかそんな規約ってあるんでしたっけね。ここの確認も必要ですね。
課題、もっと手を加えたい点
脱衣処理を完璧にしたい
脱衣の部分がちょっとまだ課題が残っているんですよね。NPCでもちゃんと脱衣されるように脱衣処理を各スペル〇装備(スペル〇エフェクトは装備アイテムによるもの)の装着した後に実行するように変えているのですが、Slot48,52,54の装備を脱衣するようにMCMで設定している場合はスペル〇装備が外れちゃうんですよね。スペル〇装備かどうかを判定してその場合は脱衣対象から外せばいいんですが、脱衣処理の部分が何というか特殊というか…16進数でスロット情報をとっている?ちょっと何をやっているのかわかんないんですよね。
後脱衣処理でスロット52の装備に対する脱衣がどうもうまくいかなくて。脱げはするんですが、そのあとのスペル〇装備が装備されないんですよ。スクリプト上では走っているはずなのですが…しゃーないんで装備のスロットを60とかにこっちで直して運用しているんですが、どうにかならないものか。
中〇しアクターリストの改良
中〇しアクターリストがちゃんと初期化、更新されるようにしたい。
MCMメニューのInflated ActorsのSperm Inside Playerで表示されているリストのことです。誰がぶっ放したかのアクターリストですね。
これが初期化されない、減らないという問題があります。一度アクターがリストに入るとそのアクターはずっと残ります。一応消そうとしている処理があるのですが、条件見る限りそこに流れることはほぼないんですよ。実際流れない。
ここを直したいですね。しかしこれひょっとしたら今回の私の修正の影響で発生するようになったのかもしれないなぁなんて…。以前からそうだったかというと特に見てなかったので記憶になくて。どうだったか…
npc毎に中〇しリスト、量のリストも保持したい
中〇しアクターリストはスクリプト上ではsr_InjectorFormlistというFormListになるんですが、これプレイヤーオンリーでしか想定されていなくて中身のActorたちがプレイヤーを含めどのNPCに中〇ししたのかという情報までは保持されていません。
これの何が問題なのかというと例えば所かまわずNPCが乱〇したりレ〇〇するような環境だとプレイヤー以外に他NPCが中〇しされたものも全部このリストにぶち込まれますので、知らん間にプレイヤーが何十人というNPCに中〇しを食らっているというやべー状況が生まれます。プレイヤーが男だろうが女だろうが関係ありません。男性主人公で遊んでいると、意図しないサイレントホモになってしまいます。
これがスカイリムの穴兄弟ですか。
また連続で中〇しを同アクターからされても1回分しか記録されません。アクターのダブり判定はおそらくrefIdで見ている(GetRefarenceActorで比較している)と思うので、例えばplaceatmeなどでコピーを作ってそれぞれぶっ放させるとリストにはそれぞれのコピーされたアクターが追加されます。
中〇しされたスペル〇の量に関してはされた側のNPCがそれぞれ保持しています。なのでここは他NPCからの影響は受けず、誰かが誰かに中〇ししたスペル〇がこっちに転送されてくるというニッチなエ〇同人の設定みたいなことは起こりません。
なので同アクターからでも連続で出されればその分増えます。ただこの量は単に「総量」というだけで何処のだれかからどれだけ、という形では保持されていないです。
またデフレーションする量はランダムに決定されますが、前述のように誰からどれだけの量をそれぞれ中〇しされたのかという情報も持っていないので排出されるスペル〇量はMCMで設定した種族事の量の固定数値で割り当てられた数値と中〇しアクターリストの中にいる連中の種族をもとに計算しているようです。
また排出されるスペル〇の種類に関しては中〇しアクターリストの中から種族を見てランダムで決まるので、中〇しされた覚えがないのにそのスペル〇が出てくることもあります。これがスカイリムの穴k
さらにアクターリストが減らない問題から、プレイスタイルや環境にも依存しますが長時間遊べば遊ぶほどほかのスペル〇エフェクトが抽選されにくくなります。
前置きがずいぶん長くなってしまいましたが、このもろもろの問題を解消するために中〇しアクターリストをNPC毎に保持させて管理したいんですよね。ただ修正規模はそこそこ大きくなりそうでしんどそうだなぁと。他のMODとの連携への影響箇所も結構あるので、そこまで面倒見ようとするとかなり大変です。
でもその方がいろいろ使い勝手はよくなるのも確か。正直直したい。デフレーション量の計算とかどの種族から出されたのをデフレーション処理をさせるかとか、現状は上で少し書いていますけどランダムに処理させているので、それぞれ保持してやる形にすればもっと単的かつ機能的かつリアリズム的に作れそうなんですけどね。何ならここからもっと機能を追加できそうです。
例えば中〇しされたStack順に出てくるとか。ほら、こういうのって文脈って大事じゃないですか?その方がエッッッ!!!
後手に入る錬金術素材もインベントリに追加ではなくて、その場で落ちてくれる実装にできるなら直したい。
これならNPCにも適応できるしその方がエッッッ!!!
そのアイテムの名前が「[NPCの名前]の〇〇」とかだったらさらにエッッッ!!!!
落ち着こう。まずはデルフィンのことを思い浮かべて…
ところでこのリスト増え続けたらどうなるんだろう?メモリはどの程度使われるのか。ふーむ。アクター一人当たりの情報量次第ですね。
追記:とりま全インフレーションしたアクターがすべてデフレーション済になったときにsr_InjectorFormlistを空にすることで対応できました。まぁ雑ですけどね…
追記の追記:からのリストの個別化開発中で気づいたんですけど、FormListってただスクリプトで宣言するだけじゃ使えないんですねコレ。スクリプトでFormListのプロパティを宣言してCK側でFormListを作って紐づけしないとダメでした。addFormしても全く反映されなくてなんでやー?と半日潰れてしまった。ただこの時の私にもう一ついってやりたいことがある。StoregeUtilを使えと。
追記の追記の追記:からの錬金術素材をその場で排出するようにし実装した結果がこちら
うわぁ、まるで広告にのってる「今が旬!大地の恵み盛り合わせ!」みたいな感じ
…ではないですね。むしろグロ。ナメクジとかウ〇虫とかいますし食えたもんじゃない。まぁそれが一種のカタルシス効果をですね…
他にも錬金術素材のグラフィックの都合上仕方がないですが、メッシュがでかすぎるのと、器にもりもりはいった素材がドコっと出てくるのでそれはちょっと(だいぶ)違和感。
表情をアニメーションさせたい
現状は固定の表情なんですが、できれば表情も動いてほしいんですよね。ほら、ひりだすときは力んでほしいじゃない?ただこれに関しては現在個人的に一から作成している別MODがあってこいつができてからかなぁなんて。
お腹パンパンの時に「ちゃぷんちゃぷん」音がなったらいい
できるかどうかさっぱりポンですが、あったら絶対今ー支部。歩いているときとか走っているときとか、武器降ったときとか。フォロワーからもコメントされるしね。
ドキュメントの課題
修正はともかく、連絡などは英語で書く必要もありますからそこもまた課題ですね。英語でコードコメントの説明を書く必要もある。人のソースをメンテするのは大変ですからね…私の個人的な解釈で直したものですし。
なるだけ原作者の邪魔はしたくないところ。まぁもうちょっと考えますかね。
追記:祝:アップデート!V1.96へ
V1.96にアップデートされていました。口から吐き出すモーションが追加されたほかに上記でも挙げたbodymopth関連のパフォーマンス問題に対するものなど様々なBugfixも行われたみたいです。
とはいえすべてが直っているわけではなかったようで、複数のキャラクターがデフレーションすると互いの装備がごちゃ混ぜになってしまうなどの不具合はあったんですが、スレッド内の有志の人たちが直したコードを共有してくれているので、それをパッチとしてあてればかなり遊びやすくなっています。
追記の追記:卵などのアニメーションが再生されず宙に浮いてしまう問題の解決方法がわかった
デフレーション時に精〇の種類によっては卵ができてきたりすることがあるんですが、この卵などの物体がキャラクターの左右に浮いたままになってしまう現象が発生していました。その現象についての対策がようやくわかりました。
1. 5.0x系のXPMSSEを使っていると発生する場合がある
必要要件の中にも含まれているXPMSSEですが、これが5系のバージョンだと卵などのアニメーションがうまく動かないようです。5.0x系(少なくとも5.04まで)は試験的な機能として実装されているものであるらしく不安定なところがあるようで、4.81系が安定しているそうです。
もしアニメーションがうまく再生されない場合はXPMSSEを入れ替えれば改善されるかもしれません。
2.一番最初に卵系のアニメーションを再生するとフォロワーのそれがうまく再生されない(?)
卵系というか、"汁"とは別に出てくる固形物全般ですね。
1.を対策してプレイヤーは正しく再生されるようになりましたが、なぜかフォロワーは再生されないことがありました。
セーブデータによっては再生されたりされなかったりと不安定で、かつ永続的なもののようで、再生されるデータは何をやっても再生されますが、再生されないほうは何をどうしようとも再生されることは一度もありませんでした。
色々と検証してわかったことはニューゲームを開始してから本MODのアニメーションをどのような順番で再生したかでした。
ゲーム開始後、最初に卵系以外のモーションをフォロワーとプレイヤーで一度以上は再生し、そのあとexpelを使って卵系以外のモーションを再生。そのあとにまぁその…クリーチャーたちとあれこれした後、卵系のアニメーションをexpelで再生されるまで繰り返す。そうするとフォロワーたちもそのアニメーションが再生されるようになり、この順序で再生させた場合は、フォロワーで卵系のアニメーションが正しく再生されるようになる模様です。
(私の只の思い込みかもしれませんが、expelを使わないと中〇しアクターをもとにしたデフレーション処理が適用されないようなんですよね。オート機能だけを使っているうちは主人公も含めて中〇しアクターが人間だけの動きをするようです。)
一方、始めて再生したモーションが卵系だった場合はフォロワーの場合はずっと宙に浮いたままとなってしまい動いてくれないみたいです。ゲーム開始からクリーチャーとアレした後、expelして卵系のアニメーションを再生させてフォロワーにも再生させると卵がういたままになるようです。
原因:多分おま環
どうしてこうなるのかは…まぁ多分おま環でしょう。胴体装備を変更するとプレイヤーだけモーションがリセットされる妙な不具合も私の環境にはあるので。さらにその動きのせいでプレイヤーの卵系モーションが止まってしまう不具合も発生したり。とりあえずstripオプションで胴体は脱がない設定にして事なきを得ましたが一体なぜなんだ…何のMODがこんな動きをさせているのか見当もつかない…
とりあえず一応備忘録として残しておきます。
フリッカーもやってます★