Sarmaticus

誰も読まないような趣味の話しかしないほうのブログ

Blade and Sorcery ブレードアンドソーサリーの自作modを紹介する

はじめに

自作modが増えてきたので紹介する. 配布サイトの Nexus Mods は日本語を書き込むと文字化けするので, modの不具合とかを日本語で問い合わせたい人はここでもNexusのコメント欄のどっちに書いてもいいが, はてなブログのコメント欄は込み入った説明に向いてないのでNexusのほうがいいかもしれない.

自作modの多くはスクリプトを使用しているため, Nomad 版ではうまく動作しないかもしれない. テキスト修正・翻訳の類のやつは既に紹介したので省略

なお, これらのmodのオプションの多くは Mod Configuration Menu でも変更できる (変更を反映するには再起動かマップの移動が必要なことが多い).
U12以降の話: U12以降は本体側にmod管理機能が用意されたので, U12以降に更新されたmodの多くはMCMをインストールしなくてもメニューブックからオプションを変更できるようになっていることが多い.

UI 改善系

HUD を表示する: Customizable HUD

www.nexusmods.com


Customizable HUD v0.8
imgur.com

この動画はHMDではなくウィンドウ用HUD (HUD?) を表示している.

名前通り HUD を表示する. デフォルトではHPを知るにはいちいち腕時計を確認するように手首の内側を顔に近づける必要があるが, わざわざそんな手間を課す意義が思いつかないので常時表示できるようにしたかった, というのが当初の作成動機だが, いろいろ試しているうちに それ以外の情報, マップ名とか今何を装備しているかとかもオプションで表示できるようになった. 非VRの従来的なゲーム (FPSとか, MMOとか)風の画面にしたくなったので, プレイヤー名とかあまり意味のない情報を表示することもできる.

また, もう1つの当初からの目的は録画や配信向けのウィジェットだったので, 普段プレイヤーの目につく HMD 上だけでなく, ウィンドウ上とLIV Mixed Reality カメラ上にもそれぞれHPとかを表示できる. そのうち使用している動画をどこかで公開する

Wully氏の MoreModes などが既にやっているため, 敵のHPを表示する機能はまだ作ってないが, UIのテーマ統一のために気が向いたら作るかもしれない. -> 追記: 意外と簡単にHP表示できたので早くも作ってしまった (v0.8.8 より追加)

また, 名前通りかなり自由に配置を変更できるが, 変更には JSON ファイルの編集が必要なため現時点では一般ユーザーには難しいようだ. 簡単に編集できるインターフェースも将来的には追加したいが, それなりに時間がかかる.

現時点ではまだ作りかけで, いい加減な箇所もある. 例えばいくつかのウィジェットが作りかけだったり, メインの HMD に表示するウィジェットの align 設定がまともに機能しなかったりする. また, 他のmodderが独自の追加ウィジェットを作りやすいようにオープンソースにしたいのだが, 今はまだ Unity Store のアセットを一部使用しておりライセンスの制約のためできていない.

思いつきで昔 (PS1-PS2頃) のアーマードコア風のHUDを追加したら, しばらくしてAC6の発売が発表されて笑った. AC6風のHUDを追加するかは保証できない.

少し技術的な話: LIV Mixed Reality カメラへのオーバーレイは現時点では厳密にはオーバーレイではない. カメラがなにかのオブジェクトに接近しすぎると隠れてしまうことがある. 本当はオーバーレイ表示にしたかったのだが, LIV SDK のドキュメントではできると書いているがその記述は不正確で*1, 公式 Discord で質問しても情報量ゼロの不毛なコミュニケーションに終わってしまったので現時点ではカメラの近くにオブジェクトを置くことで擬似的にオーバーレイしている. この辺は1から開発しているのではなくmodで実装しているという制約もあるのだが, LIV SDK のサポートしている機能が本当に記述通りなのか少し疑っている.

フォントを自動変更する: Font Localizer and Replacer

www.nexusmods.com

日本語設定でプレイすればわかるようにフォントは日本語用ではなく, おそらく Noto Sans CJK SC である (Source Han Sans かもしれないが, それは些細な違いである). それだけならまだ我慢できるのだが, アルファベットのみ Black Chancery という癖のあるフォントで表示される箇所が多く, この組み合わせは文字の大きさ, 高さ, 線の太さが何もかも驚くほど噛み合わずダサく, 何より読みづらい. そこでOSの言語設定を検出して一括してフォントを変更するようにした. デフォルトでは游書体になる (ゲーム中はほとんどが Serif 体フォントなので, ほとんどが游明朝に置き換え).

ただし日本語以外の事情は詳しくないため, 現時点では自動変更できるのは日本語設定のときのみである. デフォルトではSerif 系フォントを游明朝に, Sans-serif 系フォントを游ゴシックに (ただし Sans が現れる箇所はごく一部である) を使うが, 変更先のフォントを自由に変えることもできる. また, 游書体は日本語の表示は見やすいが, 日本語でもラテン文字でもない文字のことは一切考慮されておらず, かえってダサくなるという問題がある. かといって不完全なフォントをデフォルトにしたりファイルサイズのやたらと大きいフォントファイルを同梱したりするのも嫌なので, Windowsの組み込みのフォントの範囲でなんとかできないか考えた結果一番ましという判断で游書体にした.
U12以降はUI関連が大幅に変更されたので, Noto系のフォントを同梱している. 逆にシステムフォントの利用がしづらくなった. 改善したいが, あまり優先順位が高くないのでだいぶ後になると思う.

技術的な話: Unity では デフォルトでUnityの組み込みフォントがフォールバックとして設定されているが, それがなぜか Noto Sans CJK SC らしい. いろいろな Unity 製ゲーム (例: Valheim, Hellish Quart, Ruiner. ただし Ruiner はゲームの雰囲気的にこれも悪くない. また, Hellish Quart はそもそも公式には日本語に対応していない) で見られる現象なので, Unity開発者の怠慢と個別のゲーム開発者のローカライゼーションに対する無知あるいは開発リソース不足が合わさって生まれた結果なのだろう. あるいはSteamにも何割か悪いところがあるかもしれない. また, 現時点では B&S のゲーム内のテキスト表示は UI.Text というコンポネントでなされている. 現在は TextMeshPro というより優れた機能があるのだが今のところB&Sでは一切使われていない. そのため, フォントの置き換えまでは無理やりできるがスタイルや禁則処理 (例えば上記リンクの画像では句点で改行されてしまっている) まで改善するのがかなり面倒であるため, 現時点ではそういう機能はこのmodにはない (以上技術的な話というか愚痴).

U12以降の話についての追記: という愚痴を書いていたらU12で早くもTextMeshProが使われるようになった. しかし, 案の定というかフォントアトラスをゲーム本体で使われている文字に対してしか用意していないので, modなどで使われる文字が文字化けする可能性は高い. それだけでなく設定ミスかなにかで相変わらずNoto Sans SCになっている箇所も多い. このmodは最低限Noto Sans/Serif JPで文字化けを排除できるように更新したが, メニューブックの一部のテキストだけが, 制御しているプログラムがなんか変な使い方しているので現状うまくフォントを変えられない.

トラッカーのカリブレーションUIがアレと思う人へ: Stand Here When Calibrating Trackers

www.nexusmods.com

ブレードアンドソーサリーはHMD+両手に加え腰両足の6点トラッカーに対応している希少なVRゲームタイトル (また引き合いに出すが, Boneworks/Bonelab は公式には対応していない) だが, U11 現在, トラッカーの位置調整のためのユーザーインターフェース非常に使いづらい. 「調整のためにこの辺に立ってください」と床に表示されるが具体的にどのへんに立てばいいのかまったくわからず, 毎回試行錯誤で位置調整する必要があった (しかもこのテキストは半分埋もれている.). 加えて「カリブレーションのためリラックスして立って下さい」と表示されるが, 調整ボタンが離れた変な位置にありどうやってもリラックスした姿勢のまま押すことはできない. (少なくとも U9 の時点ではこんな仕様ではなかったので, 謎の理由により「改悪」されていることになる. そしてこの問題はUnity を本格的に使い始める原因になった.)

本当にどういうことなんだこれは

この2点があまりにもあんまりなので, どちらもmodで改善した. まず, 床に位置を合わせるべき足跡の画像を付けた. 目分量で画像を配置しただけだが, 今までの手探りよりはかなり効率よく調整できるはずである. さらに, 調整ボタンも正面に配置し直して押しやすくした.

録画・配信用の設定が保存できないのが不便と感じる人向け: Keep Window Settings

www.nexusmods.com

HMDではなくメインディスプレイ側に表示されるゲーム画面ウィンドウは左下のロゴを非表示にできたり, カメラ (spectator camera) の視野角を変更できたりするが, U11現在は変更した設定を保存する機能がなく, 起動のたびに変更する必要がある. デフォルト設定のままプレイ動画を録画するとかなり見づらい (デフォルトのカメラはおそらくHMDの左目の映像をコピーしているので位置が偏っている)ので, デフォルト値を設定できる mod を作った. 設定ペーンに保存ボタンを付けるのは少し大変なので, 起動中に変更した設定を保存することはできない. あくまで起動時のデフォルト値を書き換えるだけである (なので名前も Save ではなく Keep とした). U12以降は本体側にmodオプションを変更するインターフェースが用意されたので, プレイ中いつでも設定を変更できるし, 次回のプレイ時にも設定が保存される.

現時点では, 以下のデフォルト設定を変更できる.

  1. カメラの種類: HMD (デフォルト), Player, Free, Auto のどれか
  2. 視野角 (FOV), デフォルトのHMDは60固定で変更できない, それ以外のカメラはデフォルトで 80 だが録画や配信には70くらいが見やすい?
  3. 左下のロゴの表示・非表示
  4. カメラ安定化効果の有無
  5. モーションブラー効果の強度
  6. フルスクリーンにするかどうか
  7. ウィンドウの縦横サイズ, FHDとか4KとかWXGAといったよくある規格から選択できる

類似modとしてプレイ中にいちいちHMDを外してウィンドウを見なくても設定変更できる Spectator Cam Controllerというmodがあるが, こちらは設定の保存機能はない. このmodと連携する機能があれば便利だが, 作るのが大変そうなので不完全なまま中断している. こちらも U12になってオプションが保存されるようになった, というかKWSと機能の大半が被ってしまった. 好きな方を使えばいいと思う.

あるいはauto fullscreenというmodは名前通り起動時に自動でフルスクリーン表示にしてくれる. もちろん Keep Windows Settings にもその機能はある (ただしKWSはスクリプトを使ってるので現状nomadでは動作しない. Nomad 版でウィンドウ表示があるのかはよく知らないが.).

刀筋を立てて切れ: Edge Incidence Angle Indicator

www.nexusmods.com

剣を振ってもなぜか切れないことがよくあったので作った. 切れない原因は, 単純に本人が下手か, VRバイスが手の動きを正確に追跡できていないか, 当たり判定の計算のバグか, のどれかなので, 最初の2つを識別するために, 振っている方向と刃の入射角が大きくずれているかどうかを視覚化する機能を用意した. 角度が適切で, いわゆる「刃筋が立っている」状態ならば軌跡が緑色になり, そうでないなら赤色になる. B&Sでは武器の部位ごとに切れるかどうかを判定する入射角の上限が設定されており, デフォルトではこの入射角で判定している. オプションでインジケータの判定に使う入射角を指定できる.

現時点ではデバッグ用ツールも兼ねているが, フォームチェックとしてもある程度使えるだろう. ゲーム側でこの辺の精巧さが改善されれば練習装置としてより使えるようになりそうだ.

遊び方の改変

根本的にゲームの遊び方を変えるための mod

BGMのランダム再生: Random Music Replacer Framework

www.nexusmods.com

デフォルトのBGMに飽きたというか, あんまり雰囲気に合ってない気がするので, 音声ファイルを自由に追加してランダム再生できるようにした. なお既にアナウンスされているように U12ではBGMが変更されるらしい.
もともと Music Replacer Framework という mod をさらに改造して作ったものなので, BGMの追加には Unity Editor (+公式SDK) で使用したい音声ファイルを含んだバンドルファイルを生成する必要があった. しかし, これがなかなか不便なので音声ファイルを指定したフォルダに置くだけで読み込めるようにした. MP3 と OGG ファイルならなんでも再生できる. 追記: U12以降はこちらも音声ファイルを放り込むだけで再生できるようになったようだ.

これも Customizable HUD と同様に, 録画や配信に便利なように, 音声ファイルのメタデータをちゃんと記入しておけば画面上に再生中の楽曲のタイトルや作者の情報を表示できる. 配布ページのGIFは古いバージョンのものなので表示ウィジェットの見た目が今は少し変わっている. これもそのうち使用している動画を公開する

追記: U12でBGM制御のプログラムが大幅に変わったので, このmodはU12では動かない. 個人的な優先順位は低いのでまだ対応していない. ランダム再生とウィジェット以外の機能は Music Replacer Framework にもあるので, とにかくBGMを変えたい場合はそっちを使うといいだろう.

追記: やっとU12で動作するよう更新した. だが外部メディアプレイヤーの操作が.NETかなんかの不具合でエラーを発するようになったのでめんどくさくなって廃止した.

装備スロットを追加する: Presets for MoreSlots

www.nexusmods.com

これは Wully 氏の MoreSlots の設定ファイルのみである. デフォルトだとあちこちに装備スロットが増えるがかっこ悪いので, 歴史上, あるいは創作上の有名な配置を再現した設定ファイルをいくつか作った. 6種類それぞれ併用可能だが同時にインストールし過ぎると当たり判定が重なって使いづらいかもしれない. (現状の掴み動作は当たり判定が広すぎて違和感があるので掴みの判定を自然にするmodとかもできれば作りたい)

追記: 左利き版がほしいという声が多かったので左右非対称なプリセットには全部左右逆のバージョンを用意した. そのため大幅にプリセットが増えた. これだけ増えると管理が難しい気がするが, Wullyがプリセットの管理を簡単にする機能をそのうち追加すると言っていたので私は本体の更新を待つすることにする.

ゲーム内の動作をよりリアルにする: Realistic Physics Overhaul

www.nexusmods.com


かつては Realistic Physical Ability という名前だった. デフォルトの動作はなぜかふわふわしている. ジャンプボタンを押すと自分の身長くらい軽く飛ぶ上に, 上昇と落下速度からは重量感が感じられず風船のようにゆっくりしている. 何十メートルも落下しても転倒したりダメージを受けたりする様子もない. 走る速さも, 独自に計測してみたら (Customizable HUD で表示できる) 最大で 20km/h 近くなった. これは自転車で走るようなもので, まるでリアルではない. そこで, 主に単純な力学的挙動を現実寄りに調整するこのmodを作った. 現時点では以下のような機能がある.

  1. 歩行・走行速度は現実の平均的な人間くらいになる
  2. ジャンプもあなたが普段できるくらいの高さになる, 崖をよじ登る際の異様な懸垂力もなくなる
  3. 10メートル程度の落下でもかなりのダメージを受ける
  4. 重い装備を持っているとそれだけ移動も遅くなる (インベントリの中身は反映されない)
  5. 当たり屋か転び公妨か何かのように少し触れただけで派手に転倒する敵が転びにくくなる (吹き飛びにくくもなる) 現時点ではまだ不安定なのでこっそりオプションで無効化できるようにしているが, 将来的には固定にする予定.
  6. (オプション) 移動速度をリアルにしたら移動が遅くストレスが溜まったので戦闘中でなければデフォルトと同じくらいの速さで移動できる
  7. (オプション) 最もリアルでない要素, つまり魔法を禁止し, ソードスキル及び鈍器スキルだけで戦ってもらう

他にもプレイヤーやNPCの動きで違和感・不満のある箇所はまだいくつもあるので, 原因を見つけ次第修正したり機能を追加したりしていきたい. また, これらの修正により明らかにゲームが高難度化するので, 高難度プレイを楽しみたい人向けに派生機能を追加するか, 独立した mod も作りたいと思っている.

なお, 「移動速度を自由に調整できないか」「スローモーションだけ使えるようにならないか」といった要望が寄せられているが, そのような機能は完全にこのmodの名称に反しているため対応する予定はない. ただし, 魔法を禁止すると MP や Focus の要素が死んでしまうので, リアルさの追求から逸脱しない範囲で, これらを再利用する別のゲーム的要素を追加できないかとは考えている.

少し技術的な話(1): Physics Overhaul とあるが, 実際には本体の物理エンジンのコアな部分には手を加えていない. 一部の不自然な挙動を引き起こすパラメータ等を修正しているだけである. 例えば Boneworks を何度か引き合いに出したが, 現時点ではどっちがより優れているということはなく, 細かい挙動の違いは一長一短だと考えている. 例えば以前書いたように Boneworks は近接武器の重量感がないのは不満だ, 一方で B&S はジャンプボタンを押さないと足が地面に張り付いたままで懸垂運動ができない場面が多い, というふうに. 最終的に両者のいいとこ取りのようになるかもしれない

少し技術的な話(2): 以前から似たようなコンセプトでJSONファイルの設定を書き換えたmodを公開する人が何人かいたが, 私はそのコンセプトを(勝手に)引き継いで発展させたこのmodを作った. 現在はJSONのパラメータ書き換えだけでは表現できない複雑な機能が増えたため, ほとんどスクリプトで制御している. JSON書き換えだけで似たようなことをするmodと併用した場合, このmodが設定を上書きしてしまう可能性がある.

コントローラの設定が気に入らなかった: Immersive Handle Controls for Valve Index

www.nexusmods.com

結構前からやりたいと思っていたがソースコードの解読がめんどくさくてなかなかできなかったやつ. 名前通り Valve Indexとの併用を想定したmodである. トリガーやトラックパッドを押すと握ってるものがスライドするのが気に入らなかった (どうしてロープを握りしめるほど滑り降りるのが速くなるんだい?) ので, トリガーやトラックパッドを離した時にスライドさせることで, 直感的な操作にした. 単純にボタン押し・離しを反転させるものと, Valve Indexの感圧センサーを利用して一定以上の力で押さえると固定するという2通りの選択肢がある. ただし後者はまだ動作が不安定である. (もしかすると前者は他のコントローラでも使えるかもしれないので, 動作確認はできないが要望があればなんかするかもしれない) 改修するためにかなり汚いコードになってしまったこともあり, もっと洗練したものにしたいが入力周りの改造は難しい.

ジョーク系

思いつきで作られてしまったやつら

登場・死亡エフェクトを追加する: Spawn and Despawn Effect Framework

www.nexusmods.com

View post on imgur.com
imgur.com


エフェクトIDを書くだけで登場時・死亡時にエフェクトを追加できる. 発生時間にラグをつけるオプションもある. ただしエフェクトそのものは追加しないのでこのmod単体では本体で使われているエフェクトしか追加できない. デフォルトでは登場時にオーラを発する (重力魔法エンチャントの流用), 死亡時には3秒後に爆発する (炎魔法の強攻撃の流用), というものになっている.

Getting Over It with Blade and Sorcery

数年前に流行ったアレのパロディ.

View post on imgur.com
imgur.com


www.nexusmods.com

Realistic --- で力学的挙動の不自然なところを修正するためにいろいろ試していた際に見つけた機能を組み合わせたらできるんじゃないかと思ってやってみた. 専用マップの作成予定はない (誰か作ってください)

これ以前にもそういう遊び方を考えていた人間はいる. 例: Getting Over It with Blade And Sorcery : BladeAndSorcery


追記: U12向けにはまだ更新していない.

ゾンビモード: Simple Zombie Mode

www.nexusmods.com

思いつきその3. 敵を倒してもしばらくすると復活するモードを追加する. 頭部を破壊しない限り何度でも. Simple なので凝ったエフェクトとかは用意していない. Getting Over It ... と同様動作には MoreModes が必要. ゲームモードの仕様上, 自宅マップではこのモードを有効にできない.

追記: U12が出てしばらく経ってもMoreModesが更新されないので, とりあえずMoreModesなしでも動くようにしてある.

Halloween 2022

www.nexusmods.com

もう今年は終わったがハロウィン向けmodを作った. ハロウィン向けの時限解禁modなので今の時期やっても特に面白くない. 来年も飽きてなかったら2023年版を公開する


MCMで設定を変更できる







すぐにけせ
すぐにけせ
すぐにけせ
すぐにけせ
すぐにけせ
すぐにけせ
すぐにけせ
すぐにけせ
すぐにけせ
すぐにけせ
すぐにけせ
すぐにけせ
すぐにけせ
すぐにけせ


*1:オーバーレイはレイヤーマスクとは直接無関係な上にそもそもレイヤーマスク機能はLIVがサポートしてるのではなくUnity側の機能ではないか