こんばんは。きさらぎです。この記事はNeosVR(その2) Advent Calendar 2022の7日目です。
昨日の記事はきさらぎの「NeosVRと私 (2022年版)」でした。
今日のは一番軽い記事です。多分。
更新履歴
- 2022年12月13日更新: Windowsが要らなくなりました!!
- 2022年12月9日更新:
CloudX.Shared.dll
も置き換えが必要です!!
モチベ
Linuxにはスタンドアロンインストーラーが存在しないのでSteam経由で起動することになります。しかし、Steamは2021年10月の利用規約改定でゲームに仮想通貨を含むことを禁止したので、NeosVRも仮想通貨が使えなくなりました1 2。
しかし、私3はそんなことで仮想通貨を使うことを諦めたくありませんでした4。そこで目をつけたのがWindows版のスタンドアロン版です。スタンドアロン版はSteamを経由しないので、当然上述の制限もないはずです。私はいろいろと調査して、次の手順で強制的に有効化することができることを確認しました。
手順
#!/bin/bash
# The author of this script, KisaragiEffective and Kisaragi Marine, put this script
# under CC0. Please refer https://creativecommons.org/publicdomain/zero/1.0/legalcode to
# its full-text.
red() {
tput setaf 1
}
green() {
tput setaf 2
}
reset() {
tput sgr0
}
die () {
echo "[$(red)ERROR$(reset)] $(echo "$@")$(reset)"
exit 1
}
# is /dev/stdout piped?
if [ -t 1 ]; then
color=
else
color=1
fi
if [[ -z "$neos_install_dir" ]]; then
neos_install_dir="~/.steam/steam/steamapps/common/NeosVR"
fi
if [[ ! -d "$neos_install_dir" ]]; then
die "install location $neos_install_dir does not found. Please set \$neos_install_dir explicitly with yout installation path. NOTE: ~ must be replaced with $HOME"
fi
latest_version="$(curl -sSL4 https://assets.neos.com/install/Pro/Public)"
sz="$(mktemp).7z"
wget -q4O "$sz" "http://assets.neos.com/install/Pro/Data/${latest_version}.7z"
# check file
du -b $sz
sha512sum $sz
# extract
dest="$(mktemp -d)"
if [[ -f "$(which 7zr 2>/dev/null)" ]]; then
# partial extract (more effecient)
echo "extracting to $dest. backend: 7zr"
mkdir -p "$dest/Neos_Data/Managed"
(cd "$dest/Neos_Data/Managed" && 7zr e "$sz" Neos_Data/Managed/FrooxEngine.dll Neos_Data/Managed/CloudX.Shared.dll)
clean_sz_on_exit=1
elif [[ -f "$(which p7zip 2>/dev/null)" ]]; then
# full extract
echo "extracting to $dest. backend: p7zip"
(cd "$dest" && p7zip -d "$sz")
else
echo "$(red)p7zip is required!!$(reset)" >&2
fi
# copy
for f in "FrooxEngine.dll" "CloudX.Shared.dll"; do
from="$dest/Neos_Data/Managed/$f"
to="$neos_install_dir/Neos_Data/Managed/$f"
echo "copy: $(green) ${from} $(reset) to $(green) $to $(reset)"
if [[ -z "$dry_run" ]]; then
cp "$from" "$to" || die "FATAL: archive does not contain $f"
else
:
fi
done
# finish
echo "$(green)Replacing is done!$(reset)" >&2
rm -r "$dest"
[[ ! -z "$clean_sz_on_exit" ]] && rm "$sz"
おわりに
最初MODを作ろうかと思っていましたが、シェルスクリプトを動かすだけで済むようなので計画を凍結しました。
置き換えるのが不安な方は実行する前に以下のコマンドを動かして望まない差分が生まれていないかどうか確認してください。
sudo apt-get install -y dotnet-sdk-6.0
# npmと違い、sudoは要らない
dotnet tool install assembly-differ --global
# なぜか`dotnet assembly-differ`で起動しなかった
~/.dotnet/tools/assembly-differ 'assembly|win/FrooxEngine.dll' 'assembly|linux/FrooxEngine.dll'
~/.dotnet/tools/assembly-differ 'assembly|win/CloudX.Shared.dll' 'assembly|linux/CloudX.Shared.dll'
仮に確認しないでコピーして、かつ振る舞いがおかしくなっても、Steamからゲームファイルの修復をすればいいのでロールバックも簡単ですよ、ぜひやりましょう。
Special Thanks
- @kazu0617 さん - Windowsを使わない方法の概要を提供していただきました
-
Wineを強制的に有効化してランチャーから起動したら制限が外れるかと思いましたが、残念ながらそうはなりませんでした。 ↩
-
https://discord.com/channels/402159838827905024/468504846522384394/903927102020149248 ↩
-
Linux Nativeクライアントを使っているユーザーはかなり少ないですが、だからといって情報を伏せておくのは将来のためにならないのでこれを機に公開します。 ↩
-
NCRをつかってゲームセンターやスロットマシンを楽しむのが理想なので…。 ↩