Sony PSPが発売されてから約20年、Mod制作者たちが老朽化した携帯機にCounter-Strike風のFPSを押し込んだ。PocketJSとして知られるグループが、2004年に発売された携帯型ゲーム機に爆弾解除とチーム戦のコアループをもたらすオープンソースプロジェクト、OpenStrikeをリリースした。2004年12月12日に日本で、2005年に世界で発売された初代PlayStation Portableは、当時としては技術的な驚異であり、4.3インチのワイドスクリーンディスプレイとカスタム333 MHz MIPSプロセッサを搭載していた。しかしデュアルアナログスティックがなかったため、従来のFPSをプレイするのは極めて困難で、開発者はエイミングにシングルアナログパッドとフェイスボタンを使わざるを得なかった。

OpenStrikeはValveの名作の直接移植ではない。代わりに、Rustプログラミング言語で書かれたカスタムエンジンを用いたゼロからのスタンドアロン再現作品だ。このエンジンが移動、衝突判定、botの挙動、武器、レンダリングを処理する。ユーザーインターフェースとスコア追跡はTypeScriptとJavaScriptで書かれ、QuickJSエンジン上で動作する。Rustの選択は注目に値する。メモリ安全性とパフォーマンスで知られる現代のシステム言語だが、レガシーコンソールの自作ソフトで使われることは稀だ。PocketJSがRustコードをPSPのMIPSアーキテクチャで動作するようコンパイルできたこと自体が技術的偉業であり、カスタムツールチェーンとリンカースクリプトを必要とした。

その結果は初代PSP-1000モデルで安定した60フレーム/秒で動作する。使用メモリはわずか12 MBで、コンソールのネイティブ解像度480 x 272ピクセルでレンダリングされる。モデルは簡略化されているが、武装したキャラクター、砂埃の舞うマップ、ゲーム内スコアボードといった視覚的手がかりは、Counter-Strikeをプレイしたことのある人ならすぐに馴染めるものだ。Mod制作者たちはbot AIも搭載し、プレイヤーがコンピュータ制御の相手と練習できるようにしている。武器のラインナップは限られているようだが、PSPの限られたボタン配置に合わせて調整されたAK-47とM4A1の代役は確認できる。

PocketJS CS2

22年前の携帯機におけるOpenStrikeの技術的偉業

この成果はノスタルジーだけでなく最適化にも関わるものだ。PSPは当時画期的なデバイスだったが、現代の基準では極めて非力だ。CPUは333 MHzで動作し、GPUはプログラマブルシェーダーを持たない固定機能チップだ。FPSを滑らかに動作させるには慎重なメモリ管理と削ぎ落としたアセットが必要となる。PocketJSはポリゴン数を低く抑え、軽量なRustバックエンドに頼ることでこれを成し遂げた。PSPのRAMが合計32 MB(システム予約後にゲームで使えるのは24 MB)しかないことを考えれば、わずか12 MBというメモリ使用量は印象的だ。これにより、追加マップや武器モデルなど将来の拡張の余地も残されている。

このModが実際にもたらすもの

Mod制作者たちによると、OpenStrikeにはbot AI、シンプルな武器システム、基本的なスコアリングが含まれており、バスや待合室でカジュアルなCounter-Strike風体験を再現するには十分だ。リリースには公式のオンラインマルチプレイヤー対応についての言及はないが、プロジェクトはオープンソースであり、コミュニティが拡張できる。ゲームの操作はPSP向けに調整されており、移動にアナログスティック、エイミングにフェイスボタン、射撃とリロードにショルダーボタンが割り当てられている。この操作体系は、ハードウェアの制約にもかかわらずまともなFPS体験を実現したMedal of Honor: HeroesやSOCOM: U.S. Navy SEALs Fireteam Bravoなど、他のPSPシューターと似ている。

  • Rustで書かれたエンジン:移動、衝突判定、bot、武器、レンダリングを処理
  • UIとスコアシステムはQuickJSエンジン上のTypeScript/JavaScriptで構築
  • オリジナルのPSP-1000モデルで12 MBのメモリ使用量で安定した60 FPS
  • 480×272のネイティブ解像度で簡略化されているが識別可能なキャラクターと武器モデル

これがハードウェアを超えて重要な理由

OpenStrikeは、PSPの改造シーンが依然として活発で、家庭用ソフトウェアとカスタムファームウェアがコンソールの発売からほぼ20年経った今でも開発されている時期に登場しました。このプロジェクトは、これだけの年月が経っても、開発者がその限界を押し広げる意欲があることを示しています。また、PSPのような制約のあるプラットフォームでさえ、ゲーム開発にRustを使用する傾向が高まっていることを強調しています。このゲームは競技プレイにはあまりにもシンプルですが、レトロハードウェアに適用された現代のコーディング技術の概念実証として機能します。プロジェクトのオープンソースの性質は、熱心な開発者がコードを研究して、Rustを組み込みシステム用に最適化する方法や、基本的なFPSエンジンをゼロから書く方法を理解できることを意味します。

特徴 詳細
コンソール Sony PSP-1000 (2004)
FPSターゲット 60 FPS (安定)
メモリ使用量 12 MB
解像度 480×272 (ネイティブ)
エンジン言語 Rust
UI言語 TypeScript, JavaScript

PocketJSは、完全なマルチプレイヤーリリースや他のレガシーコンソールへの移植の計画を発表していません。ソースコードはGitHubリポジトリで利用可能で、コードをいじったり、自分のPSP用にコンパイルしたい人は誰でも利用できます。今のところ、OpenStrikeは技術的な好奇心の対象です — Counter-Strikeがソニーの古い携帯機に公式に登場していたらどのようであったかの垣間見です。また、改造コミュニティが忘れられたハードウェアに新たな命を吹き込み続け、多くの人が時代遅れと考えるものを実験的なゲーム開発のキャンバスに変えていることを思い出させます。