Thanks to visit codestin.com
Credit goes to oosawak.github.io

NetHack-rust

NetHack Rust + WASM Project

プロジェクト概要

このプロジェクトは、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         │
└─────────────────────────────────────────────────────────────┘

📦 Cargo Workspace 構成

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 ファイル完成後、以下の構成で公開予定:

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 進行中