[WIP] RMMZ-OS — RPG Maker MZの公式マルチプレイヤーサーバー

RMMZ-OS — RPG Maker MZ 用の公式マルチプレイヤーサーバー(開発中)

皆さん、こんにちは。

私が構築しているプロジェクトをご紹介したいです。それは RMMZ-OS で、RPG Maker MZ のプロジェクトを別のエンジンでゲームロジックを書き直すことなく、オンラインマルチプレイヤーゲームに変えるための、ゼロから作り上げたクライアント・サーバーインフラストラクチャです。

コアとなるアイデア

RPG Maker MZ は、マップ、イベント、データベース、スプライト、そしてエディタのワークフロー全体など、得意なことに徹します。RMMZ-OS は、既存の MZ ランタイムの上に ネットワークおよびサーバー権威レイヤー を追加し、複数のプレイヤーが同じライブワールドを共有できるようにします。概念的には、かつて RPG Maker XP 向けに存在した Netplay 1.7 にインスピレーションを受けていますが、ポート(移植)ではなく、モダンなクライアント・サーバーアーキテクチャによる完全な再構築です。

最も重要な設計上の決定は、初日からサーバーが権威を持つこと です。クライアントは共有ワールドに関する真実を決定することはありません。クライアントは意図(例:「左に移動したい」)を送信し、サーバーがそれを検証して確認します。これは実際のマルチプレイヤーゲームが採用しているモデルと同じであり、これにより、後付けではなく、チート対策やデシンクなしでの再接続が可能になります。

現在動作している機能

  • アカウントとキャラクター — 実際のバックエンド(Postgres)を介した登録/ログインと、セッショントークンフロー。キャラクターはアカウントに属しており、ワールドに参加する前に1つを選択します(これは、外部ランチャーは必要とせず、プラグインオーバーレイとして構築されたゲーム内 Scene_Login / Scene_CharacterSelect UI とともに提供されます)。
  • 共有ワールドと移動の同期 — プレイヤーは同じマップ上で他のプレイヤーの移動をリアルタイムで確認でき、位置や方向の真のソースはサーバーです。
  • 永続性 — キャラクターの位置はセッションや再接続をまたいで保存および復元されます。
  • チャットとパーティー — 同じプロトコルを介した基本的なチャットメッセージングとパーティー(グループ)サポート。
  • サーバー権威のイベント — マップ上の RPG Maker イベントは共有/権威ありとしてマークでき、その状態(セルフスイッチ、結果など)は各クライアントで独立して実行されるのではなく、サーバーによって解決されます。
  • MMO スタイルの名札 — 各プレイヤーのキャラクター名が、ログイン時に使用されるサーバーが把握しているキャラクター名に基づいて、スプライトの上に浮遊表示されます(クライアント側の推測は不要です)。

すべてはプレーンな RPG Maker MZ プラグインとして提供されます(ゲームをプレイするためにビルドステップは不要)が、パブリックエンジン API にフックしています。MZ コアランタイムのいずれも修正またはフォークされていません。

アーキテクチャの概要

RPG Maker MZ ランタイム  <-->  RMMZ-OS クライアントプラグイン(WebSocket)  <-->  ゲームサーバー(権威あり)  <-->  Postgres

ワイヤープロトコルは、WebSocket 上のバージョン付き JSON Envelope です。サーバー側は TypeScript のモノレポで、明確に分離されたパッケージ(ワールド/エンティティシミュレーション、プロトコル、認証、サーバーコア)が、小さな「コンポジションルート」ファイルで結び付けられています。これにより、シミュレーションロジック自体は WebSocket やデータベースのことを一切知らず、その逆も同様です。

明確にまだ実装されていないこと

スコープについて率直に申し上げますと、これは初期段階です:

  • コンバット/PvP はなし。
  • インベントリ/クエスト/ギルドシステムはなし。
  • シャーディング/複数のゲームサーバーなし(現時点では1つのワールドにつき1つのゲームサーバー)。
  • モバイル/コンソールなし — デスクトップ/ブラウザのみ。MZ 自体がサポートするターゲットと同じです。

これはファウンデーションファーストのプロジェクトです:各フェーズでは、単なるスケルトンではなく、実際に実行可能でテスト可能なものを提供しなければなりません。

投稿する理由

主に進捗状況の共有と、実際に RPG Maker ゲームを作成している方々からのフィードバックを得るためです。上記で既にカバーされていない、MZ 向けの「MMO レイヤー」から何を求めていますか? 移動/デシンクの感触、アカウントフロー、イベントの権威モデルなど、何でも結構です。

アーキテクチャや現在の機能セットに関する質問にお答えします。

「いいね!」 2

RMMZ-OSアップデート — ネームプレート、HUD、ドラッグ可能なインベントリとホットバー

RPG Maker MZ用の公式マルチプレイヤーサーバーレイヤーであるRMMZ-OSに関する前回の投稿の続報です。それ以来、いくつかの変更が実装されました:

MMO風のネームプレート

各プレイヤーのキャラクター名が、そのスプライトの上部に浮遊するようになりました。あなた自身も含め、他のすべてのプレイヤーの名前が表示されます。これは、キャラクター選択時に選択した名前に基づいており、アカウント/キャラクターシステムからワールド同期に至るまで一貫して適用されているため、誰かの頭上に表示される名前は、サーバーが実際に認識している名前と一致します(クライアント側の推測ではありません)。

本格的なHUD

マップの隅には、常に表示されるHUDが設置されました:ポートレート、レベル、名前、HP/MP/TPバーが表示されます。一つ正直な注意点として、RMMZ-OSではまだ戦闘やステータス情報をネットワーク上で同期していません(これは長期的なロードマップに含まれており、前回の投稿で言及したアーキテクチャドキュメントを参照してください)。そのため、現在はこのHUDは、シングルプレイヤーのMZプロジェクトが持つローカルアクターデータを反映しているに過ぎません。このHUDは、そのシステムが実装された際にサーバー同期されたステータスを指し示すように設計されており、UI自体を変更することなく対応可能です。

インベントリグリッドとホットバー

今回の大きな追加機能です:

  • グリッドパネル — パーティが持っているすべてのアイテム(アイテムと装備品を含む)を表示し、ホットキーで切り替えます。スロットをクリックすると、アイテムを使用するか、リーダーに装備できます(装備すると、以前そこにあったものと自動的に交換されます。これはバニラの装備画面と同じ動作です)。これはヘッダー部分をドラッグして移動できる浮遊型のパネルで、開いている間もマップは一時停止しないため、位置を調整しながらプレイを続けることができます。
  • ホットバー — 画面下部に常に固定表示される、番号付きのスロットの行です。グリッドを開き、アイテムにカーソルを合わせてその番号キーを押すことでスロットをバインドできます。バインド後、その番号キーを押すだけで、グリッドが開いていなくても即座にアイテムを使用または装備できます。

パネルはマップを一時停止せずにオーバーレイ表示するため、私は意図的にマウス/キーボードのハイブリッド操作を採用しました。矢印キーはキャラクター移動に使用されているため、グリッドはクリック操作、ホットバーは数字キー操作としています。また、この設計に伴う実際のバグを修正しました。パネルやホットバーをクリックすると、エンジンのクリック移動機能に透過してしまい、キャラクターがその下を歩くという問題がありましたが、これは正しくブロックされるようになりました。

ビジュアル調整

HUD、インベントリ、ホットバーの外観を一貫したデザインに統一しました。フラットなダークパネルで、グラデーションや装飾は排除し、HP/MPのみがUI全体で唯一の色付けされた部分となっています。これはログイン画面やキャラクター選択画面ですでに使用されているデザイン言語に合致しており、クライアント全体が一貫したUIシステムとして認識されるようになり、複数のプラグインが単に結合されているという印象を払拭しました。

まだローカル限定

前回も言及しましたが、インベントリとステータスはまだサーバーに同期されていません。これは、そのシステムの前に整備されるUIとインタラクションの基盤です。戦闘、共有ドロップアイテム、キャラクター間でのインベントリの永続化はまだ行われません。これらは今後の実装予定です。

これらに関するご質問や、ネットワーク版実装前にインベントリ/ホットバーシステムにどのような機能を望むかについてのご意見をお聞かせください。