概要
Moongate v2は、.NET 10で構築された最新のUltima Onlineサーバープロジェクト クリーンでモジュール化されたアーキテクチャと強力なパケットツールを実現 テストカバレッジや決定論的なゲームループ処理を重視 コラボレーターやコードレビュー協力者を積極的に募集 GitHubやDiscord、Matrixでの参加を歓迎
Moongate v2 概要と特徴
- Moongate v2 は、 .NET 10 ベースの最新Ultima Onlineサーバーエミュレーター
- クリーンかつモジュール化 されたアーキテクチャ設計
- パケットツーリング 強化、ゲームループの決定論的処理
- 実用的なテストカバレッジ 確保を目指す
- NativeAOT 対応による単一ネイティブバイナリ化
- Luaスクリプティング による柔軟なゲームロジック拡張
- React製管理UI と 埋め込みHTTP管理API を提供
- 自動ドア生成 (ModernUO/RunUO同等アルゴリズム)
コラボレーター募集
- GitHub Issue/Discussion で参加表明・相談が可能
- Discord や Matrix Room でディスカッション参加歓迎
- コードレビューや設計議論 への協力を特に希望
- Issues: https://github.com/moongate-community/moongatev2/issues
- Discussions: https://github.com/moongate-community/moongatev2/discussions
- Matrix: https://matrix.to/#/#moongate:matrix.org
既存サーバープロジェクトとの関係
- ModernUO, RunUO, ServUO 等のクローンではなく、独自路線
- これらのプロジェクトから多大なインスピレーションと技術的知見を得ている
- POLServer, ModernUO の貢献者・チームへの特別な感謝
- 一部データセット(デコレーション、ロケーション、サイン)は ModernUO からインポート・適用
プロジェクト目標
- 保守性・正確性・開発速度 を重視したUOサーバー基盤の構築
- ネットワーク層とゲームループの明確な境界 とスレッドセーフ実装
- 型安全なパケット定義 と ソース生成による自動登録
- AOT(Ahead-Of-Time) 対応を意識しつつ、ローカル開発の快適さも両立
主な実装済み機能
- TCPサーバー起動・接続ライフサイクル 管理
- パケットフレーミング/パース (固定・可変長両対応)
- 属性ベースパケットマッピング とソース生成
- ネットワーク→ゲームループ 間の メッセージバス 設計
- ドメインイベントバス によるイベント駆動設計
- セッション分離 (トランスポートとプロトコル/ゲームプレイ)
- コア挙動・パケット基盤のユニットテスト
- Luaランタイム (コマンド、関数バインディング、.luarc生成)
- 埋め込みHTTPホスト による管理エンドポイント・OpenAPIドキュメント
- スナップショット+ジャーナル 型永続化(MessagePackソース生成)
- SpectreベースのカラーログUI とインタラクティブコンソール
- タイマー・ゲームループスケジューリング とメトリクス
- リージョン・セクター管理 (ModernUO基準、JSON多態ロード対応)
- メール送信機能 (Scribanテンプレート+SMTP)
- A*パスファインディング (Lua移動プリミティブで利用)
- ライトサイクル管理 とLuaコマンド連携
- Luaコマンドスクリプト (moongate_data/scripts/commands/gm 配下)
最近の開発トピック
- 永続化シリアライズ をMemoryPack→MessagePack-CSharpに移行(AOT安定化)
- アウトバウンドパケット送信 の専用ネットワークスレッド分離
- 空間・ゲームループの高速化 (割当最適化)
- ライトサイクルロジック の独立サービス化
- 新GMコマンドスクリプト 追加(.eclipse, .set_world_light, .teleports等)
空間チャンク戦略
- セクター/チャンクベース のワールドストリーミングアプローチ
- 16x16セクター 単位でデータをインデックスし、 遅延ロード
- プレイヤーログインやセクター移動時 にスナップショット送信
- 未使用エリアはアンロード しメモリ効率向上
- 予測可能なメモリ増加・CPU負荷低減・スケーラビリティ向上
- Minecraft的チャンクストリーミング に近い実装哲学
ワールド生成パイプライン
- IWorldGenerator ベースのパイプライン設計
- DoorGeneratorBuilder によるドア自動生成(ModernUO方式)
- Lua+DoorService でドアの開閉をライブ制御
- .spawn_doorsコマンド で手動ドア生成も可能
UOプロトコル対応状況
- 現状対応済み
- ログイン/認証、キャラクター、移動、アイテム操作、チャット/スピーチ、ターゲティング、ステータス、Ping、ツールチップ等
- サブコマンド対応
- パーティ、ステータスロック、ターゲットアイテム/スキル/スペル
- アウトバウンドパケット
- セッション管理、ワールド同期、移動・時間、環境効果、UI/スピーチ等
- 部分実装
- プロトコルモデルのカバレッジは広いが、実際のゲームプレイフローへの接続は一部のみ
- アイテム関連は基本動作のみ、トレードや経済は拡張中
- Lua統合済みだが、ゲームシステムのスクリプト化は今後強化
- 未実装(主要領域)
- 戦闘ループ、スキルシステム、NPC AI、ベンダー、経済、ハウジング、ボート、天候、完全なUOプロトコルカバレッジ等
永続化
- スナップショット+ジャーナル型ファイル永続化
- world.snapshot.bin(完全チェックポイント)
- world.journal.bin(増分操作記録)
- MessagePack-CSharp による高速・コンパクトなバイナリシリアライズ
- ファイルロック・スレッドセーフリポジトリ
- 起動時にスナップショット+ジャーナル再生
- AOT安定化のため永続化基盤を刷新
- クエリAPI (ZLinqによるスナップショット投影・フィルタリング)
メール送信(SMTP)
- IEmailService による一元オーケストレーション
- Scribanテンプレート +SMTP実装
- NoOpEmailSender でメール無効化時も安全
- テンプレート・変数管理 と外部連携
なぜModernUO/RunUOを使わないのか
- 既存プロジェクトは成熟かつ実績十分
- 独自設計思想 (ネットワーク/ドメイン厳密分離、イベント駆動ゲームループ、継承中心アイテム階層の排除、Luaによる高速反復開発)を追求したかったため
参加・貢献方法
- GitHubでソースコード・ドキュメント公開
- https://github.com/moongate-community/moongatev2
- Issue/Discussion/Discord/Matrixでの参加歓迎
- コードレビュー・設計議論・実装協力 を重視
このプロジェクトはまだ初期段階ですが、 堅牢な基盤 と 将来の拡張性 を重視しています。 UOサーバー開発やアーキテクチャ設計に興味のある方 は、ぜひご参加ください。