v.1.1.1を公開しましたので、v1.1.0は非公開にします。
Studio_Voice_Custom_List_DX.zipmod 保存・読込対応化パッケージ v1.1.1をダウンロードしてください。
不慣れなせいで、短期間でユーザさんにメリットのないアップデートを複数回してしまい、すみませんでした。中間のv1.1.0のみプラグインMOD扱いで、その前後の2つのバージョンはプラグインとパッチのパッケージMOD扱い、という違いこそありますが、v1.0.0, v1.1.0, v1.1.1は機能的にすべて同じものです。ですので環境で動作しているのであれば無理に新バージョンを適用する必要もないかと思います。作者としては以後更新が必要になったらv1.1.1をベースに変更を加えていく予定です。ではみなさま引き続きよきHS2ライフを。
エモーションボタン
一言感想ボタン
+ボタンをクリックすることで追加することができます
×ボタンをクリックすると削除確認メッセージが表示されます
虫眼鏡マークをクリックすると同じボタンをつけられた記事の一覧が表示されます
※ボタンを押した回数はキャッシュされるため、表示が反映されるのは編集などでクリアされるか、30分ごとです
vnactor.py の差分適用ですけど diff と patch で良くないです?
patch だと、ある程度行数がズレていても適用されますし、VNGE 43.0 と 44.0 で適用できるみたいです。
■使い方
ttps://mega.nz/folder/2AEmxBLb#RjYfHcPgnKbHptIQzqwgKA
vnactor.py.patch.7z を解凍して、vnactor.py.patch.bat を実行するとパッチが当てられます。
HoneySelect2 のディレクトリはレジストリから読み込んでます。
変態さん@奇行種様
作ってご提示くださったみたいで、大変ありがとうございます。
ダウンロードして今拝見してます。最低限、パッチの処理がブラックボックス化しないように直してみようと思います。
私も変態さんの意見に同意です。
個人的な感想ですが、dll導入するだけでファイルを自動的に書き換えてしまうのはちょっと怖いと感じてしまうので、パッチで自分でファイルに適用するくらいの方がmod文化には合ってるように思います。せめて、どちらかを選択できるようにしてもらえると良いかも。
1.0.0に丁寧なテキストが付いていたので私自身はそれを基にvnactor.pyを修正しました。
かゆいところに手が届くmodをありがとう。
Hcorn 様
1.0.0を試して頂いてありがとうございます。1.0.0がごく普通のユーザ向けからだいぶ離れてしまったかなと思い気にしてたのですが、実はそっちの方がむしろmod文化には合っていたという感じなのですね。
(1)完全自動はやめる(やるにしてもDLL側に仕組みを入れるような方法はやめる)
(2)説明を丁寧に書いた上でそれでも自動で適用したい人向けにパッチの仕組みを(可能なら)提供する
の方針でちょっと直してみようと思います。
付け加えると、VNGE43 を元に作られたファイル (vnactor.py) で最新の VNGE44 の機能が損なわれませんか?
vnactor.py の導入を自動化すると VNGE のバージョンを限定しないといけなくなるし、
VNGE43 限定だとプラグインの導入から破棄までのライフサイクルが極端に短くなると思うんですよ。
それなら VNGE のバージョン管理はユーザーサイドでいいのかな、という結果論みたいなものです。
そもそも Python と IL (.NET, C#) の相性が悪いです。
> それなら VNGE のバージョン管理はユーザーサイド
それがよさそうですね。v1.0.0に戻しつつ vnactor.diff.txt を添える方向での修正を今やってます。
> 付け加えると、VNGE43 を元に作られたファイル (vnactor.py) で最新の VNGE44 の機能が損なわれませんか?
丸ごとファイル置換だと確実にそうなります。VNGE43 からVNGE44 まではパッチ対象関数のActor.set_voice_lstとActor.get_voice_lstに差分が無かったのは確認済みで、関数指定して置換するのであればVNGE44 まで安全そうではありました。ただ、それでもそれ以降のバージョンで保障は無いですから、全体的には変態さん@奇行種さんのご指摘がその通りだと思います。
>関数指定して置換
そうだったんですね・・・
人の苦労を評価してしまうのは失礼ではありますが、一長一短のトレードオフが大変そうです。
深いツリーへの返信ができなかったので新規コメントにて、、
変態さん@奇行種 さん
pythonの仕組みで内部関数を外部ファイルの同名関数の呼び出しに差し替える書き方があるのが分かったのでv1.1.0ではそれを利用してパッチ範囲を狭くしていました。関数そのものを書き換えなくてよいという意味で安心感もありこれを使ってみました。今作成中のv1.1.1もこの方法を採用する予定で 以下、v1.1.1 の説明文です。あとやや余談になりますが変態さん@奇行種 さんのIMGUIScaleプラグインはmy best favoriteです。
Studio_Voice_Custom_List_DX.zipmod 保存・読込対応化パッケージ v1.1.1
Studio_Voice_Custom_List_DX.zipmod を適用すると、通常は公開されていない音声ファイルもすべて選択できるようになりますが、このMODにはシーンの保存・読込に対応していないという制約がありました。
そこで今回、Studio のシーン保存時に拡張ボイス情報を保存し、読込時に現在の環境におけるボイス番号へ再解決して復元する、保存・読込対応化パッケージを作成しました。
本パッケージの内容物は3つです。
(1) StudioVoiceSceneSave.dll
Studio の通常シーン保存用の補助プラグインです。ソースコードも同梱しています。
(2) vnactor_actor_voice_ext.py
VNGE の構成ファイルである vnactor.py から新たに参照される追加の Python スクリプトです。
(3) vnactor.diff.txt
vnactor.py 内の特定の関数を、本パッケージ同梱の ‘vnactor_actor_voice_ext.py’ に定義された関数へ置き換えるために必要なパッチ記述です。
※ Studio_Voice_Custom_List_DX.zipmod を適用していない環境では、本パッケージは不要です。
■ インストール
1. ‘StudioVoiceSceneSave.dll’ を ‘HoneySelect2\BepInEx\Plugins’ に入れる。
— VNGE で拡張ボイス情報の保存・読込も行う場合は、2. 3. も実施してください。
2. ‘HoneySelect2\BepInEx\plugins\Console\Lib\vnactor.py’ に vnactor.diff.txt を適用する。
(vnactor.diff.txt を使わずに手動でパッチを行う場合は、「■ 後説明」の項目を参照してください。)
3. ‘vnactor_actor_voice_ext.py’ を ‘HoneySelect2\BepInEx\plugins\Console\Lib’ に入れる。
■ アンインストール
1. ‘StudioVoiceSceneSave.dll’ を ‘HoneySelect2\BepInEx\Plugins’ から削除する。
— VNGE で拡張ボイス情報の保存・読込も行っていた場合は、2. 3. も実施してください。
2. ‘vnactor_actor_voice_ext.py’ を ‘HoneySelect2\BepInEx\plugins\Console\Lib’ から削除する。
3. ‘HoneySelect2\BepInEx\plugins\Console\Lib\vnactor.py’ に適用した差分を元に戻す。
■ 後説明
‘StudioVoiceSceneSave.dll’ は、Studio のシーン保存・読込そのものを置き換えるのではなく、ExtensibleSaveFormat が提供するシーン保存前・読込時のイベントに割り込んで動作します。つまり、通常の Studio のセーブ/ロード処理を妨げることなく、シーンデータ内に拡張ボイス情報もあわせて保存・復元する補助プラグインです。ユーザ側は特別な操作を意識する必要はなく、普段どおり Studio の保存・読込を行うだけで利用できます。
‘StudioVoiceSceneSave.dll’ をテストする過程で、VNGE では通常の Studio シーン保存とは別に、SceneSaveState / vnactor.py を通した独自の状態保存・復元処理が行われていることが分かりました。この経路ではキャラのボイス情報が (group, category, no) のみで保存されていたため、Studio_Voice_Custom_List_DX.zipmod による拡張ボイスリストを選択していると、再起動後やシーン再読込後に別のボイスへ化ける問題が残っていました。そこで、VNGE 側でも拡張ボイスを安定して保存・復元できるように ‘vnactor_actor_voice_ext.py’ を実装しました。
これを VNGE に適用するには、VNGE の構成ファイルである ‘HoneySelect2\BepInEx\plugins\Console\Lib\vnactor.py’ の
class ActorHSNeo(Actor):
の行の直前に、以下の記述を挿入します。
# ===================================================================================================
# Studio_Voice_Custom_List_DX_SaveLoad_Fix Mod BEGIN
# ===================================================================================================
try:
import vnactor_actor_voice_ext
Actor.set_voice_lst = vnactor_actor_voice_ext.set_voice_lst
Actor.get_voice_lst = vnactor_actor_voice_ext.get_voice_lst
except:
pass
# ===================================================================================================
# Studio_Voice_Custom_List_DX_SaveLoad_Fix Mod END
# ===================================================================================================
vnactor.py の修正箇所はこれだけです。変更を保存したら、’vnactor.py’ と同階層に ‘vnactor_actor_voice_ext.py’ を配置してください。これにより、vnactor.py 内で使われていた Actor クラスの set_voice_lst 関数および get_voice_lst 関数の呼び出しは、外部ファイル ‘vnactor_actor_voice_ext.py’ に定義された同名関数の呼び出しへ置き換わります。try-except で記述しているため、万一外部ファイルが見つからない場合は元の関数が使われます。
この修正により、VNGE のサブシーンや連続シーンでも、拡張ボイスを番号依存ではなく実ファイル識別子ベースで復元できるようになり、Studio 再起動後でも正しいボイスが維持されるようになります。