【PS3】スーパーマリオ64の非公式移植版「sm64-ps3-port」をSynology NAS(Docker)でビルドしてPKG化する方法

PS3改造

はじめに

N64(ニンテンドー64)を代表する歴史的名作『スーパーマリオ64』。ファン有志による逆コンパイルプロジェクトの成果により、現在ではPCをはじめ、PS Vita、PSP、PS2など様々なプラットフォームへの非公式移植版が存在します。

今回紹介するのは、その中でも少し珍しいPlayStation 3(PS3)向けの移植版「sm64-ps3-port」です。

今回使用するリポジトリは、GitHub上で公開されている sdiraimondo/sm64-ps3-port です。本プロジェクトは現在も開発途上であり、公式READMEにも動作上の不具合が発生する可能性がある旨が記載されています。また、ビルドには所有している実機ゲームROMからアセット(素材)を抽出する必要があります。

Windows PC上にPS3向けの複雑なCross-SDK開発環境を直接構築するのは手間がかかるため、今回はSynology NASの「Container Manager(Docker)」を利用し、コンテナ内でスマートにビルド〜PKG化までを行う手順を詳しく解説します。


1. PS3版スーパーマリオ64「sm64-ps3-port」の概要

リポジトリと対応リージョン

「sm64-ps3-port」は、スーパーマリオ64の逆コンパイルコードをベースに、PS3用のグラフィックリファインやコード追加が行われた非公式移植プロジェクトです。

ソースコード内の Makefile では、以下のリージョン指定が定義されています。

VERSION=jp
VERSION=us
VERSION=eu
VERSION=sh

日本版ROM(VERSION=jp)を使用する場合、ビルドコマンドは以下のようになります。

make VERSION=jp

日本版としてビルドされた成果物は、プロジェクト内の build/jp_ps3 フォルダへ出力されます。

Dockerビルド環境の利点

PS3向けのHomebrew(自作ソフト)をビルドするには、本来PS3 SDKやPSL1GHTといった特殊なツールチェーンが必要です。

しかし、本プロジェクトではDockerによるビルドに対応しており、Docker HubにはPS3用ビルド環境がまとめられたDockerイメージ markstreet/sm64:ps3 が公開されています。

Synology NASの「Container Manager」上でこのイメージを実行すれば、NASやPCの環境を汚すことなくコンテナ内で完結してビルドを行えます。


2. 開発環境と事前準備(ディレクトリ構成)

ビルドを始める前に、Synology NAS上に必要なプロジェクトフォルダ構造を作成します。

NASの共有フォルダ docker/ 配下に sm64-ps3/ を作成し、以下のようなディレクトリ構成を目指します。

docker/
└─ sm64-ps3/
    ├─ actors/
    ├─ asm/
    ├─ assets/
    ├─ bin/
    ├─ data/
    ├─ include/
    ├─ levels/
    ├─ lib/
    ├─ ps3/
    ├─ src/
    ├─ text/
    ├─ tools/
    ├─ Makefile
    ├─ README.md
    ├─ baserom.jp.z64    <-- 所有する日本版ROMファイル
    └─ docker-compose.yml <-- 設定ファイル

ポイントは、PS3ブランチのソースコード一式と日本版ROM(baserom.jp.z64)を同じディレクトリに配置することです。


3. ソースコードと日本版ROMの配置

① PS3ブランチのソースコードを取得

sm64-ps3-port 公式GitHubリポジトリ にアクセスします。

ブランチ選択画面で ps3 ブランチ を指定した状態で、「Download ZIP」をクリックしてダウンロードし、解凍した中身をNASの docker/sm64-ps3/ 内に配置します。

② 日本版ROMのファイル名変更と配置

自身で所有するスーパーマリオ64(N64日本版)のROMデータを用意します。

ファイル名を正確に baserom.jp.z64 へ変更し、docker/sm64-ps3/ 直下へ配置してください。

注意: ファイル名が異なると、ビルド時に Failed to open baserom.jp.z64! というエラーが発生して失敗します。VERSION=jp の指定時はこのファイル名が厳密にチェックされます。


4. docker-compose.yml の作成とコード修正の自動化

docker/sm64-ps3/ ディレクトリ直下に docker-compose.yml を新規作成し、以下の内容を記述します。

services:
  sm64-ps3-build:
    image: markstreet/sm64:ps3
    container_name: sm64-ps3-build
    working_dir: /sm64
    volumes:
      - ./:/sm64
    command:
      - sh
      - -c
      - |
        sed -i 's/rsxSetZControl/rsxSetZMinMaxControl/g' src/pc/gfx/gfx_ps3_rapi.c
        make clean
        make VERSION=jp pkg -j2

設定内容の解説

  • image: markstreet/sm64:ps3
    PS3向けのコンパイルツールチェーンが含まれたプリビルドDockerイメージです。
  • volumes: - ./:/sm64
    NAS上の作業フォルダをコンテナ内の /sm64 にマウントします。これによりコンテナ内で生成された build/jp_ps3/ 以下の成果物を、NAS側から直接取り出せます。
  • sed によるソースコード修復
    現在リポジトリにある src/pc/gfx/gfx_ps3_rapi.c の一部コードにおいて、PSL1GHT側のグラフィックAPI関数名との不整合(rsxSetZControl)が存在します。そのままビルドするとエラーになるため、ビルド前に sed コマンドで正しい関数名(rsxSetZMinMaxControl)へ自動置換しています。
  • make VERSION=jp pkg -j2
    日本版として2スレッド並列でビルドを行います。NASのCPU負荷を抑えるために -j2 に設定していますが、高スペックなNASであれば -j4 などに変更可能です。

5. Synology Container Managerでのビルド実行

ここからは Synology DSM(WEB画面)上での操作手順です。

① プロジェクトの作成

  1. DSMで Container Manager を開きます。
  2. 左メニューの「プロジェクト」を選択し、「作成」をクリックします。
  3. 以下の項目を設定します:
    • プロジェクト名sm64-ps3(任意の名称)
    • パス/docker/sm64-ps3
  4. 既存の docker-compose.yml を使用するか訊かれるので、そのまま「OK」をクリックします。
  5. 全般設定が表示され、「次へ」をクリックします。
  6. Webポータル設定はスキップして、「次へ」をクリックします。
  7. 「完了」をクリックします。

② ビルドの開始と成果物の確認

設定完了後、プロジェクトが自動的に開始されます。

初回起動時はDockerイメージ(markstreet/sm64:ps3)のダウンロードが行われた後、コンテナ内で sed 置換 ➔ make cleanmake が順次自動実行されます。ROMからのアセット抽出とPS3向けコンパイルが進み、正常に完了するとコンテナが停止します。
(厳密には、python2.7の関係で、途中でエラーで終了します)

ビルドが完了すると、NAS上の以下のパスにファイルが生成されます。

docker/sm64-ps3/build/jp_ps3/pkg/USRDIR

この中に作成されている EBOOT.BIN(BINファイル)が今回のコアとなる成果物です。


6. PKG用フォルダを構成する

生成された EBOOT.BIN をPS3で読み込めるPKG形式へ変換するためのディレクトリ構造をPC上で準備します。

ディレクトリ構造とリネーム

PC上の任意の場所に作業フォルダ(例:SM64PS301)を作成し、以下のようなフォルダ構造を作成します。

SM64PS301/
├─ PARAM.SFO
├─ ICON0.PNG
└─ USRDIR/
    └─ EBOOT.BIN

重要: PS3のアプリケーション構造上、実行ファイルである EBOOT.BIN は必ず USRDIR フォルダの配下 に配置してください。

  1. 生成された EBOOT.BIN を、USRDIR/ フォルダ内へ配置します。
  2. ゲーム情報(タイトル名やTITLE_ID)を定義する PARAM.SFO を作成・配置します。
    • TITLEスーパーマリオ64
    • TITLE_IDSM64PS301
    • CATEGORYHG
      (既存のPS3 Homebrew用 PARAM.SFO をWeb-SFO-Editor等のツールで編集して流用するとスムーズです)
  3. PS3のXMB(クロスメディアバー)上で表示されるアイコン画像として、ICON0.PNG(320×176ピクセルのPNG画像)を、背景画像として、PIC1.PNG(1920×1080ピクセルのPNG画像)を配置しておくと見栄えが良くなります。

7. PS3 Game ExtractorによるPKG化とPS3へのインストール

① PKGファイルの生成

PC上で PS3 Game Extractor を起動します。

作成した SM64PS301 フォルダを指定し、PKGパッキング機能(Pack folder in PKG)を実行します。

※ PS3 Game Extractorの詳しい使用手順については、こちらの記事をご参照ください。

② PS3実機へのインストール

  1. 完成した .pkg ファイルを以下のいずれかの方法でPS3から認識できる場所に配置します。
    USBメモリを使用する場合:FAT32形式でフォーマットしたUSBメモリの直下(ルート階層)にコピーし、PS3本体の右側のUSBポートに接続します。
    FTP転送を使用する場合:FTPクライアントソフトを使い、PS3の内蔵HDD内にある /dev_hdd0/packages/ フォルダへ転送します。
  2. PS3のXMBメニューから 「★パッケージマネージャー」を選択します。
  3. 「★パッケージファイルをインストールする」 > 「スタンダード」(USBメモリの場合)または 「PS3本体ストレージ」(FTPの場合)を選択します。
  4. 表示された .pkg ファイル を選択してインストールを開始します。
  5. インストール完了後、XMB上に『スーパーマリオ64』のアイコンが表示され、起動可能になります。

おわりに

今回は、PS3向けの非公式スーパーマリオ64移植版 「sm64-ps3-port」 を、Synology NASのContainer Manager(Docker)を活用してビルドし、PKG化するまでの手順を紹介しました。

PS3のHomebrew開発環境はPC上に構築しようとすると依存関係のエラーに悩まされがちですが、「Synology NAS + Container Manager + Dockerイメージ(markstreet/sm64:ps3)」 という構成をとることで、自前のPC環境を汚すことなく非常にクリーンにビルドを完結させることができます。

一度コンテナ環境を用意してしまえば、

  1. 生成された sm64.jp.f3dex2e.self を取得
  2. EBOOT.BIN にリネームして USRDIR/ 内に配置
  3. PARAM.SFOICON0.PNG とともにPKG化

というシンプルなステップで実機用パッケージを作成可能です。

NASの活用例としても非常に面白い題材ですので、PS3実機やNASを所有している方はぜひチャレンジしてみてください。なお、PS3移植版は現在も開発途中のため、実機での挙動や安定性についてはバージョンによって異なる場合がある点をご理解の上お楽しみください。

関連記事: 【PS3】改造の全貌を網羅。CFW導入から神ツール活用までを繋ぐ「究極のロードマップ」

PS3改造
スポンサーリンク

コメント