HN 日本語サマリー

← 一覧へ戻る
オープンソース

Ogre Battle 64 再コンパイルプロジェクト、進捗99.05%

Ogre Battle 64 Recompiled Project at 99.05% (github.com)

97 pointsby frozenlettuce38 コメント

要約

N64エミュレータN64Recompツールチェーンを使用して、N64ゲーム「Ogre Battle 64: Person of Lordly Caliber」のPCネイティブ実行ファイルへの静的再コンパイルを行うプロジェクトの進捗報告です。現在、主要コードセグメントの807関数がC言語に完全に再コンパイルされており、次のマイルストーンとしてランタイムアプリケーション(レンダリング、入力、オーディオ)の開発が進められています。プロジェクトはオープンソースで公開されており、ユーザーは自身のROMデータを提供する必要があります。

全文翻訳

Ogre Battle 64: Person of Lordly Caliber (PCポートプロジェクト)

N64Recompツールチェーンを使用して、N64ゲーム『Ogre Battle 64: Person of Lordly Caliber』(USA、Rev A)をネイティブPC実行ファイルに静的に再コンパイルするプロジェクトです。

このリポジトリには著作権で保護されたゲームデータは一切含まれていません。 ユーザー自身でROMダンプを用意する必要があります(下記参照)。

システム要件

64ビットPCと、レンダラーがサポートするGPUが必要です。

  • GPU — WindowsではDirect3D 12.0(Shader Model 6.0)またはVulkan 1.2、LinuxではVulkan 1.2、macOSではMetal。最も古いGPUの目安はGeForce GT 630、Radeon HD 7750(2012年)、Intel HD 510(Skylake)です。
  • CPU — x86-64 with SSE4.1(Intel Core 2 Penryn、AMD Bulldozer以降)。macOSビルドはApple Siliconが必要です。
  • OS — Windows 10または11(64ビット)、Apple Silicon搭載macOS 11以降、glibc Linux(Vulkan 1.2ドライバー搭載)。
  • RAM — 2 GB。エミュレートされるN64マシンは512 MBをコミットします。
  • ディスク — アプリケーション用に約150 MB、ROM用に別途必要です。
  • ゲームデータ — ユーザー自身の『Ogre Battle 64』(USA、Rev A)カートリッジダンプ(40 MB、.z64、.n64、または.v64形式)。ゲームデータは含まれていません。

プレイにはキーボードがあれば十分です。XInput(Windows)またはSDLコントローラー対応のゲームパッドはオプションです。オーディオデバイスもオプションです。オーディオデバイスがない場合、ゲームは無音で実行されます。WindowsではVisual C++再頒布可能パッケージは不要です。パッケージには、シェーダーコンパイラーが必要とするランタイムが含まれています。

ゲームの起動時にクラッシュする場合、まずグラフィックドライバーを更新してください。古いGPUの場合、OGRE_CONSOLE=1で起動ログが表示されるコンソールを開き、OGRE_GRAPHICS_APIでバックエンド(vulkanまたはd3d12)を固定できます。

AI免責事項

このプロジェクトは、主に「DeepSeekはどこまでできるか?」という実験です。これまでのところ、結果は非常に印象的です!

ステータス

完全な計画、現在のステータス、技術的な発見については、PLAN.mdを参照してください。

ディレクトリレイアウト

app/                   ポートのCMakeプロジェクト(実行ファイル)
assets/                ユーザーのROM(gitignored; ビッグエンディアン.z64を想定)
asm/                   splat生成のアセンブリコード
config/                ビルドが読み込むすべての設定
config/config.yaml     splat設定(セグメント、VRAMマッピング)
config/config.toml     N64Recomp設定
config/banks/          ユニットごとのsplat + N64Recomp設定(config-bank<U>.{yaml,toml})
config/symbols/        symbol_addrs*.txt, config/symbols/reloc_addrs.txt, config/symbols/extra_syms.txt,
                       config/symbols/relocatable_sections.txt, 生成されるundefined_*.txt
config/rsp-*.toml      RSPRecomp設定(njpeg, audio)
debug/                 wasmビルド用のヘッドレスブラウザプローブ(debug/README.md参照)
patches/               アップストリームへのパッチ(N64Recomp, N64ModernRuntime, RT64)
Makefile               アセンブル + リンク + 再コンパイル
tools/rt64-plume-sdl.patch
                       RT64 plumeパッチ — SDL >= 2.0.22ガード(古いSDL2を使用するシステム、例: Ubuntu 22.04では
                       tools/RT64サブモジュールに適用)
PLAN.md                プロジェクト計画

splat、N64Recomp、RSPRecompは、設定ファイル内のパスをその設定ファイルのディレクトリを基準に解決します。そのため、設定ファイルには../のエントリポイントがあり、バンク設定ではbase_path: ../..が設定されています。

始め方

PLAN.mdのReproduceを参照してください。概要は以下の通りです。

# ツール(macOS)
brew install mips-linux-gnu-binutils cmake
python3 -m venv tools/venv && tools/venv/bin/pip install 'splat64[mips]'
git clone --recurse-submodules https://github.com/N64Recomp/N64Recomp.git tools/N64Recomp
git -C tools/N64Recomp apply ../../patches/n64recomp-ob64.patch
cmake -S tools/N64Recomp -B tools/N64Recomp/build -DCMAKE_BUILD_TYPE=Release
cmake --build tools/N64Recomp/build --target N64RecompCLI -j4

# ROM: .z64ダンプをassets/に配置し、再コンパイル済みコードを再生成します
# (docs/guides/app-build.md -> "Regenerating the recompiled code"参照)
make regenerate

ROMはUSA Rev Aダンプ(40 MB、.n64形式の16ビットバイトスワップ済み、または既に変換済みの.z64)である必要があります。tools/convert_rom.pyで.n64 → .z64に変換できます。

新規クローンでは、make regenerateを一度実行するまでアプリをビルドできません。 再コンパイルされたCコード(RecompiledFuncs/、Bank*Funcs/、RspFuncs/、app/src/bank_funcs.inc)は、ユーザー自身のROMから生成され、意図的にコミットされていません。make regenerateは、splat、MIPSリンク、34個のバンクユニット、メインの再コンパイル、およびRSPマイクロコードを、機能する唯一の順序で実行します。

アプリのビルドと実行
cmake -S app -B build-app -DCMAKE_BUILD_TYPE=Release
cmake --build build-app -j
./build-app/ogrebattle64

起動すると、アプリはスタート画面を表示します — OGRE BATTLE 64: RECOMPというタイトルとタブバー(START GAME、MODS、CONTROLS、SETTINGS、DEBUG)が表示されます。START GAMEタブにはROM行があり、ROMがロードされるまでは[ ] No ROMと表示され、ROMがない場合は選択された行になります。ROMを選択するにはSPACEキーを押すか、ROMウィンドウにドラッグアンドドロップするか、実行ファイルと同じディレクトリにROMを配置してください。ESCキーを押すと、実行中のゲーム上でも同じ位置に同じパネルが開きます。ROMはハッシュによって検証され保存されるため、後続の起動は直接ゲームに入ります。バッテリーセーブは、実行ファイルの隣のsaves/ディレクトリに保存されます。

プレイ可能なビルド
make dist        # -> dist/ogre-battle-64-recomp/   (単一の自己完結型実行ファイル)
make dist-zip    # -> dist/ogre-battle-64-recomp-<platform>.zip

パッケージは単一のファイルです。SDL2は静的にリンクされます(make distは、Homebrewのsdl2がSDL3ベースの互換シムであり、静的ライブラリを持たないため、一度だけピン留めされた実際のSDL2を取得してビルドします)。ゲームデータは含まれていないため、プレイヤーはスタート画面で自身のROMを提供する必要があります。詳細はdocs/guides/app-build.md → "Distribution"を参照してください。

レンダラー(tools/RT64)は、アップストリームコミットにピン留めされたgitサブモジュールであり、SDL < 2.0.22のシステム(例: Ubuntu 22.04はSDL 2.0.20を出荷しますが、SDL_GetWindowSizeInPixelsは2.0.22+を必要とします)では独自のパッチが一度だけ必要です。

git submodule update --init --recursive
git -C tools/RT64/src/contrib/plume apply ../../../../rt64-plume-sdl.patch

tools/RT64内のgit submodule updateの後、サブモジュールがリセットされてパッチが破棄されるため、再適用が必要です。

法的情報

Ogre Battle 64 © Quest / Nintendo. このプロジェクトは、保存および相互運用性の研究を目的としています。ROMまたはその抽出されたアセットを配布しないでください。