【Show HN】最新の.NET 10とLuaでUltima Onlineサーバーを完全再構築!「Moongate」公開
Show HN: Moongate – Ultima Online server emulator in .NET 10 with Lua scripting
Ultima Onlineのサーバーエミュレーターをゼロから現代的な設計で開発しています。まだ戦闘やスキルなどは実装中ですが、基盤が非常に堅牢に仕上がったため、早期公開することにしました。
現時点での主な機能:
- クラシックUOクライアント向けのフルパケット層対応(ログイン、移動、アイテム、NPCなどの操作)
- Luaスクリプティングによるアイテム動作の定義(ポーションの使用やドアの開閉など、C#を再コンパイルせずにLuaで制御可能)
- セクターごとの空間分割とデルタ同期(境界を越えた際にのみパケットを送信する最適化)
- MessagePackを使用したスナップショットベースの永続化
- ソースジェネレーターを活用したDI配線、パケットハンドラー登録、Luaモジュール露出の自動化
- NativeAOT対応(サーバーを単一のネイティブバイナリにコンパイル可能)
- 組み込みHTTP管理APIとReact製の管理UI
- マップスタティックデータからの自動ドア生成(ModernUO/RunUOと同等のアルゴリズムを採用)
使用技術:.NET 10, NativeAOT, NLua, MessagePack, DryIoc, Kestrel
今後の課題:戦闘システム、スキル、天候処理、NPC AIの実装。現在はアーキテクチャの構築に注力しており、後からシステムを追加してもコードの書き直しが発生しない設計にしています。
なぜModernUO/RunUOを使わないのか?:既存のプロジェクトは成熟しており実績も豊富ですが、今回はネットワークとドメインの完全分離、イベント駆動型のゲームループ、継承に頼りすぎないアイテム設計、そして再コンパイル不要なLuaでの高速なゲームロジック開発を実現したかったため、ゼロから書き直すことにしました。
GitHub: https://github.com/moongate-community/moongatev2