FNISを使う時に便利な道具

環境構築

前提となる知識が多くてかなり難しいですが、道具は使ってこそ。

FNIS対応のアニメーションを使う時に、GenerateFNISforUsers.exeを実行してアニメーション関連ファイルを更新するのは知っていることと思います。

でも、MO2でプロファイルを切り替えると、アニメーションが再生されなかったり、プレイヤーがカカシになったりすることがあります。これは、アニメーション関連ファイルがプロファイル間で共有の状態になってしまっているからです。

MO2の環境化では、新規作成の場合はOverwriteフォルダにファイルが置かれるのに、更新の場合はファイルが元々存在しているModフォルダのものが書き換えられます。これを探し出して抜き出し、プロファイルごとに独立させることで解決できます。

前提としてCygwinが必要

Cygwinをインストールします。

シェルスクリプトを用意する

初期化用スクリプトです。名前をfind_reset.shとします。

FNISの道具 初期化用 (sh)

#!/bin/sh

touch find_time.txt

更新ファイル検索スクリプトです。名前をfind_modified.shとします。

FNISの道具 更新されたファイルを検索 (sh)

#!/bin/sh

find . -type d -name .svn -prune -o -type f -newer find_time.txt -print

試しに実行してみる

以下のようにします。

  • Cygwinのコンソールを立ち上げて、MO2のmodsフォルダに移動します
  • コンソールでfind_reset.shを実行します
  • MO2でGenerateFNISforUsers.exeを実行します
  • コンソールでfind_modified.shを実行します

これで更新されたファイルの一覧を取得できます。結構な数のModが書き換えられていることがわかります。

他にも、BodySlideでメッシュを生成した時に、余計なフォルダが書き換えられていないか調べたりもできます。

更新されたファイルをまとめる

MO2でModフォルダを作り、これらの更新されたファイルを全てコピーします。例えば、YASH2の環境で使うアニメーション関連ファイルとしてFNIS - YASH2という名前にしたとします。

こんな感じで、GenerateFNISforUsers.exeを実行した直後にFNIS - YASH2の中にあるファイルだけが出てくるようにします。

コピーを自動化するスクリプトです。

FNISの道具 自動でコピーするawkスクリプト (awk)

BEGIN {
        FS = "/";
        fnis = "FNIS - YASH2";
}

{
        if (NF >= 3 && $2 != fnis) {
                c = "";

                #for (i = 3; i <= NF; i++) {
                # c = c "/" $i;
                #}
                #cmd = "cp --parents '" $0 "' '" fnis c "'";

                for (i = 3; i < NF; i++) {
                        c = c $i "/";
                }
                cmd = "mkdir -p '" fnis "/" c "'"
                #print cmd;
                system(cmd);
                close(cmd);

                cmd = "cp '" $0 "' '" fnis "/" c "'";
                #print cmd;
                system(cmd);
                close(cmd);
        }
}

使い方は以下になります。

FNISの道具 使い方 (sh)

./find_modified.sh | awk -f find_copy.awk

タイトルとURLをコピーしました