← 作品一覧

MODv1.4.1 · Unity(BepInEx・Harmony)・C#

SULFUR Together

ひとりで潜るゲーム(これまで)

仲間と潜って、倒れた仲間を起こしに行くゲーム(その後)

1 人用のゲーム SULFUR に、協力マルチプレイを追加する mod です。ステージを作るシードをそろえ、敵とボスの動き、ダウンと救助までをホスト側で決めて全員に届けます。参加はゲーム内の Options 画面から、Steam の招待か IP の直接入力で行います。

いまも Public Beta で、全員のゲームと mod のバージョンをそろえる必要があります。

ダウンロード数とバージョンは Thunderstore(2026-10-26 時点)。

左がホスト、右がゲスト

01課題

友だちと一緒に潜る手段がない

SULFUR は 1 人で遊ぶゲームで、協力プレイの仕組みがありません。同じステージを一緒に進むことも、倒れた仲間を助けに行くこともできませんでした。

02ねらい

遊び方はそのまま、隣に仲間がいる

  1. 同じ世界を見る敵もボスも、全員の画面で同じように動く。画面ごとに食い違いが出ない作りにする。
  2. 自分のキャラクターで行く持ち物や成長は 1 人ずつ残し、自分のセーブで育てたキャラクターのまま参加できるようにする。
  3. 設定ファイルを触らない参加も設定も、ゲームの Options 画面の中で済ませられるようにする。

03設計

決めたこと、決め直したこと

誰が世界を動かすか

それぞれのゲームで敵を動かし、結果を合わせる(これまで)

世界はホストだけが動かし、ほかの人には「人形」を見せる(その後)

最初は各自のゲームで敵の AI を動かし、結果をそろえようとしました。AI・アニメーション・ダメージ・死亡が少しずつ食い違い、合わせきれませんでした。いまはダメージも死亡もドロップも、ホストが決めて全員に届けます。

共有しないもの

全部を共有する(これまで)

キャラクター・持ち物・成長・セーブは 1 人ずつ(その後)

自分のセーブで育てたキャラクターのまま参加できます。ドロップの共有は選択式で、初期設定はオフです。エンドレスモードでは、成長を個別にするか、共有して投票でカードを選ぶかをホストが決めます。

メニューを開いた時

メニューを開くとゲームが止まる(これまで)

マルチプレイ中は止めない(その後)

ゲストがバッグを開くと敵が動かなくなる、という問題がありました。原因はメニューを開くとゲームが一時停止することでした。Minecraft の LAN と同じように、マルチプレイ中は止めないようにしました。

Steam での接続

Steam 用に別の通信の仕組みを作る(これまで)

Steam も同じ通信の下に置き、接続の確認やチェックはそのまま使う(その後)

IP の直接入力でも Steam の招待でも、上に乗っている処理は同じです。片方だけ直し忘れる、ということが起きません。

04実装

作るうえで苦労したこと

自分以外の「プレイヤー」を作る

SULFUR は 1 人用なので、敵は手元のプレイヤーしか見ていません。ゲーム自身のプレイヤー一覧に、動かない「影のプレイヤー」を登録して、元からある視線の判定がほかの人にも反応するようにしました。一人称視点のゲームで体のモデルがないので、ほかの人はゲーム内の神父の絵で表示し、倒れると横になります。

ボス戦でフレームレートが半分に

皇帝戦だけ、マルチプレイ中にカクつきました。同じシードで単独とマルチを自動で比べ、「接続しているだけで重くなる」ところまで絞り込んで、物理の処理の中で毎回走っていた探索を見つけました。

53 fps・カクつき 23 回 → 113〜118 fps・0 回(1 人で遊ぶ時と同じ)

ゲームの更新に追いつく

0.19 の更新でゲーム側の関数の名前と引数が変わり、ほかの人の弾が一切見えなくなりました。名前を探すやり方を、後から引数が足されても見つけられる形に変えています。

変更の経緯はバージョンごとに CHANGELOG に残しています。

05反応

遊んだ人から返ってきたもの