2 ポイント 投稿者 GN⁺ 2026-03-08 | 1件のコメント | WhatsAppで共有
  • 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倍の高速化を示す
  • SpatialWorldServiceItemServiceなど、ゲーム中核経路の処理効率が詳細に測定されている

デプロイと実行

  • .NET SDK 10.0.xが必要
  • 基本的な実行手順:
    dotnet restore
    dotnet build
    dotnet run --project src/Moongate.Server
    
  • **環境変数ベースの設定(MOONGATE_*)**により、HTTPポート、ゲームループ、メール、スクリプティングなどの詳細設定を制御可能
  • Docker Composeの例が提供されており、デフォルトポートは2593(ゲーム)と8088(HTTP)

ライセンスと貢献

技術的特徴の要約

  • C# + .NET 10 + NativeAOTベースのMMOサーバーフレームワーク
  • Luaスクリプト統合MessagePack永続化Prometheus/Grafanaモニタリングをサポート
  • Dockerデプロイおよび自動化スクリプトを含む
  • 高性能、モジュール型、テスト重視の設計により、現代的なサーバー開発に適した構造

1件のコメント

 
GN⁺ 2026-03-08
Hacker Newsのコメント
  • 自分がプレイしてきたゲームの中で、UO(Ultima Online) ほど「一般市民」プレイヤーが存在していたゲームはなかった
    強力な装備を手に入れられない人でも楽しく遊べたし、最上位プレイヤーたちはまるで 有名人 のように知られていた
    今のゲームのように全員がスーパーヒーローに見える世界とはまったく違っていた

    • 本当にその通り。UOには本物の 経済と社会階層 が存在していた
      漁師や仕立て屋として何か月も過ごしても十分に意味のある体験ができたし、強力な戦士と普通の商人が同じ世界でそれぞれの楽しみを見つけていた
      今のMMOはみんなが同じアトラクションに乗るテーマパークみたいだけど、UOはプレイヤーの選択で役割が形作られる 生きた世界 だった
    • 伝説の鍛冶屋になるのが目標だった。生産こそがエンドゲームで、あらゆる装備や家具は誰かの手から生まれていた
      ゲームの目的は世界に「勝つ」ことではなく、その中で 生きること だった
      クエストも、悪役もなく、善も悪も、その間にあるあらゆるものが存在していた
      こういう哲学をもう一度実現するスタジオが出てきてほしい。Minecraftが成功した理由も、こうした サンドボックス性 にあると思う
    • UOは自分が体験した中で最高のオンラインゲームだった。他のゲームはその影に立っている
      EverQuestやWoWも好きだったけれど、それほど 自由で生々しい感覚 はなかった
      個人的にはThe Realmも最高のMMO候補として挙げたい
    • むしろ今よりもずっと 現代的な感性 があったように思う。Stardew ValleyやAnimal Crossingが好きな理由も近い
    • UOをプレイしていたあの 純粋な楽しさ を一生追い続ける気がする。今からでも仕事を辞めて一日中やりたい
  • 本当にすごい仕事だ。貢献グラフを見ると、本当に一人でやったのかと驚かされる
    16年前に始まった Infantry Onlineサーバーエミュレーター プロジェクトに似た感じがする
    SourceForgeの元コミットも見つけたけれど、あちらは10人以上の開発者が15年以上維持してきたプロジェクトだった
    どうやって一人でここまで多くのことを成し遂げたのか気になる

    • 最初の試みだった MoongatePrima からインフラを流用して、素早く土台を作った
      Luaスクリプティングは Lilly.Engine ですでに実装経験があり、Codexがテストと機能実装を手伝ってくれた
      データインポートはModernUOのロジックを参考にし、アイテムはPOLからスクリプトで取り込んだ
      いったん没頭すると 執着に近いレベルで掘り下げる性格 だからこそできた
    • Webフロントエンドは全部CodexがReactで開発した。自分は フロントエンド開発が嫌い なんだ
  • 本当に素晴らしいプロジェクトだ。昔、C++ベースの UOエミュレーター UOX3 をメンテナンスしていたことがある
    自分で開発したわけではないけれど、コミュニティ管理とリリースを担当していて、カナダの友人と一緒に個人サーバーも運営していた
    Originが法的に問題視しなくてよかった

    • 高校生のときにUOをやっていて、中毒だと感じてアカウントを売ってやめた
      そのアカウントをeBayで数千ドルと MTG Mox Pearl で売ったのを覚えている
      あの頃、UOXを通じてC++を学び、初めて プログラミングの力 を感じた
      自作のModで無限につながるムーンゲートを配置できて、その体験が自分をプログラミングの道へ導いた
      その後Pythonを学び、今のキャリアにつながった。本当に人生を変えた体験だった
      (自己紹介リンク)
    • それはうれしい話だね! 実は UOX3はMoongateの着想源 のひとつだった
      サーバー構造とスクリプティングのアプローチが興味深くて、今のプロジェクトにも影響を与えた
      こうしたプロジェクトはUOエミュレーターの歴史の大きな一部を占めている
  • 本当に 記憶がよみがえった。昔、Trinsicの近くに小さな家を買って、パン屋を営んでいた
    NPC商人を雇って自分がいないときでも商品を売れたし、友人は塔を飾って暮らしていた
    WoWが住宅システムを導入するまで20年かかったけれど、UOの住宅は 世界の中で生きている空間 だった

  • Moongateのアーキテクチャ分析記事を読んだけれど、Source GeneratorでDIを実装 し、LuaでC#の再コンパイルなしに動作を分離した構成が印象的だった
    NPC AIがまだ入っていないとのことだけど、従来のFSMの代わりに LLMベースのマイクロサービス をLuaにつなぐのはどうだろう
    NPCに文脈のある会話や記憶を持たせて、プレイヤーの入力に応じて実際のイベントをトリガーできる
    すでにパケット層とLua環境がよく整っているので、統合もきれいにできそうだ。一緒に AIロジック設計 を考えてみたい

    • すごく面白いアイデアだ。NPC会話が 世界そのものを変えるシステム に発展するかもしれない
      たとえば噂を尋ねると、その噂が実際にゲーム内の出来事として生まれるような形だ
    • 興味ある。GitHubで連絡してほしい
  • MMOサーバーは時間が経つと構造が複雑になりがちだけれど、ネットワークとゲームロジックを分離した クリーンアーキテクチャ のアプローチが印象的だ
    特に sectorベースのdelta sync で混雑した地域に入ったとき、どうやってパケットの集中送信を防いでいるのか気になる
    NativeAOTを使っている理由も、単にデプロイのためなのか、それとも性能のためなのか知りたい

    • 主な動機はまさにそこだった。古いUOのコードベースはネットワーク・保存・ロジックが絡み合っていたので、.NETベースの新しいアプローチ を試した
      sectorに入ると周辺sectorのアイテムとモバイルを同期するが、すでに見えていたsectorは除外する
      視界範囲を外れたアイテムはクライアント側で破棄されるため、再送が必要になる
      パケット送信はキューで処理されるので、ゲームループがブロックされることはない
      今後は 優先度付き送信とティック分散 を追加する予定だ
      NativeAOTはデプロイ簡素化のためでもあるが、核心は 予測可能な性能 にある。JITの遅延がなく、一貫したティックタイミングを維持できる
    • パケット集中送信の防止は、根本的にはproximityローディングに依存しているように見える
      自分も似たプロジェクトで frustumベースのスポーニング によってネットワークバーストを減らす実験をしているので興味深かった
      コードが読みやすく、とても参考になる
  • 偶然にも、Moongateが使っているLuaエンジン MoonSharp が最近また活発になってきた
    10年ぶりに v3.0.0ベータリリース を出した
    自分は元の作者ではないけれど、GitHubメンテナーとして参加していて、Tabletop Simulator でもこのエンジンが使われている

  • ぜひサーバーを一つ立ててみたい。15年前は SphereServer管理者 だったけれど、スクリプトもワールドデータも全部失ってしまった
    それでも、もう一度昔のやり方で人々と クラシックなUOを楽しみたい

    • ここでSphereServerの名前を見るとは思わなかった!
      自分も昔はカスタムスクリプトをたくさん作っていたけれど、全部失ってしまった
      SphereServerのおかげで初めて スクリプティングを学ぶきっかけ を得た
  • ロゴが本当に気に入った。進捗を見せる YouTube動画 があるのか気になる

    • ありがとう! ロゴは偶然生まれたものだけれど、原作の Moongateらしさ を込めたかった
      動画はまだないが、現在はログイン、キャラクター作成、ワールド移動、Luaアイテムスクリプティング、Reactベースの管理UIなどが動いている
      近いうちにREADMEへ短い デモ動画 を追加する予定だ
  • 最近YouTubeで MajuularのUltimaシリーズ動画 を見て感銘を受けた
    そのおかげでGOGでUnderworldとVIIを購入した。90年代の名作を見逃していた気分だ
    兄はUOをたくさん遊んでいて、友人はSirDarkSpellという名前の 悪名高いグリーファー だった
    二人ともこのプロジェクトを見たら本当に喜びそうだ。今週末はStygian Abyssにどっぷり浸かる予定

    • Ultima Underworldは素晴らしいゲーム