2026 年にニンテンドー 64 ゲームを作る方法

2026/08/04 22:24

2026 年にニンテンドー 64 ゲームを作る方法

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Xibalba 64 は、Modretro の M64 向けの物理カートリッジとして発売される「Wolfenstein 3D」風 FPS で、オリジナルコンソール時代以降、N64向けに物理メディアとして公開された新ゲームとしては 2 作目となります。プロジェクトは 2010 年に開発された「high_impact」JavaScript エンジンを 2 年前に C に移植し、コード変更なしでプラットフォームおよびレンダリング向けのモジュラー型バックエンドを実現しました。Libdragon を MIPS CPU、RDP、RSP のハードウェア抽象化に用いることで、ゴールデンアイ 007 が実機では達成できなかった安定した 60 FPS を実現しました。これには、レイキャスティングによる可視領域のクイリングと、N64 の 4 KB テクスチャ制限を尊重しつつ 64 ビットの描画コールに 17 つの四角形(quad)を詰め込むようなレンダリング最適化が含まれます。レベルエディタは JSON ファイルをバイナリ構造体にコンパイルし、コンソール側での解析を避けることで読み込み時間を短縮しました(約 100 ms の削減)。サウンドはリアルタイムプレイがコストが高いため Opus デコードを採用できなかったことから、4 ビット VADPCM フォーマットで実装されており、ROM の 32 MB のうち約 31 MB を占めています。開発中の正確な RSP/RDP テストには Ares エミュレータの推奨使用がありますが、発売前にメモリ帯域制限を検証するには USB-C を介した SummerCart64 が必須です。開発クレジットは Giovanni Bajo(Libdragon)、Max Bebök(Tiny3D)、および N64brew ディスカードコミュニティに属します。将来のエンジンオープンソース化に関する開発者からのメールを受け取り、Modretro は迅速な出版に合意しました。ボックスアートは以前 Sierra Germanyのパッケージングを手がけた友人によって作成されました。このリリースは、現代の技術がレガシーハードウェアの制限を克服できるとの実証であり、レトロ互換エコシステムの強化と FPS ジャンルの新コンテンツ創出を促進します。

本文

『Xibalba 64』開発記:JavaScript エンジンの C 移植から N64 用ゲームまで

2026 年 8 月 4 日(火)、**『Xibalba 64』**は Modretro 社より、M64(現代における N64 リメイク機)向けカートリッジとして正式に発売されました。

  • 作品概要: 『ウルフェンシュタイン 3D』に似た視点型アクションシューティングゲーム(FPS)。
  • 歴史的背景: コンソールの商業的生命を終えた後、物理メディアで新作 N64 タイトルが発表された例は極めて稀です(2002 年の『Tony Hawk's Pro Skater 3』以来、約 20 年ぶりの事例)。
  • Modretro 社との連携: Bitmap Bureau の『Xeno Crisis』の成功を受け、同社から物理メディアとしての発売決定がなされました。カートリッジ、パッケージング、マニュアルを備え、完全な商業作品としてリリースされています。

Modretro.com の紹介ページより詳細をご覧ください。


エンジンについて:high_impact

開発の根幹を支えるのが、私が 2010 年に制作した JavaScript 製ゲームエンジン「Impact」です。その後、趣味半分で C 言語へ再実装され、現在は「high_impact」と呼ばれています。

Impact と high_impact の概要

  • Impact (旧): 2D アクションゲーム向けに設計されたシンプルながら堅牢な JavaScript エンジン(タイルシート処理、背景マップ、スプライト、衝突検知対応)。
  • high_impact: 2 年前の「面白かったから」という直感で C 言語へ移植。現在はプラットフォームバックエンド概念を導入し、多様なデバイスに対応しています。
    • デフォルトバックエンド:
      SDL2
      または
      Sokol
      をコンパイルオプションで選択可能。
    • モジュール化されたレンダリング: ソフトウェアレンダラー、OpenGL、Metal (iOS/macOS) などが追加可能です。

N64 向けの実装

  • Libdragon 統合: 「N64 用の SDL」と呼ばれる高機能なライブラリ「Libdragon」を導入し、新しいプラットフォームバックエンドを構築しました。
    • スプライト描画、三角形描画、音声出力、コントローラー入力などに対応。
    • ゲームロジックのコード変更は最小限で済みましたが、パフォーマンス調整が必要でした(_naive_方式の初期実装)。

N64 ハードウェアと開発環境

N64 は独特なアーキテクチャを持ち、開発には特殊な知識とツールの組み合わせが求められます。

N64 ハードウェアの特殊性

  • CPU: 93MHz の MIPS CPU(ビッグエンディアン)。
  • コプロセッサ (RCP):
    • RDP (Reality Display Processor): 固定機能グラフィックプロセッサ。
    • RSP (Reality Signal Processor): プログラム可能ベクトルプロセッサ。
    • 両者は「リアリティコプロセッサ(RCP)」として物理パッケージに搭載されています。

開発環境とツール链

  • Libdragon: N64 ROM 構築に必要なコンパイラ一式を提供する標準的なライブラリ。
    • 「preview」ブランチの使用が推奨されます。「stable」ブランチは更新が遅すぎて事実上使用不能です。
  • エミュレータと実機検証の両立:
    • Ares エミュレータ: RDP/RSP が完全に実装され、特に RSP のタイミング制御も正確に再現されています(ただし、メモリアクセス帯域制限などの「有難い遅延」は依然として実機のみで検証可能)。
    • SummerCart64 (実機): 開発には USB-C ポート経由での ROM アップロード機能を備えた本物の N64 カートリッジが必要です。安価な選択肢(AliExpress など)でも機能しますが、基板構成に注意が必要です。
  • 低遅延出力設定 (Linux 環境):
    • PC と N64 を USB で接続し、10 ドルのアナログキャプチャカードでデスクトップ表示を実現。
    • mpv
      との調整により低遅延な出力を達成しました。

ゲーム内容と技術的拡張

JavaScript 版『Xibalba』から N64 版への変遷には、2D から 3D への拡張や物理演算の再構築が含まれます。

3D 化のためのデータ構造変更

high_impact は元々 2D エンジンですが、『Xibalba 64』は 3D グローバルな環境です。

entity_t
の定義を拡張し、3 次元座標情報を扱えるようにしました。

typedef struct {
    float x, y;
} vec2_t;

// union を用いて、vec2 と vec3 で互換性を確保
typedef union {
    vec2_t xy;
    struct {
        float x, y, z;
    };
} vec3_t;

typedef struct {
    // ...
    vec3_t pos;  // 現在位置 (x, y, z)
    vec3_t vel;  // 速度ベクトル
    // ...
} entity_t;
  • 機能:
    vec3_t
    .xy
    プロパティを引数として渡すことで、2D 系関数も利用可能にします(例:
    trace(collision_map, entity->pos.xy, ...)
    )。
  • 内部構造の直接アクセス:
    entity->pos.z
    など、匿名ユニオン内の値にも直接アクセス可能です。

レベルコンパイラと JSON → C 変換

レベルデータは JSON ファイル形式で管理されていますが、N64 で直接読み込むと約 100ms のオーバーヘッドが発生するため、ビルド時に C 構造体に変換するコンパイラを開発しました。

  • 出力フォーマット: N64 向けにはビッグエンディアン、x86/WASM 向けにはリトルエンディアンで記述し、プラットフォーム間で互換性を確保。
  • レベル構造体の例:
typedef struct {
    uint16_t magic;
    uint16_t entities_len;
    uint16_t map_width;
    uint16_t map_height;

    // エンティティリスト
    struct {
        uint16_t type_id;
        uint16_t x, y;
        uint16_t settings_len;
        // ... 設定値 (name, target, size など)
    } entities[entities_len];

    // マップデータ(衝突判定、床、壁、天井、照明)
    uint16_t collision_map[map_width * map_height];
    uint16_t floor_map[map_width * map_height];
    uint16_t wall_map[map_width * map_height];
    uint16_t ceiling_map[map_width * map_height];
    uint16_t light_map[map_width * map_height];
} level_t;

レベルエディタの拡張

元々の HTML 単体ファイルを大幅に強化しました。

  • 機能追加: ライトマップ対応、エンティティ表示のボックス化、設定説明の充実。
  • 仕組み: 「ソース・オブ・ザ・トゥルース」である C ソースコードを読み込み、自動的にエンティティタイプや設定を抽出します。

レンダリングと最適化

N64 の制約(4KB のテクスチャメモリ、64x64 ピクセル制限)の中で 60 FPS を達成するための高度な最適化が施されています。

RSP と RDP の連携

  • 課題: Libdragon は独自マイクロコードで描画処理を加速しますが、RDP 直接呼び出しでは非効率的です。
  • 解決策: Tiny3D ライブラリを採用し、RSP に描画コールを提出し、専用マイクロコードで処理させる手法を取りました。

テクスチャメモリ管理とバッチ処理

  • 制約: 4KB の極小メモリ、64x64 ピクセルの制限、厳しいテクスチャアップロードコスト。
  • 最適化方針:
    • レベルタイルの描画順序を細かく制御し、テクスチャアップロード回数を最小化
    • 同じテクスチャを持つ三角形を 64 ビット単位のコールとして集約(バッチ処理)。
typedef union render_call {
    uint64_t packed;
    // ハッシュ化用フィールド
    uint32_t hashable;
    
    // パーソナルフィールド
    uint64_t ident : 46;
    struct {
        uint64_t translucent : 1;         // 半透明フラグ
        uint64_t texture_index : 9;       // テクスチャ ID
        uint64_t x : 10;                  // 開始 X
        uint64_t y : 10;                  // 開始 Y
        uint64_t w : 8;                   // 幅
        uint64_t h : 8;                   // 高さ
        uint64_t vbi : 14;                // Vertex Buffer Index
        uint64_t len : 4;                 // クアッド数
    };
} render_call_t;

レイカスティング(Raycasting)によるセクタ判定

  • 課題: ポータルシステムはオーバードロウを起こしたため、より軽量なアプローチが必要でした。
  • 実装: ゲーム全体を覆う320 本のビームを射出し、通過したタイルをビットマップとして記録。
    • 視野角(320 ピクセル)を再帰的に二分木で分割。
    • 2 つのビームが同じタイルに到達するまで細分化する処理を行う。
    • スカイボックス: 通過したタイルの天井がない場合は、単一テクスチャを用いた地平線沿いの描画を実装。

テクスチャアップロード回数の削減(4 ビットカラー)

  • タイルシートを 1 つの列にまとめ、可能な限り4 ビットインデックスカラーを使用。
  • これにより、テキストチャメモリアー fitting できるピクセル数を増やし、連続したメモリエリアでの処理を実現しました。

成果: すべての最適化により、60 FPS を安定して維持(スプリットスクリーンでも滑らか)。対照的に『ゴールデンアイ 007』は頻繁にフレームレートが低下することが知られています。


音声と音楽

  • サウンドトラック: 友人のアンドレアス・ローシェ氏による制作。Bandcamp で全曲聴取可能。
  • ゲーム内プレイヤー: シングルプレイキャンペーンで解錠可能な組み込みプレイヤーを搭載。

音声デコード技術の限界と突破

  • 制約: カートリッジ容量の厳しさから、高品質な音声には大きな計算コストが必要。
  • 画期的な解決策: Libdragon メンテナーであるジョバンニ・バージョ氏により、RSP で加速されたOpus デコーダーが実装されました(N64 発売からの約 16 年後の技術)。
    • ※リアルタイム使用は依然として高負荷なため、現在は簡易的な4 ビット VADPCMを採用。
  • 現状: ROM の 32MB 中約 31MB が音声・音楽に消費されています。
  • 将来性: 『Xibalba 64』リリース後、空間・品質・複雑性のバランスを改善する新たな圧縮フォーマットの開発に取り掛かっています。

発売と販売について

Modretro 社は既存の Game Boy クローンマシン「Chromatic」の制作で知られ、ホビスト開発者の新作出版に積極的です。M64 の発表を受け、リリースへ至りました。

開発プロセス

  • 契約: 官僚的な手続きは最小限。オープンソース化権利などを認めるとの要望も快く受け入れられました。
  • ハードウェア対応: プレプロダクション段階の M64 を入手しましたが、謳い文句通りの動作で、ゲーム側の変更は不要でした。
  • パッケージとマニュアル:
    • パッケージアート:シエラ社の過去のタイトルデザイン経験を持つ友人が担当し、90 年代風の素晴らしい仕上がりになりました。
    • マニュアル:テキスト・イラストを Modretro に提供し、印刷用レイアウトを完了。

成果と感謝

  • 販売実績: 発売数日で非常に良い結果を見せています(完全な「退職」の道ではありませんが、素敵な休暇資金としては十分です)。
  • 感謝の意:
    • Libdragon: ジョバンニ・バージョ氏
    • Tiny3D: マックス・ベボーク氏
    • N64brew Discord コミュニティ
    • Modretro チーム

リソース:N64 開発への推奨ツール集

新しい開発者の方へ、以下のリソースをぜひご活用ください。

  • n64.dev – N64 開発に関するすべてを集めたコレクション。
  • N64brew Discord – 支援的なコミュニティ。多くのライブラリ開発者が在籍。
  • Libdragon – N64 向けシステムライブラリ(事実上の標準)。
  • Tiny3D – シンプルで高速な 3D グラフィックスライブラリ。
  • Pyrite64 – 3D ゲーム作成用のビジュアルエディタとランタイム。

同じ日のほかのニュース

一覧に戻る →

2026/08/07 5:23

AMD が推論性能向上のためにモデルをシリコンに刻むことでタラアスを取得

## Japanese Translation: AMD がトロントに本社を置くスタートアップであるタラス(Taalas)を買収したことは、AI ハードウェアの景観において大きな転換点を意味し、従来の「メモリ内計算」アーキテクチャを通じて NVIDIA の支配的地位に挑戦することを目的としています。標準的な高帯域幅メモリとは異なり、タラスのチップはマスキング ROM ファブリックを使用して静的な重み値をシリコン上に直接刻み込み、動的な KV キャッシュのために SRAM 呼出ファブリックを使用するモデル専用集積回路(MSIC)として動作します。このアプローチにより、AMD は既存の Instinct GPU アーキテクチャ内で、GPU がプロンプト処理を担いながらタラスのチップがトークン生成を担当するという disaggregated な形でこれらの専門的なアクセラレーターを展開できます。初期のベンチマークでは、HC1 チップは Meta の Llama 3.1 を処理する速度において、現在の NVIDIA GPU よりも 48 倍、Cerebras のアクセラレーターよりも 8.5 倍高速であることが示されています。さらに、重み値をシリコン上に刻むことにより、この技術は従来の方法に比べてトレーニングコストを 100 分の 1 に削減すると推定されます。しかし、この効率性には代償があります:顧客はモデルロックインに直面しており、これらのチップを導入するには、大規模なモデル更新に対して単なる LoRA アダプターではなく、コストのかかる「再スピン」(金属層の変更)を必要とします。規制上の承認が必須であるにもかかわらず、本取引は第 4 四半期に完了する見込みであり、夏には 200 億パラメータ向けに設計された次世代 HC2 チップの登場へと道を開きます。OpenAI、Anthropic、Meta など主要な AI プレイヤーは既に Instinct の顧客であり、AMD はこれらの柔軟で高性能なソリューションを通じて業界のワークロードを再構築する位置づけにあります。

2026/08/06 0:33

NSFインウイェー太陽望遠鏡が隠された太陽過程の重大な発見をもたらす

## Japanese Translation: 2026 年 8 月 5 日、NSF NSO、NSF NCAR HAO、および MPS に所属する研究機関を含む国際チームは、「Nature」誌に重大なブレークスルーを掲載し、太陽表面におけるケルビン=ヘルムホルツ不安定性(KHI)の初の実験的確認を発表した。NSF デイヴィッド・K・イノーイ太陽望遠鏡—which はその 4 メートルの主鏡によって匹敵する解像力を提供した—を使用して観測者は、渦距離が 50–65 km の渦状の極細な旋回パターンを捉えた。このパターンは 416 nm の波長において、モルアイに見られるような構造を示していた。これらの観測は磁気要素の変形された境界線と縞構造を明らかにし、物理ベースのシミュレーション(MURaM コード)および解析理論と完全に一致した。この発見は、KHI が磁場線をねじり、プラズマの混合を駆動し効率的な拡散を行う自然なエンジンとして機能することを確認している。この機構は、太陽の 11 年周期の磁気サイクルの説明、ならびに磁気エネルギーがどのように蓄積し日食爆発を燃料とするかを詳述することで「コロナ加熱ミステリー」の解決に不可欠である。将来の自動解析ではエネルギー転送量および宇宙天気への影響を定量化し、地球基盤技術を混乱させる爆発的な太陽嵐に対する予測を大幅に向上させるだろう。 ## Text to translate: "On August 5, 2026, an international team including researchers from NSF NSO, NSF NCAR HAO, and MPS announced a major breakthrough in *Nature*: the first experimental confirmation of Kelvin-Helmholtz Instability (KHI) on the Sun's surface. Using the NSF Daniel K. Inouye Solar Telescope—which delivered unmatched resolving power via its four-meter mirror—observers captured ultra-fine swirling patterns resembling whirlpools with vortex distances of 50–65 km at a wavelength of 416 nm. These observations, which revealed deformed boundaries of magnetic elements and striped structures, matched perfectly with physics-based simulations (MURaM code) and analytical theory. The discovery confirms that KHI acts as a natural engine, twisting magnetic field lines to drive plasma mixing and efficient diffusion. This mechanism is vital for explaining the Sun's 11-year magnetic cycle and resolving the 'coronal heating mystery' by detailing how magnetic energy accumulates and fuels solar flares. Future automated analysis will quantify energy transfer and impacts on space weather, significantly improving predictions for explosive solar storms that disrupt Earth-based technology."

2026/08/07 6:49

Show HN: ポケットモンスターエメラルドをRaspberry Pi Pico 2 に移植しました

## Japanese Translation: 報告される最も大きな成果は、252 MHz で動作し、1 秒間に 60 フレームの画率を実現することで、Pokémon Emerald が WeAct Studio Core2350B マイクロコントローラー (RP2350B) にてネイティブに正常に動作することに成功した点である。本システムは、オンボードフラッシュストレージから直接フルゲームプレイ、電源サイクルを超えた持続的なセーブデータの保存、ハイクオリティな HD 対応 HDMI 出力を提供し、従来のエミュレーションオーバーヘッドを排除している。本プロジェクトでは、元のアーム v4T コードを現代的な Cortex-M33 コアに書き直し、コア 1 上でソフトウェア的にゲームボーイアドバンスのビデオハードウェアを実装し、コア 0 でゲームロジックを担当させることでこの成果を実現した。また、既存のオープンソースエコシステムを活用し、pokeemerald-wasm のハードウェア抽象化層と参照ラスタライザーを用いてバイト単位正確な PPU 検証を確保している。 しかし、ハードウェアおよび実装上の制約により、高度な機能は未完了の状態である。オンライン取引、対戦、ミステリーギフト、リンクケーブルサポート、RFU は利用できない。これは、Emerald が要求する特定の RTC ビットバンギング機能が不足している(カートリッジ GPIO の読み取り値がゼロ)ためである。音響システムは m4a エンジンを使って音楽を再生するが、DPCM および逆再生楽器については無音のスタブが含まれており、フレームレート連動型のミキシングにより 60 fps 未満でアンダーランが発生する可能性もある。さらに、シネマティックなイントロは最適化された高速パスの欠如によりメインループよりも若干遅く実行される。ビルドプロセスには、標準形式からアセットを生成し、ソースコードを単一のイメージにコンパイルして 16 MB の QSPI フラッシュから実行し、読み込み用の `.uf2` ファイルを作成することを含んでいる。このマイルストーンにより、複雑なゲームボーイアドバンスタイトルが極めて低コストのマイクロコントローラー上で効率的に実行できることが証明され、レトロゲーミング愛好家向けに新たな予算フレンドリーなプラットフォームを提供するとともに、コアとなる作業は MIT ライセンスの下で公開される(上流のアセットおよび ROM は除く)。

2026 年にニンテンドー 64 ゲームを作る方法 | そっか~ニュース