English ・ GitHub

Deadlock Soul Container
Blender Addon

3Dモデルを、Deadlock のソウルコンテナ mod にするアドオン。

ゲーム内のソウルコンテナ mod

01必要なもの

Blender 4.2 以降拡張機能に対応した版
Reduced CSDK 12Deadlock のコンパイラ一式。配布ページの Google ドライブから
SteamDeadlock 導入済み。起動してログインしたまま
Deadlock Mod Managerできた mod を入れる(公式)

02入れる

Releases の zip を、 編集 → プリファレンス → アドオン → ▼ → Install from Disk でそのまま指定(展開しない)。 一覧に出たらチェックを入れる。

CSDK の場所を教える(最初の1回だけ)

  1. 同じ画面で「Deadlock Soul Container」の ▸ を開く
  2. CSDK 12 のフォルダ の欄 → フォルダのアイコン
  3. Reduced_CSDK_12 を選んで Accept
Reduced_CSDK_12
  ├─ game\        ← この2つが直接見えるフォルダ
  └─ content\
名前が二重(Reduced_CSDK_12\Reduced_CSDK_12\)のときは内側。

この設定は Blender に残る。.blend を変えても覚えている。

03使う

3Dビューで N キー →「Soul Container」タブ。

① メッシュを1つ選んで ソウルコンテナにする 複製を作って、ボーン・ウェイト・サイズ・原点をまとめて合わせる。元のモデルはそのまま。

生成されたオブジェクトは SoulContainer コレクションにまとめられます。 再度実行しても作り直しは行われません。作り直す場合は、生成物を削除してから実行してください。

② チェック 条件を満たしているか一覧で表示。✓ 問題なし / ⓘ 注意 / ✗ このままでは作れない。
③ mod 名と出力先を決めて mod をビルド エクスポート → コンパイル → vpk まで一息。出力先に <mod 名>.vpk ができる。

マテリアル(見た目)

パネルの「マテリアル(vmat)」から、ベースカラーなどの画像を指定。

04ゲームに入れる

Deadlock Mod Manager の Mods Library → Add local mod から vpk をアップロード。

Add local mod で vpk を選ぶ

ひとつ前の画面に戻って、有効化。

一覧に戻って有効化する

05うまくいかないとき

「コンパイラの上限 524,288 を超えている」

頂点が多すぎる。デシメートモディファイアーなどで減らす(適用は不要)。

「CSDK 12 が見つからない」

プリファレンスの指定を確認。game\bin_cs2\win64\resourcecompiler.exe がある階層が正解。

コンパイラがエラーを返す

Steam が起動しているか確認。直らなければ、出力先の compile.log に生のログが残っている。

できないこと

06仕組み

中で何が走っているか。まるごとコピーして AI に貼ると、不具合や改造の相談がしやすい。

[ソウルコンテナにする]の6手
  1. 選択したメッシュを複製。メッシュデータもマテリアルも複製側の持ち物にするので、以降の加工は元のモデルに影響しない
  2. サイズの目安のワイヤー球(半径 6.325 unit)・ボーン joint1 のアーマチュア・当たり判定の球を SoulContainer コレクションに配置
  3. 親をクリアし、位置・回転・スケールをメッシュに適用
  4. 半径 6.325 unit に合わせる(本家の大きさ)
  5. バウンディングボックスの中心を原点へ(そこがキャラクターの手の位置)
  6. アーマチュアモディファイアーを追加し、全頂点を joint1 にウェイト 100%

本家のソウルコンテナ=1 unit = 1 inch、半径 約 6.3 unit(直径 約 32cm)、ボーンは joint1 の1本、全頂点が joint1 に 100%、当たり判定は半径 7 の球。

[mod をビルド]の5手
  1. 前回の出力を削除(ファイル名がマテリアル名由来なので、古いものが残ると vpk に混ざる)
  2. FBX でエクスポート。global_scale=0.0254。Blender は 1 BU を 100cm で書き、Source 2 は cm を inch として読むため、指定しないと 39.37 倍になる
  3. マテリアルごとに .vmat を書き、.vmdl の remaps に1行ずつ。雛形は pbr.vfx の NPR 設定で、値だけ差し替え
  4. game\bin_cs2\win64\resourcecompiler.exe でコンパイル
  5. *_c を集めて vpk に(向き修正のパーティクル3つも同梱)
コンパイラは game\bin_cs2\win64\ のものだけ。bin\ bin_tools\ bin_server\ は Schema mismatch: resourcecompiler.dll vs particles.dll で止まる。
踏んだ罠
  • マテリアル名の .001 は拡張子として読まれる。マテリアルが外れて赤いワイヤーの玉になる。エクスポートの間だけ半角英数名に変更。Blender は名前の重複を自動で避けるので、同名を一時退避 → 仮名 → 本名 の順で付け替え、狙いどおりか確認してから書き出す
  • テクスチャの辺が2の累乗でないとミップ生成に失敗する。Cannot filter non-power-of-two texture 1200x1024x1!。vmat ごとコンパイルが落ち、警告は「メッシュがマテリアルを参照できない」=原因から2段離れた内容になる。エクスポート時に近いサイズへリサイズ(Blender 内の画像は変更しない)
  • 頂点数の上限は 524,288。スキン付きメッシュは GPU の頂点キャッシュを使うため。チェックが数えるのはエクスポートされる頂点数なので、デシメートは適用しなくても効く
  • obj.bound_box と matrix_world は依存グラフが追いつくまで古い。計測の前に view_layer.update()、大きさは頂点から直接測る
向き修正のパーティクル

ソウルコンテナはモデルではなくパーティクルが描画している(particles/generic/holding_gold_neutral_model.vpcf)。モデルを差し替えただけでは向きに追従しない——元のパーティクルが C_OP_PositionLock の m_bLockRot で回転を固定しているため。

これを修正したパーティクル3つを同梱(手法は mod 657811 の作者からお借りした)。設定で外せる。ヨーのみの補正なので、しゃがみ移動では違和感が残る。

Valve のモデルやテクスチャは同梱していない。サイズガイドの球は実行時に生成している。