Thinking Skeever

Skyrim/The Witcher 3 Modについてのあれこれ。FoModの作り方、Mod導入時のトラブル事例などのニッチな話を書いていきます。a.k.a. BowmoreLover@nexusmods

The Witcher 3 Mod:Meditation UI ChangesとFriendly HUDのマージ手順(2016/11/09追記)

f:id:thinkingskeever:20160606114041p:plain
お詫び:
本記事はScript Mergerを使ってMeditation UI ChangesとFriendly HUDをマージする際うまくマージできない場合があるよって記事だったんですが、私のScript Merger設定ミスが原因でした。Script Mergerを正しく設定していれば何もせずとも自動マージしてくれます。
反省の意味も込めてScript Mergerの正しい設定手順と、間違った手順を書き残しておきます。

補足(2016/11/09):
Friendly HUD 12.0以降、瞑想に関する機能はFriendly Meditationに移管されました。Friendly HUD 12.xを使っている場合、以下の競合が発生するのはFriendly Meditationを併用している場合のみとなります。
日本語化修正パッチ配布フォルダ(DropBox共有)に最新のFriendly HUD, Friendly Meditationの日本語化ファイルをアップしましたのでご活用ください。

Script Mergerの正しい設定手順

  1. NexusModsのScript MergerのFILESタブからMAIN FILESのWitcher Script Merger v0.5.xをダウンロードします。OPTIONAL FILESのWitcher Script Merger v0.5.x without dependenciesはKDiff3/QuickBMS/wcc_liteをバンドルしていない特殊なファイルなので通常は使いません。
  2. ZIPファイルを任意のフォルダに解凍します。私はC:\Witcher3wk\tools\ScriptMergerというフォルダに解凍しましたが、デスクトップなどでも問題なく動作するはずです。
  3. WitcherScriptMerger.exeを起動します。The Witcher 3のインストールフォルダを入力し、「Refresh」ボタンを押します。
    f:id:thinkingskeever:20160606134630p:plain

以上で初期設定は完了です。以下はマージ手順の概要です。

  1. 左の一覧にマージが必要なスクリプトが表示されます(マージ不要の場合は空です)。マージするスクリプトをチェックして「Create Selected Merge」ボタンを押します。
    f:id:thinkingskeever:20160606134728p:plain
  2. 確認メッセージが何度か表示されるので「OK」または「Continue」を押します。
  3. ほとんどの場合、これだけでマージが完了します。
  4. Script Mergerが自動的にマージできず、手作業によるマージの必要がある場合、KDiffによるマージ画面が表示されます。左:バニラ、中:MOD1、右:MOD2、計3つのリストが表示されるので見比べながらマージします。
  5. Friendly HUD v10.7とMeditation UI Change v1.22(またはImmersive CamのオプションImmersive Meditation v2.5.4)をマージするとき、playerInput.wsに対してKDiffマージ画面が表示されます。

    ツールボタンを「C」「B」の順に押して次のようにマージすればOKです。
  6. マージが完了すると左の一覧が空になり、右にマージ後のスクリプトが表示されます。
    f:id:thinkingskeever:20160606134818p:plain
    マージをやり直したい場合は右の一覧でスクリプトをチェックし「Delete Selected Merge」ボタンを押します。

Script Mergerの間違った設定例

Descriptionに貼ってあった動画を参考にWitcherScriptMerger.exe.configを設定したのですが、参考ビデオは古いバージョンのもので最新版のconfigファイルと並びが異なっていたため、次のように間違った設定をしてしまいました。

<configuration>
  <appSettings>
    <add key="GameDirectory" value="C:\program files (x86)\steam\steamapps\common\The Witcher 3" />
    <add key="ScriptsDirectory" value="C:\program files (x86)\steam\steamapps\common\The Witcher 3\Mods" />
    <add key="ModsDirectory" />

本来ScriptsDirectoryにバニラのスクリプトフォルダ、ModsDirectoryにはModsフォルダを指定するのが正解で、省略すればGameDirectory下のフォルダを適切に選んでくれます。しかし、この設定だとバニラのスクリプトが正しく参照できないため比較精度が悪くなり、以前の記事のような現象となってしまいます。
最新のScript MergerではWitcherScriptMerger.exe.configを修正する必要は一切なく、画面でゲームフォルダを指定するだけでOKです。



f:id:thinkingskeever:20151114030550p:plain
上記のとおり、Script Mergerを正しく設定していれば以下の手順は不要です。
消さずに残しておきますが、参考になさらないでください。



Steamの半額セールに釣られてThe Witcher 3を購入しました。
ゲーム自身の完成度が高く、最初はMOD導入の必要性を感じませんでしたが、いななさんのブログの記事 【PC版】The Witcher 3 MOD導入のススメを読んでMOD遊びにハマってしまいました(おかげでクエストが全然進まない)。

最近のお気に入りは Meditation UI Changeです。瞑想画面を透明にするMODで、瞑想の様子や時間経過に伴う景色の変化が楽しめます。

Friendly HUDと併用する場合はScript Mergerを使ったスクリプトのマージが必要ですが、単純に左右を選ぶだけではうまくマージできませんでした。
この記事ではマージの考え方を交え、Meditation UI ChangesとFriendly HUDのマージ手順について説明します。

なお、MODの導入方法やScript Mergerを使ったスクリプトのマージ方法についてはいななさんのブログGoogle検索を参照してください。

ご注意:本記事はThe Witcher 3 のバージョンv1.12が対象です。v1.21に対応したFriendly HUDとMeditation UI Changeのマージではマージ手順が異なる可能性があるので注意してください。とはいえ、Script MergerのDiff Alighnment機能は他MODのマージでも役立つので、一読されることをお勧めします。
アドバイス:最近知ったのですが、Friendly HUDではN(瞑想)キーの長押しでメニューを開かずリアルタイム瞑想できます。この機能で満足であれば、無理にMeditation UI Changeを使う必要はないかもしれませんね。

f:id:thinkingskeever:20151114030550p:plain
目次


f:id:thinkingskeever:20151114030550p:plain

前提条件

The Witcher 3のバージョン: v1.12

マージ対象のMODは次のとおりです。

  • Meditation UI Change by erxv
    ファイル: modFriendlyHUD for patch 1.12 (version 9.2)
  • Friendly HUD by wghost81 aka Wasteland Ghost
    ファイル: Meditation UI change 1.12 compatible (version 1.12)

利用したツールは次のとおりです。

  • Script Merger by AnotherSymbiote
    ファイル: Witcher Script Merger v0.5.8 (version 0.5.8)


f:id:thinkingskeever:20151114030550p:plain

Script Mergerを使ったマージの基本(おさらい)

Script Mergerを使ってスクリプトをマージする場合、大体次の2パターンがあります。

関数の内容が異なる場合


どちらのMODにも同じ関数があり、処理内容が異なる場合です。
関数は 「関数名() {」で始まり「}」で終わるブロックです。大抵の場合、Script Mergerは同じ関数を1:1で対応させて処理の差分を示します。
この例では左側のファイル(file A: modFriendlyHUD)が右側のファイル(fileB: modMeditationUI)の処理内容を包含していますので、左の処理を選択すれば問題ありません。

関数や変数定義が追加される場合


一方のMODで変数定義や関数が追加された場合です。
この例では左側のファイル(file A: modFriendlyHUD)で変数pressCharTimeと関数OnHoldSeeCharが追加されていますので、左の処理を選択すれば問題ありません。


f:id:thinkingskeever:20151114030550p:plain

Meditation UI ChangesとFriendlyHUDをマージする際の問題点

ほとんどのスクリプトは先ほど示した基本どおりにマージできるのですが、content\scripts\game\player\playerInput.wsの関数OnIngameMenuのマージで問題があります。


上の図を見てください。左右の関数OnIngameMenuが1:1に対応していないのがお分かりでしょうか。右の関数OnIngameMenu1つに対して、左の関数OnToggleHud、Debug_ClearAllActionLocks、OnPinModuleModfier3つが対応付けられてしまいます。この場合、普通に左右を選択するだけでは複数の関数の処理が混ざってしまい、コンパイルエラーや動作不正となる可能性が高いです。


念のため他の有名ファイル差分ソフトWinMerge を使って比較してみました。

こちらでは関数の対応がうまく認識され、綺麗な差分が表示されます。KDiff3(Script Mergerに添付の差分ツール)よりもWinMergeの差分検出アルゴリズムが優れているせいでしょうか。
図中の青線に示すとおり、関数OnIngameMenuの左側の処理はすべて右側に包含されていることが分かります。


f:id:thinkingskeever:20151114030550p:plain

playerInput.wsのマージ手順

Diff Alighnment(差分基準点)の追加

Script Mergerに添付のKDiff3には、ファイル比較の基準点(比較単位)を手動で指定することで比較の精度を上げることのできるDiff Alignment機能があります。
関数OnIngameMenuをDiff Alignmentに追加して比較精度を上げてみましょう。
なお、この操作を行うとマージ結果がリセットされてしまいますので、playerInput.wsを開いた直後に行ってください。


まず、左のファイル(modFriendlyHUD)に対してDiff Alignmentを追加します。
f:id:thinkingskeever:20160528132802p:plain
マウスをドラッグして関数OnIngameMenu全体を範囲選択し、「DiffView - Add Manual Diff Alignment」メニューを選択します。


次に、右のファイル(modMeditationUI)に対してDiff Alignmentを追加します。
f:id:thinkingskeever:20160528132819p:plain

マウスをドラッグして関数OnIngameMenu全体を範囲選択し、「DiffView - Add Manual Diff Alignment」メニューを選択します。


比較結果をチェックしてみます。

関数OnIngameMenuが1:1で比較され、綺麗な差分となりました。



マージ作業


後はいつもの手順でマージします。
このファイルでは基本的に左側(modFriendlyHUD)を選択すればOKですが、以下に示す箇所については右側(modMeditationUI)を選んでください。

●関数PushMeditationScreen:

●関数OnMeditationAbort:

●関数OnIngameMenu:



マージ結果が次のようになっていればOKです。


お疲れ様でした。それでは瞑想を満喫してください!!!


プレイ上の注意点

私の環境では瞑想の前後に「今はその操作を実行できません」というメッセージが出てしまいますが、今のところ問題はないようです。




f:id:thinkingskeever:20151114030550p:plain

謝辞と読者へのお願い

本記事では次のMODの画面およびScriptの一部を使いました。作者のerxvさんとWasteland Ghostさんにこの場を借りて御礼申し上げます。

この記事を読んだ方へのお願い

  • NexusModsで公開されたMODを導入した場合、忘れずにENDORSEをお願いします。
  • ENDORSEは「このModはいいね!」という意味で、MODがどれくらい使われているのか、どれくらい好評なのかを示すバロメーターです。ENDORSEの数は作者の励みとなり、さらに良いMOD開発への原動力となります。
  • MODのページ右上にある緑色の「ENDORSE」ボタンを押します。ダウンロード直後は押せませんので30分程度時間を置いてください。
  • オレンジ色の「UNENDORSE」は既にENDORSE済みであることを示しています。
  • ENDORSEをするのにお金などは一切かかりません。

f:id:thinkingskeever:20151114030550p:plain

本記事の更新履歴

  • 2016/05/28 14:00 - 公開
  • 2016/06/06 14:00 - Script Mergerの設定ミスが原因だったこと、お詫びを追記
  • 2016/06/27 12:30 - Friendly HUD v10.7とMeditation UI Change v1.22(またはImmersive CamのオプションImmersive Meditation v2.5.4)のマージ手順を追記
  • 2016/11/09 04:30 - Friendly HUD 12.x, Friendly Meditationに関する補足を追記

//

Copyright (C) 2015,2017 ThinkingSkeever, All Rights Reserved.
ブログの記事内に記載されているメーカー名、製品名称等は、日本及びその他の国における各企業の商標または登録商標です。
リンクはご自由に。記事の転載はご遠慮ください。記事を引用する場合はトラックバックするか元のURLを明記してください。