【スカイリム2025】【上級者向け】Soulsy HUD(Rust + C++)のビルドとカスタマイズ

スカイリム
記事内に広告が含まれています。

こんにちは、まとんです。

Soulsy HUDを使いやすくカスタマイズしようと思ったのですが、思いの外大変だったので、その手順を残しておきたいと思います。

まとん
まとん

ちゃんとビルドできるようになるまでに2日かかりました。。

通常、SKSEプラグインはC++で作成するのですが、このModはそこにRustを組み合わせるという、おもしろい使い方をしていました。

どうも作者様はRustに強い思い入れがあるみたいで、SKSEライブラリをRust化するというプロジェクトに取り組んでおられるみたいです。

まとん
まとん

Rustは触ったことないので、さっぱり分からんのです。

今回は解説というより、自分のための備忘録的な意味が強いのでご了承ください。

スポンサーリンク

準備1:各種ツールのインストール

Soulsy HUDのビルドに必要な各種ツール類をインストールしていきます。

まとん
まとん

必要なものは、Soulsy HUDのGitページに記載されています。

インストールするもの

基本的に自分の環境に合わせたインストーラーをダウンロードして、後は画面の指示に従い入れていけばOKです。

各種インストーラーの設定項目は、全てデフォルトで問題ありません。

Visual Studioが未インストールの場合、Rustのインストール時にインストールするか聞かれるのでインストールします。

まとん
まとん

この場合、英語版のVSがインストールされます。日本語のVSが欲しい場合は自分でインストールするか、Windowsのアプリ一覧から「Microsoft Visual Studio Installer」を起動し、日本語を追加しましょう。

vcpkgのインストールについて

vcpkgのインストールだけ特殊なので解説します。

コマンドプロンプトからvcpkgをインストールしたい任意のフォルダを開き、以下のコマンドを実行します。

git clone https://github.com/microsoft/vcpkg
cd vcpkg
.\bootstrap-vcpkg.bat

これで、vcpkg下に実行ファイル「vspkg.exe」が作成されます。

まとん
まとん

vcpkgフォルダは環境変数のPathに登録し、パスを通しておきましょう。

準備2:Soulsy HUDのビルド準備

続いて、Soulsy HUDのビルドに必要な環境を整えていきます。

コマンドプロンプトからSoulsy HUDのソースコードを格納したいフォルダを開き、以下のコマンドを実行します。

git clone https://github.com/ceejbot/soulsy
cd soulsy
git submodule update --init --recursive
cargo update -p time ※timeクレートのビルドに失敗する場合

それぞれのコマンドについて解説します。

  • git clone https://github.com/ceejbot/soulsy
    Soulsy HUDのソースコードをクローンします。
  • git submodule update –init –recursive
    CommonLibSSE-NG(SKSEプラグインのライブラリです)をサブモジュールとしてダウンロードします。
  • cargo update -p time
    Rust最新版に付属するtimeクレートにはバグがあるみたいで、私の環境ではtimeクレートのバージョンを上げておく必要がありました。そうしないとビルドが失敗します。
    何もせずともビルドが通るのであれば、このコマンドは不要だと思います。

ビルド

ビルドは次のコマンドを実行します。

rd /s /q build ※初回ビルド時は不要
cmake --preset vs2022-windows
cmake --build --preset vs2022-windows --config Release

それぞれのコマンドについて解説します。

  • rd /s /q build
    前回のビルドを削除します。初回ビルド時は実行する必要はありません。
  • cmake –preset vs2022-windows
    ビルドに必要な各種環境を整えます。ツールチェインやVS側のコンパイラオプションの設定なども、このプリセットでやってくれているみたいです。
  • cmake –build –preset vs2022-windows –config Release
    ビルドします。

ビルド後のモジュールは「build\Relase」配下にできます。この中のdllをオリジナルとdllと入れ替えればOKです。

やりかったこと

以上でSoulsy HUDをビルドするところまでできました。

まとん
まとん

まとめるとこれだけのことなのですが、gitに詳しいビルド手順が載ってなかったり、そもそも私がRustの知識を全く持ってなかったため、すごい遠回りをしてしました。。

で、ここまでして何をしたかったの? ということなんですが、Soulsy HUDのちょっとした誤動作を修正したかったのです。

サイクルキーの誤動作を防止したい

こちらの記事でも紹介した通り、Soulsy HUDは大変使いやすく、私のスカイリムには欠かせないModの一つなのです。

が、サイクルキーと他のキーを同時押しするとサイクルキーも反応してしまうという、ちょっと困った動きがあります。

まとん
まとん

例えば、私はゲームパッドの→を右手装備のサイクルキーに割り当て、RB+→をホットキーに設定しています。

この場合、ホットキーをトリガーしたときに右手装備も切り替わってしまいます。

切り替わった装備はまた元に戻せば良いので、そんなに深刻ではないのですが、地味にストレスなので直せるなら直したいなあと思っていました。

原因

この現象が発生する原因は、Soulsy HUDが自分の管理下にないキーを一切検知していないことにあります。

なので、サイクル登録やポーション使用にも関係していないキーは、押されていてもサイクルキー単発押しという認識なっていました。

直し方

直し方ですが、control.rsのサイクルキーの有効チェックに以下のコードを入れました。

control.rs

    pub fn handle_key_event(&mut self, key: u32, button: &ButtonEvent) -> KeyEventResponse {
        ...

        // From here on, we only care if the key has gone up.
        if tracked.state != KeyState::Up {
            return KeyEventResponse::handled();
        }

+        // 押下中のキー数をチェック
+        let pressed_count = self.tracked_keys.values()
+            .filter(|k| {
+                matches!(k.state, KeyState::Pressed | KeyState::Down)
+                && k.press_start.map_or(false, |start| start.elapsed() <= Duration::from_secs_f32(5.0))
+            })
+            .count();
+
+        // キーアップしているのに他に押されているキーがあれば処理しない
+        if pressed_count >= 1 {
+            return KeyEventResponse::default();
+        }

Soulsy HUDは長押しを認識するので、キーアップがサイクルキーの発動タイミングになります。

なので、サイクルキー発動OK(キーアップされ、他に押されているキーがないはず)となった後に、まだ押されているキーがあるようなら発動をキャンセルするという動きにしました。

それと説明しづらいのですが、このModは、ボタンが押され始めたタイミングは認識しているのですが、キーアップした時間は監視していません。

そのため、次にそのキーが押されるまでMod内では「キーはずっと押しっぱなし」という扱いになっています。

それだと「今押されているか?」という判定がうまく機能しないので、直近5秒以内に押し続けられているキーがあるかという条件で判定することにしました。

まとん
まとん

本当は同時押しだけみれば良いので、数フレーム分のキープレスだけ見たかったのです。

しかし、シャウトや魔法など、長押し前提の操作とかみ合わなくなるので、5秒というちょっと長めの時間にしました。

まとめ

たったこれだけの修正をするのに、えらい時間を使ってしまいました。

ただ、その甲斐あってゲームプレイがすこぶる快適になったので、がんばってよかったと思います。

また、Rustは初めて触ったのですが、初めてでも結構直感的扱えて良い言語だと思いました。

ただちょっと欠点があって、ビルドがすごく遅いです!

まとん
まとん

Rust + C++という構成のせいかもしれませんが、dllをたった一つ作るだけなのに数分かかるのは、ちょっときついです。

おかげで長押し時間の微調整など、何度もトライアンドエラーしたい作業が大変でした。。

いろいろと良い経験になりました。疲れた。。

スカイリムプログラミング
シェアする
PCパーツを買うなら楽天市場が便利!

パソコン(PC)や PC パーツは高額なものが多いので、安さだけじゃなくて安心して購入できるところを選びたいですよね。

そんな方には、楽天市場 がおすすめです!

楽天市場おすすめの理由 その1:はずれ業者が少ない

なんといっても、楽天市場 の良いところははずれ業者が少ない点です。

その理由は、出店するまでのプロセスにあります。

楽天市場 に出店するには、出店登録料やサイト構築費用の初期費用がかかり、その合計額は50万円~100万円程度になります。

さらに提出書類も多く、審査も厳しいため、アカウントをころころ変えて粗悪品を売り逃げするような悪質業者には、割に合わない仕組みです。

つまり、楽天に出店している時点で”本気で商売しているお店”である可能性が高いと言えます。

まとん
まとん

ちなみに業界最大手のAmazonは登録無料(出品数による従量課金)、審査も簡単でサイト構築もほぼ不要なので、出店ハードルが低いです。

人手も資金力も乏しい個人商店に優しい仕組みですが、その分悪質な業者が増えやすく見極めが難しいです。

楽天市場おすすめの理由 その2:手厚いサポート

楽天市場 には専門店が多く、サポートが手厚い傾向があります。

パソコン用品は精密機器ですし、初期不良対応が重要なことが多いので、しっかり対応してくれる業者は安心感があります。

楽天市場おすすめの理由 その3:ポイント還元率が高い

楽天市場 で買い物をすると、楽天ポイントが驚くほど溜まります。

楽天はほぼ毎日のようにセールをやっており、買い物前にその時々のセールにエントリーしておくだけで、ポイント還元率が上がったりします。

さらに 楽天モバイル楽天カード のような他の楽天サービスを利用していると、それだけでポイント還元率が上乗せされるため、楽天をよく利用されている方ほどお得になります。

PCパーツは高額なものが多いので、ポイント還元率が高い楽天と相性抜群です。

まとん
まとん

こちらの記事にあるPCパーツは楽天のお買い物マラソンで揃えました。

この時はポイント倍率が14倍(通常1%の還元率が14%)となり、セールの上限である8000ポイント(=8000円)をもらえました。

楽天のいまいちなところ

ここまで良いことを書いてきましたが、もちろん気を付けなくてはいけない点もあります。

楽天市場のいまいちなところ その1:メールがうざい

楽天で一度でも買い物したことがある人なら分かると思うのですが、メールがやたらと届きます。

楽天で買い物をすると、そのショップのメルマガに自動登録される仕組みになっているので、放っておくとメールの数はどんどん増えていきます。

まとん
まとん

購入画面にメルマガ登録のチェックボックスがあるので、それを解除しておけば届きません。

ただ、毎回解除するのが正直かなり面倒です…

また、キャンペーンのエントリーにメルマガ登録が必須なことも多いので、それもメールが増えやすい要因です。

あきらめて我慢するか、不要なメールはどんどん配信停止しましょう。

楽天市場のいまいちなところ その2:配達スピードはお店次第

Amazonには独自の配送網があり、注文した翌日には届くことが多いですが、楽天にはそういったものはありません。

楽天はあくまでショッピングモール(商店の寄せ集め)なので、商品発送はお店任せです。

そのため、商品の購入がお店の休業日と重なっている場合は遅くなりますし、離島や遠方のお店であれば当然日数もかかります。

急ぎの場合は、発送予定日や到着予定日を必ず確認しておきましょう。

楽天市場はパソコン(PC)購入の強い味方!

以上の通り、メールの多さと配達スピードに少し注意が必要ですが、それを差し引いても楽天市場はパソコン(PC)購入にとって、とても心強い味方です。

安心して買い物できるだけでなく、ポイントが本当に貯まりやすいので、追加でもう一点購入しやすい点も魅力です。

賢く利用して、お得にPCライフを楽しみましょう!

コメント

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