Miu2D:生の WebGL で作られた17.6万行の2D ARPGエンジン
このプロジェクトは「Miu2D is a 2D RPG game engine built with Rust + TypeScript + React + Canvas, designed for the Web platform. 2/ / .」を基盤として、実践的に使えるオープンソース実装を提供し、再利用可能なツールチェーンと統合手段を備えています。
ひと目でわかる
- これは何?
- TypeScript と Rust で書かれたエンジンで、3本の金山武侠リメイクをブラウザで動作させる。ゲームフレームワークに依存しない。
- 誰に向いている?
- Miu2D はファンメイドの学習プロジェクトです。エンジンのソースコードは MIT ライセンスですが、画像、音声、マップ、スクリプトなどのゲームリソースはライセンスの対象外で、元の権利者である金山(西山居)に帰属します。
- 商用利用できる?
- できます。MIT は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
- 今もメンテナンスされている?
- されています。最後のコミットは 10 日前です。
- 何の言語で書かれている?
- 主に TypeScript です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月14日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
生の WebGL、ゲームフレームワークなし
Miu2D は TypeScript と Rust で書かれた 2D ARPG エンジンで、レンダリング層は WebGLRenderingContext を直接呼び出します。README によると、エンジンは約17.6万行で、Unity、Godot、Phaser、PixiJS などのゲームフレームワークを意図的に使っていません。スプライトのバッチ処理、A* 経路探索、バイナリ形式デコーダ、スクリプトVM、天候パーティクル、画面エフェクトなどの各サブシステムは、第一原理から実装されています。また、このプロジェクトは初日から AI 支援プログラミングを用いており、「Vibe Coding」というラベルを付けています。 実行日時、版、環境、入力識別子、出力要約、警告を記録し、再現不能な結果は成功例として扱いません。 Miu2D は TypeScript と Rust で書かれた 2D ARPG エンジンで、レンダリング層は WebGLRenderingContext を直接呼び出します。README によると、エンジンは約17.6万行で、Unity、Godot、Phaser、PixiJS などのゲームフレームワークを意図的に使っていません。スプライトのバッチ処理、A* 経路探索、バイナリ形式デコーダ、スクリプトVM、天候パーティクル、画面エフェクトなどの各サブシステムは、第一原理から実装されています。また、このプロジェクトは初日から AI 支援プログラミングを用いており、「Vibe Coding」というラベルを付けています。 実行日時、版、環境、入力識別子、出力要約、警告を記録し、再現不能な結果は成功例として扱いません。 Miu2D は TypeScript と Rust で書かれた 2D ARPG エンジンで、レンダリング層は WebGLRenderingContext を直接呼び出します。README によると、エンジンは約17.6万行で、Unity、Godot、Phaser、PixiJS などのゲームフレームワークを意図的に使っていません。スプライトのバッチ処理、A* 経路探索、バイナリ形式デコーダ、スクリプトVM、天候パーティクル、画面エフェクトなどの各サブシステムは、第一原理から実装されています。また、このプロジェクトは初日から AI 支援プログラミングを用いており、「Vibe Coding」というラベルを付けています。 実行日時、版、環境、入力識別子、出力要約、警告を記録し、再現不能な結果は成功例として扱いません。 Miu2D は TypeScript と Rust で書かれた 2D ARPG エンジンで、レンダリング層は WebGLRenderingContext を直接呼び出します。README によると、エンジンは約17.6万行で、Unity、Godot、Phaser、PixiJS などのゲームフレームワークを意図的に使っていません。スプライトのバッチ処理、A* 経路探索、バイナリ形式デコーダ、スクリプトVM、天候パーティクル、画面エフェクトなどの各サブシステムは、第一原理から実装されています。また、このプロジェクトは初日から AI 支援プログラミングを用いており、「Vibe Coding」というラベルを付けています。 実行日時、版、環境、入力識別子、出力要約、警告を記録し、再現不能な結果は成功例として扱いません。
コンセプト実証としての3本の金山武侠ゲーム
実証として、Miu2D は西山居(金山)のクラシックなアクション RPG 3本をブラウザ上で再現し、完全にプレイ可能としています。『月影伝説』(2001)は当時西山居が手がけた最大規模のプロダクションで、7つ以上のエンディング、100以上のストーリーイベント、30人チーム、14か月の開発期間があったと説明されています。『剣侠情縁2』(1998)はディアブロ風のリアルタイム戦闘を導入し、200以上のNPC、640×480 の16ビットカラー、謝雨欣によるテーマ曲を特徴とします。『新剣侠情縁』(2001)は1997年のオリジナルのリメイクで、マップ数を110以上に拡張し、『剣侠情縁2』のリアルタイム戦闘エンジンを使用しています。README にはこれらのゲームのダウンロードサイズやフレームレートの記載はありません。 実証として、Miu2D は西山居(金山)のクラシックなアクション RPG 3本をブラウザ上で再現し、完全にプレイ可能としています。『月影伝説』(2001)は当時西山居が手がけた最大規模のプロダクションで、7つ以上のエンディング、100以上のストーリーイベント、30人チーム、14か月の開発期間があったと説明されています。『剣侠情縁2』(1998)はディアブロ風のリアルタイム戦闘を導入し、200以上のNPC、640×480 の16ビットカラー、謝雨欣によるテーマ曲を特徴とします。『新剣侠情縁』(2001)は1997年のオリジナルのリメイクで、マップ数を110以上に拡張し、『剣侠情縁2』のリアルタイム戦闘エンジンを使用しています。README にはこれらのゲームのダウンロードサイズやフレームレートの記載はありません。 実証として、Miu2D は西山居(金山)のクラシックなアクション RPG 3本をブラウザ上で再現し、完全にプレイ可能としています。『月影伝説』(2001)は当時西山居が手がけた最大規模のプロダクションで、7つ以上のエンディング、100以上のストーリーイベント、30人チーム、14か月の開発期間があったと説明されています。『剣侠情縁2』(1998)はディアブロ風のリアルタイム戦闘を導入し、200以上のNPC、640×480 の16ビットカラー、謝雨欣によるテーマ曲を特徴とします。『新剣侠情縁』(2001)は1997年のオリジナルのリメイクで、マップ数を110以上に拡張し、『剣侠情縁2』のリアルタイム戦闘エンジンを使用しています。README にはこれらのゲームのダウンロードサイズやフレームレートの記載はありません。 実証として、Miu2D は西山居(金山)のクラシックなアクション RPG 3本をブラウザ上で再現し、完全にプレイ可能としています。『月影伝説』(2001)は当時西山居が手がけた最大規模のプロダクションで、7つ以上のエンディング、100以上のストーリーイベント、30人チーム、14か月の開発期間があったと説明されています。『剣侠情縁2』(1998)はディアブロ風のリアルタイム戦闘を導入し、200以上のNPC、640×480 の16ビットカラー、謝雨欣によるテーマ曲を特徴とします。『新剣侠情縁』(2001)は1997年のオリジナルのリメイクで、マップ数を110以上に拡張し、『剣侠情縁2』のリアルタイム戦闘エンジンを使用しています。README にはこれらのゲームのダウンロードサイズやフレームレートの記載はありません。
pnpm monorepo 内の11パッケージ
リポジトリは pnpm ワークスペースとして構成され、11のパッケージがあります。エンジンパッケージ @miu2d/engine は純粋な TypeScript で、215ファイル、19モジュールから成り、React に依存しません。ゲームランタイム @miu2d/game は React 19 を使用し、Classic、Modern、Mobile の3つのUIテーマを提供します。WASM パッケージ @miu2d/engine-wasm は Rust を WebAssembly にコンパイルしたもので、A* 経路探索、デコーダ、空間ハッシュ、zstd 圧縮を担います。バックエンドの @miu2d/server は Hono、tRPC、Prisma ORM で構成され、21の PostgreSQL テーブルと19のルーターがあります。dashboard パッケージは VS Code 風のエディタで、13の編集モジュールを提供します。残りのパッケージは、型、Webアプリのシェル、コンバータ、ビューア、UIコンポーネント、共有のi18n/コンテキストコードをカバーしています。 リポジトリは pnpm ワークスペースとして構成され、11のパッケージがあります。エンジンパッケージ @miu2d/engine は純粋な TypeScript で、215ファイル、19モジュールから成り、React に依存しません。ゲームランタイム @miu2d/game は React 19 を使用し、Classic、Modern、Mobile の3つのUIテーマを提供します。WASM パッケージ @miu2d/engine-wasm は Rust を WebAssembly にコンパイルしたもので、A* 経路探索、デコーダ、空間ハッシュ、zstd 圧縮を担います。バックエンドの @miu2d/server は Hono、tRPC、Prisma ORM で構成され、21の PostgreSQL テーブルと19のルーターがあります。dashboard パッケージは VS Code 風のエディタで、13の編集モジュールを提供します。残りのパッケージは、型、Webアプリのシェル、コンバータ、ビューア、UIコンポーネント、共有のi18n/コンテキストコードをカバーしています。 リポジトリは pnpm ワークスペースとして構成され、11のパッケージがあります。エンジンパッケージ @miu2d/engine は純粋な TypeScript で、215ファイル、19モジュールから成り、React に依存しません。ゲームランタイム @miu2d/game は React 19 を使用し、Classic、Modern、Mobile の3つのUIテーマを提供します。WASM パッケージ @miu2d/engine-wasm は Rust を WebAssembly にコンパイルしたもので、A* 経路探索、デコーダ、空間ハッシュ、zstd 圧縮を担います。バックエンドの @miu2d/server は Hono、tRPC、Prisma ORM で構成され、21の PostgreSQL テーブルと19のルーターがあります。dashboard パッケージは VS Code 風のエディタで、13の編集モジュールを提供します。残りのパッケージは、型、Webアプリのシェル、コンバータ、ビューア、UIコンポーネント、共有のi18n/コンテキストコードをカバーしています。 リポジトリは pnpm ワークスペースとして構成され、11のパッケージがあります。エンジンパッケージ @miu2d/engine は純粋な TypeScript で、215ファイル、19モジュールから成り、React に依存しません。ゲームランタイム @miu2d/game は React 19 を使用し、Classic、Modern、Mobile の3つのUIテーマを提供します。WASM パッケージ @miu2d/engine-wasm は Rust を WebAssembly にコンパイルしたもので、A* 経路探索、デコーダ、空間ハッシュ、zstd 圧縮を担います。バックエンドの @miu2d/server は Hono、tRPC、Prisma ORM で構成され、21の PostgreSQL テーブルと19のルーターがあります。dashboard パッケージは VS Code 風のエディタで、13の編集モジュールを提供します。残りのパッケージは、型、Webアプリのシェル、コンバータ、ビューア、UIコンポーネント、共有のi18n/コンテキストコードをカバーしています。
レンダラー:バッチ処理、フォールバック、ライティング
レンダラーは WebGLRenderingContext を直接使用します。SpriteBatcher は頂点データを蓄積し、テクスチャ変更ごとにフラッシュすることで、典型的なマップフレームの約4800タイルを1〜5回の描画呼び出しに減らします。RectBatcher は天候パーティクルとUI矩形を1回の呼び出しにまとめます。テクスチャ管理では ImageData を WebGLTexture に変換し、WeakMap でキャッシュし、FinalizationRegistry で自動的にクリーンアップします。GLSL フラグメントシェーダーは、毒、凍結、石化の状態に色フィルタを適用し、レンダーループはフェード、フラッシュ、水の波紋などの画面効果を合成します。Canvas 2D フォールバックは同じ Renderer インターフェースを実装し、WebGL がないデバイスでも全機能を提供します。ローカルライティングは発光エンティティの加算グローマスクを使用し、JxqyHD プロジェクトの C++ リファレンスに合わせて、魔法の移動タイプごとに特定のサブプロジェクタイル発光パターンを持ちます。 レンダラーは WebGLRenderingContext を直接使用します。SpriteBatcher は頂点データを蓄積し、テクスチャ変更ごとにフラッシュすることで、典型的なマップフレームの約4800タイルを1〜5回の描画呼び出しに減らします。RectBatcher は天候パーティクルとUI矩形を1回の呼び出しにまとめます。テクスチャ管理では ImageData を WebGLTexture に変換し、WeakMap でキャッシュし、FinalizationRegistry で自動的にクリーンアップします。GLSL フラグメントシェーダーは、毒、凍結、石化の状態に色フィルタを適用し、レンダーループはフェード、フラッシュ、水の波紋などの画面効果を合成します。Canvas 2D フォールバックは同じ Renderer インターフェースを実装し、WebGL がないデバイスでも全機能を提供します。ローカルライティングは発光エンティティの加算グローマスクを使用し、JxqyHD プロジェクトの C++ リファレンスに合わせて、魔法の移動タイプごとに特定のサブプロジェクタイル発光パターンを持ちます。 レンダラーは WebGLRenderingContext を直接使用します。SpriteBatcher は頂点データを蓄積し、テクスチャ変更ごとにフラッシュすることで、典型的なマップフレームの約4800タイルを1〜5回の描画呼び出しに減らします。RectBatcher は天候パーティクルとUI矩形を1回の呼び出しにまとめます。テクスチャ管理では ImageData を WebGLTexture に変換し、WeakMap でキャッシュし、FinalizationRegistry で自動的にクリーンアップします。GLSL フラグメントシェーダーは、毒、凍結、石化の状態に色フィルタを適用し、レンダーループはフェード、フラッシュ、水の波紋などの画面効果を合成します。Canvas 2D フォールバックは同じ Renderer インターフェースを実装し、WebGL がないデバイスでも全機能を提供します。ローカルライティングは発光エンティティの加算グローマスクを使用し、JxqyHD プロジェクトの C++ リファレンスに合わせて、魔法の移動タイプごとに特定のサブプロジェクタイル発光パターンを持ちます。 レンダラーは WebGLRenderingContext を直接使用します。SpriteBatcher は頂点データを蓄積し、テクスチャ変更ごとにフラッシュすることで、典型的なマップフレームの約4800タイルを1〜5回の描画呼び出しに減らします。RectBatcher は天候パーティクルとUI矩形を1回の呼び出しにまとめます。テクスチャ管理では ImageData を WebGLTexture に変換し、WeakMap でキャッシュし、FinalizationRegistry で自動的にクリーンアップします。GLSL フラグメントシェーダーは、毒、凍結、石化の状態に色フィルタを適用し、レンダーループはフェード、フラッシュ、水の波紋などの画面効果を合成します。Canvas 2D フォールバックは同じ Renderer インターフェースを実装し、WebGL がないデバイスでも全機能を提供します。ローカルライティングは発光エンティティの加算グローマスクを使用し、JxqyHD プロジェクトの C++ リファレンスに合わせて、魔法の移動タイプごとに特定のサブプロジェクタイル発光パターンを持ちます。
スクリプト:独自DSLとLua 5.4
Miu2D には同じ GameAPI を共有する2つのスクリプトモードがあります。DSL モードはカスタムパーサーで .txt と .npc ファイルを解析し、非同期エグゼキュータで実行します。README は218のコマンドを9カテゴリ(ダイアログ、プレイヤー、NPC、ゲーム状態、オーディオ、エフェクト、オブジェクト、アイテム、その他)にわたって列挙しています。Lua モードは wasmoon を介して完全な Lua 5.4 ランタイムを埋め込みます。wasmoon は Lua を WASM にコンパイルします。170の GameAPI 関数はすべて PascalCase のグローバル変数として公開され、wasmoon のプロキシシステムが JavaScript の非同期関数を Lua コルーチンに橋渡しするため、PlayerWalkTo() や Talk() などのブロッキング操作は明示的な await なしで動作します。同じ ScriptExecutor がファイル拡張子でルーティングし、.lua は Lua エグゼキュータ、.txt と .npc は DSL エグゼキュータに渡します。README のサンプル Lua スクリプトはマップをロードし、プレイヤー位置を設定し、ダイアログを再生し、クエストに参加するかどうかを尋ねて魔法と経験値を追加します。 Miu2D には同じ GameAPI を共有する2つのスクリプトモードがあります。DSL モードはカスタムパーサーで .txt と .npc ファイルを解析し、非同期エグゼキュータで実行します。README は218のコマンドを9カテゴリ(ダイアログ、プレイヤー、NPC、ゲーム状態、オーディオ、エフェクト、オブジェクト、アイテム、その他)にわたって列挙しています。Lua モードは wasmoon を介して完全な Lua 5.4 ランタイムを埋め込みます。wasmoon は Lua を WASM にコンパイルします。170の GameAPI 関数はすべて PascalCase のグローバル変数として公開され、wasmoon のプロキシシステムが JavaScript の非同期関数を Lua コルーチンに橋渡しするため、PlayerWalkTo() や Talk() などのブロッキング操作は明示的な await なしで動作します。同じ ScriptExecutor がファイル拡張子でルーティングし、.lua は Lua エグゼキュータ、.txt と .npc は DSL エグゼキュータに渡します。README のサンプル Lua スクリプトはマップをロードし、プレイヤー位置を設定し、ダイアログを再生し、クエストに参加するかどうかを尋ねて魔法と経験値を追加します。 Miu2D には同じ GameAPI を共有する2つのスクリプトモードがあります。DSL モードはカスタムパーサーで .txt と .npc ファイルを解析し、非同期エグゼキュータで実行します。README は218のコマンドを9カテゴリ(ダイアログ、プレイヤー、NPC、ゲーム状態、オーディオ、エフェクト、オブジェクト、アイテム、その他)にわたって列挙しています。Lua モードは wasmoon を介して完全な Lua 5.4 ランタイムを埋め込みます。wasmoon は Lua を WASM にコンパイルします。170の GameAPI 関数はすべて PascalCase のグローバル変数として公開され、wasmoon のプロキシシステムが JavaScript の非同期関数を Lua コルーチンに橋渡しするため、PlayerWalkTo() や Talk() などのブロッキング操作は明示的な await なしで動作します。同じ ScriptExecutor がファイル拡張子でルーティングし、.lua は Lua エグゼキュータ、.txt と .npc は DSL エグゼキュータに渡します。README のサンプル Lua スクリプトはマップをロードし、プレイヤー位置を設定し、ダイアログを再生し、クエストに参加するかどうかを尋ねて魔法と経験値を追加します。 Miu2D には同じ GameAPI を共有する2つのスクリプトモードがあります。DSL モードはカスタムパーサーで .txt と .npc ファイルを解析し、非同期エグゼキュータで実行します。README は218のコマンドを9カテゴリ(ダイアログ、プレイヤー、NPC、ゲーム状態、オーディオ、エフェクト、オブジェクト、アイテム、その他)にわたって列挙しています。Lua モードは wasmoon を介して完全な Lua 5.4 ランタイムを埋め込みます。wasmoon は Lua を WASM にコンパイルします。170の GameAPI 関数はすべて PascalCase のグローバル変数として公開され、wasmoon のプロキシシステムが JavaScript の非同期関数を Lua コルーチンに橋渡しするため、PlayerWalkTo() や Talk() などのブロッキング操作は明示的な await なしで動作します。同じ ScriptExecutor がファイル拡張子でルーティングし、.lua は Lua エグゼキュータ、.txt と .npc は DSL エグゼキュータに渡します。README のサンプル Lua スクリプトはマップをロードし、プレイヤー位置を設定し、ダイアログを再生し、クエストに参加するかどうかを尋ねて魔法と経験値を追加します。
経路探索、バイナリデコーダ、天候
A* 経路探索は Rust で書かれ、WebAssembly にコンパイルされています。障害物ビットマップを Uint8Array ビューで WASM リニアメモリに直接書き込み、その場で A* を実行し、結果を Int32Array ポインタビューで読み取るため、シリアライズやコピーが発生しません。README は5つの経路戦略(貪欲から完全な A* まで、最大反復回数設定可能)を報告し、典型的なクエリは約0.2ミリ秒で、同等の TypeScript 実装より約10倍高速です。エンジンはオリジナルゲームの8つのバイナリ形式(ASF、MPC、MAP、SHD、XNB、MSF、MMF、INI/OBJ)をデコードし、MSF と MMF はカスタム zstd 圧縮を使用します。天候システムは、風に流される雨と飛沫と稲妻、画面の水滴の屈折レンズ効果、揺れ、回転、漂い、徐々に溶ける雪をシミュレートします。README は性能数値に対応する具体的なハードウェアやブラウザバージョンを指定していません。 A* 経路探索は Rust で書かれ、WebAssembly にコンパイルされています。障害物ビットマップを Uint8Array ビューで WASM リニアメモリに直接書き込み、その場で A* を実行し、結果を Int32Array ポインタビューで読み取るため、シリアライズやコピーが発生しません。README は5つの経路戦略(貪欲から完全な A* まで、最大反復回数設定可能)を報告し、典型的なクエリは約0.2ミリ秒で、同等の TypeScript 実装より約10倍高速です。エンジンはオリジナルゲームの8つのバイナリ形式(ASF、MPC、MAP、SHD、XNB、MSF、MMF、INI/OBJ)をデコードし、MSF と MMF はカスタム zstd 圧縮を使用します。天候システムは、風に流される雨と飛沫と稲妻、画面の水滴の屈折レンズ効果、揺れ、回転、漂い、徐々に溶ける雪をシミュレートします。README は性能数値に対応する具体的なハードウェアやブラウザバージョンを指定していません。 A* 経路探索は Rust で書かれ、WebAssembly にコンパイルされています。障害物ビットマップを Uint8Array ビューで WASM リニアメモリに直接書き込み、その場で A* を実行し、結果を Int32Array ポインタビューで読み取るため、シリアライズやコピーが発生しません。README は5つの経路戦略(貪欲から完全な A* まで、最大反復回数設定可能)を報告し、典型的なクエリは約0.2ミリ秒で、同等の TypeScript 実装より約10倍高速です。エンジンはオリジナルゲームの8つのバイナリ形式(ASF、MPC、MAP、SHD、XNB、MSF、MMF、INI/OBJ)をデコードし、MSF と MMF はカスタム zstd 圧縮を使用します。天候システムは、風に流される雨と飛沫と稲妻、画面の水滴の屈折レンズ効果、揺れ、回転、漂い、徐々に溶ける雪をシミュレートします。README は性能数値に対応する具体的なハードウェアやブラウザバージョンを指定していません。 A* 経路探索は Rust で書かれ、WebAssembly にコンパイルされています。障害物ビットマップを Uint8Array ビューで WASM リニアメモリに直接書き込み、その場で A* を実行し、結果を Int32Array ポインタビューで読み取るため、シリアライズやコピーが発生しません。README は5つの経路戦略(貪欲から完全な A* まで、最大反復回数設定可能)を報告し、典型的なクエリは約0.2ミリ秒で、同等の TypeScript 実装より約10倍高速です。エンジンはオリジナルゲームの8つのバイナリ形式(ASF、MPC、MAP、SHD、XNB、MSF、MMF、INI/OBJ)をデコードし、MSF と MMF はカスタム zstd 圧縮を使用します。天候システムは、風に流される雨と飛沫と稲妻、画面の水滴の屈折レンズ効果、揺れ、回転、漂い、徐々に溶ける雪をシミュレートします。README は性能数値に対応する具体的なハードウェアやブラウザバージョンを指定していません。
エディタ、操作、デプロイ
リポジトリには VS Code スタイルのゲームデータエディタが同梱されており、13のモジュールが魔法、NPC、シーン、アイテム、ショップ、ダイアログ、プレイヤー、レベル、ゲーム設定、ファイルマネージャ、リソース、統計をカバーしています。デスクトップ操作は、左クリックで移動またはインタラクト、右クリックで代替インタラクト、Ctrl+左クリックでその場攻撃、Q と E で最寄りのオブジェクトまたは NPC とインタラクト、A/S/D/F/G で魔法スロット、Z/X/C でアイテムクイックスロット、V で座る/修行を切り替えます。モバイルはバーチャルジョイスティックで移動し、タップでインタラクトします。デプロイについて、README はフロントエンドを Vercel で静的 SPA として、フルスタックを Docker Compose で PostgreSQL、MinIO、Hono、Nginx を使って構成すると説明しています。また、pnpm dev、make dev、make tsc、pnpm lint、make test、make convert などのコマンドを挙げ、Node.js 18+ と pnpm 9+ を要件としています。 リポジトリには VS Code スタイルのゲームデータエディタが同梱されており、13のモジュールが魔法、NPC、シーン、アイテム、ショップ、ダイアログ、プレイヤー、レベル、ゲーム設定、ファイルマネージャ、リソース、統計をカバーしています。デスクトップ操作は、左クリックで移動またはインタラクト、右クリックで代替インタラクト、Ctrl+左クリックでその場攻撃、Q と E で最寄りのオブジェクトまたは NPC とインタラクト、A/S/D/F/G で魔法スロット、Z/X/C でアイテムクイックスロット、V で座る/修行を切り替えます。モバイルはバーチャルジョイスティックで移動し、タップでインタラクトします。デプロイについて、README はフロントエンドを Vercel で静的 SPA として、フルスタックを Docker Compose で PostgreSQL、MinIO、Hono、Nginx を使って構成すると説明しています。また、pnpm dev、make dev、make tsc、pnpm lint、make test、make convert などのコマンドを挙げ、Node.js 18+ と pnpm 9+ を要件としています。 リポジトリには VS Code スタイルのゲームデータエディタが同梱されており、13のモジュールが魔法、NPC、シーン、アイテム、ショップ、ダイアログ、プレイヤー、レベル、ゲーム設定、ファイルマネージャ、リソース、統計をカバーしています。デスクトップ操作は、左クリックで移動またはインタラクト、右クリックで代替インタラクト、Ctrl+左クリックでその場攻撃、Q と E で最寄りのオブジェクトまたは NPC とインタラクト、A/S/D/F/G で魔法スロット、Z/X/C でアイテムクイックスロット、V で座る/修行を切り替えます。モバイルはバーチャルジョイスティックで移動し、タップでインタラクトします。デプロイについて、README はフロントエンドを Vercel で静的 SPA として、フルスタックを Docker Compose で PostgreSQL、MinIO、Hono、Nginx を使って構成すると説明しています。また、pnpm dev、make dev、make tsc、pnpm lint、make test、make convert などのコマンドを挙げ、Node.js 18+ と pnpm 9+ を要件としています。 リポジトリには VS Code スタイルのゲームデータエディタが同梱されており、13のモジュールが魔法、NPC、シーン、アイテム、ショップ、ダイアログ、プレイヤー、レベル、ゲーム設定、ファイルマネージャ、リソース、統計をカバーしています。デスクトップ操作は、左クリックで移動またはインタラクト、右クリックで代替インタラクト、Ctrl+左クリックでその場攻撃、Q と E で最寄りのオブジェクトまたは NPC とインタラクト、A/S/D/F/G で魔法スロット、Z/X/C でアイテムクイックスロット、V で座る/修行を切り替えます。モバイルはバーチャルジョイスティックで移動し、タップでインタラクトします。デプロイについて、README はフロントエンドを Vercel で静的 SPA として、フルスタックを Docker Compose で PostgreSQL、MinIO、Hono、Nginx を使って構成すると説明しています。また、pnpm dev、make dev、make tsc、pnpm lint、make test、make convert などのコマンドを挙げ、Node.js 18+ と pnpm 9+ を要件としています。
編集部の結論
Miu2D はファンメイドの学習プロジェクトです。エンジンのソースコードは MIT ライセンスですが、画像、音声、マップ、スクリプトなどのゲームリソースはライセンスの対象外で、元の権利者である金山(西山居)に帰属します。README は C# の再実装 JxqyHD と C++ エンジン JXQY-all-in-one を参考として挙げていますが、ロードマップ、既知の問題、保守計画については記載していません。
コミュニティノート