このプロジェクトは、NetHack 5.0(C99、~25万行)を FFI-First アプローチで現代化し、複数のプラットフォーム(デスクトップ、WebAssembly、Unity)で動作させるものです。
| コンポーネント | 言語 | 行数 | 説明 |
|---|---|---|---|
| ゲームロジック | C | ~250k | AI・ダンジョン生成・戦闘・アイテムシステム |
| プラットフォーム層 | C | ~3k | UNIX/Windows 固有のコード |
| Rust ラッパー | Rust | ~4.3k | FFI・グラフィックス・プラットフォーム抽象化 |
┌─────────────────────────────────────────────────────────────┐
│ Desktop App / WASM / Unity │
│ (nethack-desktop / nethack-wasm / nethack-unity) │
└──────────────┬──────────────────────────────────────────────┘
│
┌──────────────▼──────────────────────────────────────────────┐
│ Game Bridge (Rust + wgpu) │
│ (nethack-render + Camera3D system) │
└──────────────┬──────────────────────────────────────────────┘
│
┌──────────────▼──────────────────────────────────────────────┐
│ FFI Wrapper (nethack-sys) │
│ bindgen-generated bindings + stage-aware initialization │
└──────────────┬──────────────────────────────────────────────┘
│
┌──────────────▼──────────────────────────────────────────────┐
│ NetHack C Library (139 object files) │
│ Game logic, AI, dungeon generation, combat, items │
└─────────────────────────────────────────────────────────────┘
crates/
├── nethack-sys FFI bindings + initialization (Phase 2 ✅)
├── nethack-core 3D Camera + World management (Phase 0 ✅)
├── nethack-render wgpu graphics layer (Phase 3 🔄)
├── nethack-desktop Desktop app (winit + wgpu) (Phase 4 📋)
├── nethack-wasm WebAssembly target (Phase 4 📋)
└── nethack-unity Unity native plugin (Phase 5 📋)
# リポジトリのクローン
git clone https://github.com/oosawak/NetHack.git
cd NetHack
git checkout master
# 依存関係をインストール(Linux)
sudo apt-get install build-essential libncurses-dev liblua5.4-dev
# Rust ツールチェーンセットアップ
rustup update
# プロジェクトビルド
cargo build --workspace
# テスト実行
cargo test --workspace
use nethack_sys::*;
fn main() -> Result<(), String> {
// Stage 1-7 の自動初期化
full_init()?;
// ゲーム開始
// moveloop() は無限ループなので、別途ゲームループ実装が必要
Ok(())
}
| ドキュメント | 説明 |
|---|---|
| ARCHITECTURE.md | 詳細なアーキテクチャ設計 |
| GETTING_STARTED.md | セットアップ・ビルド手順 |
| FFI_GUIDE.md | FFI バインディングと初期化の詳細 |
| WASM_BUILD.md | WASM ビルド手順とサンプル |
| DEVELOPMENT.md | 開発ガイド(Phase 3 以降) |
| LICENSE.md | ライセンス情報(NGPL) |
WASM ファイル完成後、以下の構成で公開予定:
wasm-examples/
├── README.md WASM サンプルの使い方
├── index.html WebGL コンテキスト HTML
├── lib/
│ ├── nethack_wasm.js wasm-bindgen 生成 JS
│ └── nethack_wasm_bg.wasm 実行可能 WASM バイナリ
├── css/
│ └── style.css UI スタイル
├── js/
│ ├── main.js WASM 初期化・ゲームループ
│ ├── renderer.js wgpu レンダリング
│ └── input.js キー入力ハンドリング
└── assets/
└── tileset.png キャラクター・タイル画像
公開予定先: wasm-examples ディレクトリ(GitHub Pages で静的公開)
| 機能 | 使用クレート | バージョン |
|---|---|---|
| グラフィックス | wgpu |
0.22.x |
| ウィンドウ | winit |
0.30.x |
| WASM | wasm-bindgen, wasm-pack |
0.2.x |
| FFI生成 | bindgen |
0.70.x |
| C ビルド | cc |
1.x |
| テキスト描画 | glyphon |
0.7.x |
| ロギング | tracing |
0.1.x |
| エラー処理 | anyhow, thiserror |
- |
このプロジェクトは NetHack General Public License (NGPL) の下で公開されています。詳細は LICENSE.md を参照。
プルリクエスト・イシューは大歓迎です!開発ガイドは DEVELOPMENT.md を参照してください。
最終更新: 2026-05-06
プロジェクトステータス: Phase 2 完了、Phase 3 進行中