概要
- JavaScript製ゲームエンジン をC言語に移植し、N64用FPS「Xibalba 64」を開発
- Modretro が物理カートリッジとして発売、N64新作としては極めて稀な事例
- Libdragon や Tiny3D などN64向けOSSライブラリを活用
- 開発・デバッグ環境や レンダリング最適化 の詳細な工夫
- ゲーム設計・エンジン拡張・データ構造・パフォーマンス改善の実践例
Xibalba 64:N64向け新作FPS開発記
- 2年前、 JavaScript製ゲームエンジン(Impact) をC言語へ移植
- 移植理由は不明だったが、後に N64向け新作ゲーム開発 という目的が誕生
- 完成したのは Wolfenstein 3D風FPS「Xibalba 64」
- Modretro製N64クローン機「M64」 のローンチタイトルとして物理カートリッジ化
- N64向け新作物理リリースは、 Xeno Crisis 以来2例目
- 2002年のTony Hawk's Pro Skater 3以来、新作はほぼ皆無
ゲームエンジン「Impact」およびC移植「high_impact」
- Impactは2010年開発の 2Dアクション向けJavaScriptエンジン
- タイルシート、背景マップ、スプライト、当たり判定対応
- 2年前にC言語へ移植し、 high_impact として再構築
- プラットフォームバックエンド 概念を導入
- SDL2、Sokol対応で多様なデバイスで動作
- レンダリングバックエンド もモジュール化
- ソフトウェアレンダラ、OpenGL、Metal(iOS/macOS)対応
- 新しいプラットフォームやレンダラ追加も容易
- N64移植の土台 として最適
N64ハードウェアとLibdragon
- N64は 93MHz MIPS CPU(ビッグエンディアン) 搭載
- Reality Coprocessor(RCP) にRDP(グラフィックス)、RSP(ベクトル演算)内蔵
- 任天堂公式ライブラリ「libultra」は長年非公開
- 著作権リスク回避のため利用困難
- Libdragon :N64向けSDL的OSSライブラリ
- スプライト描画、サウンド、入力などを提供
- high_impact用N64バックエンドを数日で実装可能
- 開発環境 :LibdragonがROMビルド用コンパイラ等を包括提供
- ドキュメントやサンプルも充実
- 「preview branch」利用推奨
実機・エミュレータテスト
- N64エミュレータ は長年精度が低かったが、Ares等で大幅改善
- RSP/RDPの正確なタイミング再現
- 実機テストには SummerCart64 (SDカード&USB-C対応カートリッジ)が最適
- sc64deployerでROM直接転送可能
- Linux+mpvで低遅延キャプチャ環境構築例
- 実機隣接設置+USB接続で高速開発ループ実現
ゲーム設計・エンジン拡張
- 元々は2014年WebGLデモとして Xibalba を制作
- ブラウザ3Dゲームとして話題
- 短編・少数レベル構成
- Xibalba 64 では本格的なゲーム化を目指し、C&high_impactへ移植・拡張
- レベル・敵・武器増強
- high_impactは2Dエンジンだが、 Wolfenstein 3D同様の擬似3D表現 を採用
- ゲーム内部は2Dベース、描画時のみ3D座標活用
- vec2_t/vec3_t構造体 で柔軟な座標管理
レベルデータ・エディタ・ホットリロード
- レベルエディタは HTML単体ファイル で提供
- ライトマップ、スプライト表示、エンティティ設定拡張
- Cソースからエンティティ情報を自動抽出
- エディタはJSON出力、 ビルド時にバイナリへ変換
- N64用はビッグエンディアン、x86用はリトルエンディアンで書き出し
- 読み込み高速化(JSON直接ロードで100ms遅延回避)
レンダリング最適化
- Libdragon のrdpq_triangle()で三角形描画可能
- 実際はRSP側で変換・ライティング・Z計算し、RDPへ命令送信が理想
- Tiny3D ライブラリでRSP/RDP連携・描画最適化
- N64は テクスチャメモリ4KB・最大64x64px制限
- テクスチャアップロードも高遅延
- レベルタイルの描画順を工夫し、アップロード回数最小化
- Tiny3Dは最大17クアッド同時描画可能
- 同一テクスチャの三角形を 64ビット構造体(render_call_t) でバッチ化・ソート
- 可視部分抽出は レイキャスティング を利用
- 320本のレイで視界をカバーし、可視タイルをビットマップで管理
- オーバードロー削減のため再帰分割も導入
- 天井なしタイル検出時はスカイボックス描画
N64向け新作ゲーム開発のまとめ
- OSSライブラリ活用+独自エンジン拡張 で最新N64ゲームを開発
- 実機・エミュレータ・ホットリロード等、 効率的な開発環境構築
- レガシーハードの制約下でのパフォーマンス最適化手法
- 物理カートリッジリリース という現代的レトロゲーム開発事例