- Ultima Onlineサーバーを.NET 10とC#で完全に新規実装したオープンソースプロジェクトで、AOT(事前コンパイル)ベースにより高い性能と安定した実行を目指している
- モジュール型アーキテクチャ、正確なゲームループ処理、パケットツーリングを備え、Luaスクリプティングを通じてゲーム内インタラクションとAI制御をサポート
- MessagePack-CSharpベースの永続化システム、TCPネットワーキング、HTTP管理エンドポイント、Dockerおよびモニタリングスタックを含む完全なサーバーインフラを提供
- Luaベースのコマンド、NPC AI、視覚効果、UI(Gump)システムなどのスクリプト拡張機能により、カスタマイズ可能なゲームプレイを実装可能
- オープンソースとして公開されており、高性能MMOサーバー開発とレガシーゲーム復元研究に有用な現代的.NETサーバーフレームワークとして評価される
プロジェクト概要
- Moongate v2は**.NET 10で書かれた現代的なUltima Onlineサーバープロジェクトで、モジュール型構造とAOTコンパイル**によって高い性能と保守性を確保
- パケット定義の自動生成、決定論的ゲームループ、テストカバレッジを備えた構成として設計されている
- ModernUO、RunUO、ServUOなど既存サーバーのコードを複製せず、それらから着想を得て新たに構築された
主な目標
- 正確性と反復速度を重視した保守可能なサーバー基盤の構築
- ネットワーキングとゲームループ境界の明確化およびスレッドセーフ性の確保
- 型ベースのパケットモデリングとソース生成登録方式の適用
- AOTフレンドリーな構造を維持しつつ、ローカル開発効率も保証
現在の開発状況
- TCPサーバー、パケット解析、イベントバス、セッション管理、HTTP管理インターフェース、Luaランタイムなどの中核機能を実装済み
- Luaメタデータ自動生成、コンソールUI、タイマーベースのゲームループ、A*経路探索、照明および天候制御、メール送信機能を含む
- MessagePackベースの永続化モジュールにより、スナップショットおよびジャーナルファイルとしてゲーム状態を保存
- DockerイメージとPrometheus/Grafanaモニタリングスタックを提供し、運用環境へのデプロイが容易
スクリプティングとコマンドシステム
- **Luaスクリプティングエンジン(MoonSharpベース)**を内蔵し、NPC AI、アイテム動作、視覚効果、UI(Gump)などを制御可能
- C#コマンド登録システムとLua動的コマンド登録の両方をサポート
- 例:
.teleport、.add_item_backpack、.set_world_light などのGMコマンドを提供
- アイテムScriptIdディスパッチにより、Luaテーブルベースのクリックイベント処理が可能
性能とベンチマーク
- BenchmarkDotNetを用いた性能測定の結果、主要なパケット解析およびシリアライズ処理は数十ナノ秒単位で処理される
- AOT vs JIT比較では、一部の処理で最大5~6倍の高速化を示す
- SpatialWorldServiceやItemServiceなど、ゲーム中核経路の処理効率が詳細に測定されている
デプロイと実行
ライセンスと貢献
技術的特徴の要約
- C# + .NET 10 + NativeAOTベースのMMOサーバーフレームワーク
- Luaスクリプト統合、MessagePack永続化、Prometheus/Grafanaモニタリングをサポート
- Dockerデプロイおよび自動化スクリプトを含む
- 高性能、モジュール型、テスト重視の設計により、現代的なサーバー開発に適した構造
1件のコメント
Hacker Newsのコメント
自分がプレイしてきたゲームの中で、UO(Ultima Online) ほど「一般市民」プレイヤーが存在していたゲームはなかった
強力な装備を手に入れられない人でも楽しく遊べたし、最上位プレイヤーたちはまるで 有名人 のように知られていた
今のゲームのように全員がスーパーヒーローに見える世界とはまったく違っていた
漁師や仕立て屋として何か月も過ごしても十分に意味のある体験ができたし、強力な戦士と普通の商人が同じ世界でそれぞれの楽しみを見つけていた
今のMMOはみんなが同じアトラクションに乗るテーマパークみたいだけど、UOはプレイヤーの選択で役割が形作られる 生きた世界 だった
ゲームの目的は世界に「勝つ」ことではなく、その中で 生きること だった
クエストも、悪役もなく、善も悪も、その間にあるあらゆるものが存在していた
こういう哲学をもう一度実現するスタジオが出てきてほしい。Minecraftが成功した理由も、こうした サンドボックス性 にあると思う
EverQuestやWoWも好きだったけれど、それほど 自由で生々しい感覚 はなかった
個人的にはThe Realmも最高のMMO候補として挙げたい
本当にすごい仕事だ。貢献グラフを見ると、本当に一人でやったのかと驚かされる
16年前に始まった Infantry Onlineサーバーエミュレーター プロジェクトに似た感じがする
SourceForgeの元コミットも見つけたけれど、あちらは10人以上の開発者が15年以上維持してきたプロジェクトだった
どうやって一人でここまで多くのことを成し遂げたのか気になる
Luaスクリプティングは Lilly.Engine ですでに実装経験があり、Codexがテストと機能実装を手伝ってくれた
データインポートはModernUOのロジックを参考にし、アイテムはPOLからスクリプトで取り込んだ
いったん没頭すると 執着に近いレベルで掘り下げる性格 だからこそできた
本当に素晴らしいプロジェクトだ。昔、C++ベースの UOエミュレーター UOX3 をメンテナンスしていたことがある
自分で開発したわけではないけれど、コミュニティ管理とリリースを担当していて、カナダの友人と一緒に個人サーバーも運営していた
Originが法的に問題視しなくてよかった
そのアカウントをeBayで数千ドルと MTG Mox Pearl で売ったのを覚えている
あの頃、UOXを通じてC++を学び、初めて プログラミングの力 を感じた
自作のModで無限につながるムーンゲートを配置できて、その体験が自分をプログラミングの道へ導いた
その後Pythonを学び、今のキャリアにつながった。本当に人生を変えた体験だった
(自己紹介リンク)
サーバー構造とスクリプティングのアプローチが興味深くて、今のプロジェクトにも影響を与えた
こうしたプロジェクトはUOエミュレーターの歴史の大きな一部を占めている
本当に 記憶がよみがえった。昔、Trinsicの近くに小さな家を買って、パン屋を営んでいた
NPC商人を雇って自分がいないときでも商品を売れたし、友人は塔を飾って暮らしていた
WoWが住宅システムを導入するまで20年かかったけれど、UOの住宅は 世界の中で生きている空間 だった
Moongateのアーキテクチャ分析記事を読んだけれど、Source GeneratorでDIを実装 し、LuaでC#の再コンパイルなしに動作を分離した構成が印象的だった
NPC AIがまだ入っていないとのことだけど、従来のFSMの代わりに LLMベースのマイクロサービス をLuaにつなぐのはどうだろう
NPCに文脈のある会話や記憶を持たせて、プレイヤーの入力に応じて実際のイベントをトリガーできる
すでにパケット層とLua環境がよく整っているので、統合もきれいにできそうだ。一緒に AIロジック設計 を考えてみたい
たとえば噂を尋ねると、その噂が実際にゲーム内の出来事として生まれるような形だ
MMOサーバーは時間が経つと構造が複雑になりがちだけれど、ネットワークとゲームロジックを分離した クリーンアーキテクチャ のアプローチが印象的だ
特に sectorベースのdelta sync で混雑した地域に入ったとき、どうやってパケットの集中送信を防いでいるのか気になる
NativeAOTを使っている理由も、単にデプロイのためなのか、それとも性能のためなのか知りたい
sectorに入ると周辺sectorのアイテムとモバイルを同期するが、すでに見えていたsectorは除外する
視界範囲を外れたアイテムはクライアント側で破棄されるため、再送が必要になる
パケット送信はキューで処理されるので、ゲームループがブロックされることはない
今後は 優先度付き送信とティック分散 を追加する予定だ
NativeAOTはデプロイ簡素化のためでもあるが、核心は 予測可能な性能 にある。JITの遅延がなく、一貫したティックタイミングを維持できる
自分も似たプロジェクトで frustumベースのスポーニング によってネットワークバーストを減らす実験をしているので興味深かった
コードが読みやすく、とても参考になる
偶然にも、Moongateが使っているLuaエンジン MoonSharp が最近また活発になってきた
10年ぶりに v3.0.0ベータリリース を出した
自分は元の作者ではないけれど、GitHubメンテナーとして参加していて、Tabletop Simulator でもこのエンジンが使われている
ぜひサーバーを一つ立ててみたい。15年前は SphereServer管理者 だったけれど、スクリプトもワールドデータも全部失ってしまった
それでも、もう一度昔のやり方で人々と クラシックなUOを楽しみたい
自分も昔はカスタムスクリプトをたくさん作っていたけれど、全部失ってしまった
SphereServerのおかげで初めて スクリプティングを学ぶきっかけ を得た
ロゴが本当に気に入った。進捗を見せる YouTube動画 があるのか気になる
動画はまだないが、現在はログイン、キャラクター作成、ワールド移動、Luaアイテムスクリプティング、Reactベースの管理UIなどが動いている
近いうちにREADMEへ短い デモ動画 を追加する予定だ
最近YouTubeで MajuularのUltimaシリーズ動画 を見て感銘を受けた
そのおかげでGOGでUnderworldとVIIを購入した。90年代の名作を見逃していた気分だ
兄はUOをたくさん遊んでいて、友人はSirDarkSpellという名前の 悪名高いグリーファー だった
二人ともこのプロジェクトを見たら本当に喜びそうだ。今週末はStygian Abyssにどっぷり浸かる予定