世界を動かす技術を、日本語で。

Show HN: Moongate – .NET 10でのLuaスクリプトを使用した「Ultima Online」サーバーエミュレーター

2026年3月6日原文(github.com)

概要

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 で参加表明・相談が可能
  • DiscordMatrix 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サーバー開発やアーキテクチャ設計に興味のある方 は、ぜひご参加ください。

Hackerたちの意見

あなたのロゴ、めっちゃ好きです!完成したものの進捗を見せるYouTubeチャンネルはありますか?

ありがとう!ロゴは偶然の産物なんだ。シンプルで、元のゲームのムーンゲートみたいな感じを出したかったんだよね。動画はあんまり得意じゃないけど、今のところ動いてるのは、ログインフロー、キャラクター作成、デルタセクター同期のワールド移動、マップの静的オブジェクトから自動生成されるドア(ちゃんと開くよ)、アイテムの動作に対するLuaスクリプト、スナップショットの永続性、サーバー管理用のReact管理UIだよ。いつかREADMEに短いデモのGIFか動画を追加するかもしれないけど、今はクローンして実行するのが一番の見方だね。

PvPGNのこと、覚えてるよ。まだ存在してると思うよ。https://github.com/D2GSE/pvpgn-server

UOは「一般人」プレイヤーがいる唯一のゲームだったな。多くのプレイヤーはスケールアップできなかったり、最高の装備を手に入れられなかったりしたけど、弱いプレイヤーでも楽しめるゲームだったから、みんな続けてた。すごく強いプレイヤーは有名人みたいだったし、今のゲームとは全然違うよね。今のゲームでは、プレイヤーがみんなマーベルのスーパーヒーローみたいに見えるし。

これは本当にいい観察だね。UOには本物の経済と社会的階層があった。力は自分で手に入れるものだったからね。漁師や仕立て屋として何ヶ月も過ごしても、意味のある体験ができた。フルプレートのグランドマスター剣士と、ブリタニアの銀行で魚を売ってる人とのギャップはすごく大きかったけど、どちらも楽しんでた。今のMMOは、みんな同じアトラクションに乗るテーマパークみたいなもので(課金で勝てる)、UOは自分の選んだことから役割が生まれる生きた世界だったんだ。クエストマーカーに次に行く場所を教えてもらうんじゃなくてね。

伝説の鍛冶屋になることがゲームの本質だった。クラフターにとって、クラフトがエンドゲームの状態だったんだ。生産された装備は最大耐久、最大ダメージ、最大防御力だった。お城の家具はどこかの誰かから来なきゃいけなかった。ゲームの目的はこのファンタジー世界で生きることで、クリアすることじゃなかった。クエストもなければ、敵もいない。ただ善と悪、そしてその間の人たちがいるだけ。スタジオがこれを心に留めて、またこんなものを作ってくれたらいいな。マインクラフトはこのサンドボックスの性質で爆発的に人気になったけど、プレイヤーにはシャベルとバケツを渡さないとね。

Haven and Hearthには「スプルースキャップ」と「隠者」がいるよね。このゲームのエリートは、グループで働くこと、孤立したプレイヤーに対して暴力を使うこと、自動化を使うことを厭わない人たちから生まれるんだ。15年間MMORPGには時間を費やしてないけど、普通のプレイヤーが憧れるような「排他的」なギルドはまだあるんじゃない?

UOは俺にとって最高のオンラインゲームだった。他のゲームはその影に隠れてる感じ。自由度が一番高くて、ゲーム化されてないところが魅力だった。EverquestやWorld of Warcraftも好きだけど、あれは俺には「生々しさ」が足りなかった。The Realmは、俺の中でのベストMMOのダークホースだね。(はいはい、Meridian 59やUnderlightもね)

このビジュアルに関しては共感できるな。>「現代のゲームとは全然違って、各プレイヤーがマーベルのスーパーヒーローのファンタジーバージョンみたいに見える」でも、これはほとんどのゲームに当てはまるんじゃない?>「UOは、俺が今までプレイした中で唯一「一般市民」のプレイヤーがいたゲームだった。多くのプレイヤーはスケールアップできなかったり、一流の装備を手に入れられなかった。」俺が思い浮かべてるのはPath of Exileかな。普通のプレイヤーとトップティアの間にはものすごい差があるよね。トップティアじゃなくても、熱心なプレイヤーとの違いも大きいし。ほとんどの人が一流の装備を持たないのは、ほぼ定義上そうだよね?

うん、これには本当に同意する。UOは「エンドゲームコンテンツ」を追い求めなかった。それが今のマルチプレイヤーゲームの厄介なところだと思う。デザイナーたちはみんなが最大レベルに達して、最終的にはみんな同じになることを期待してるから。

当時の俺の好みは、家に忍び込んだり、盗んだり、無防備な人を襲ったりすることだったな(特に墓地やダンジョン、鉱山で)。戦闘前に誰かのバッグから攻撃魔法の材料を盗むのは、質の高いインタラクションがたくさんあった。UOがトラメルを導入した日は悲しかったよ。

UOをプレイする喜びを追い続けるつもりだ。仕事を辞めて24時間プレイしたい!

Hacker Newsで議論の続きを見る