さて、技術解説シリーズの第10回となる今回は、『2048×3D』のコアエンジンを開発する過程で生まれた2つのR&D(研究開発)プロジェクトについてお話しします。1つ目は3×3×3の立体スライドパズルをそのままターン制バトルのエンジンに組み込んだ3Dパズル×デッキ構築ローグライトRPG『Aethel-Net(エーテル・ネット)』のプロトタイプ設計、もう1つはブラウザだけで安全にデータを扱うためのクライアントサイド暗号化(Web Crypto API)と状態永続化のアーキテクチャです。
一見するとパズルゲームとRPG、そしてセキュリティ技術は別ジャンルに見えるかもしれませんが、根底にある設計思想はすべて共通しています。すなわち「外部ライブラリや重厚なバックエンドサーバーに依存せず、ブラウザ標準API(WebGL / Web Audio / Web Crypto / LocalStorage)のポテンシャルだけでどこまで高度な体験を作れるか」という挑戦なわけです。
01. スコア稼ぎから「攻撃・防御・回復変換」へ:3×3×3パズルをRPG戦闘エンジンにする発想
『2048×3D』のHARDモード(GLITCHブロックとMulti-UNDO)をテストプレイしていたとき、「この『邪魔なブロックを隣接マージのショックウェーブで破壊する』というメカニクスは、そのまま敵キャラクターとのターン制バトルになるのではないか?」と思いついたのがローグライト派生プロトタイプ『Aethel-Net』の出発点でした。
通常の2048では「合体した数値=そのままスコア加算」ですが、ローグライト版では3×3×3キューブ内で発生したマージ結果がリアルタイムに戦闘リソースへ変換されます。
- 通常マージによるダメージ出力とコンボ倍率:1ターン内の合体数値合計に対して連続マージボーナスが掛かり、敵ノード(Firewall SentinelやNull Pointer Daemonなど)のシールドおよびHPを削ります。
- 敵の妨害行動(状態異常タイル注入):敵は数ターンごとに「ロックタイル(移動不能)」「ウイルス(毎ターンダメージ)」「ブラインド(数値秘匿)」を3×3×3盤面へ直接撃ち込んできます。プレイヤーはパズルの6方向スライドを駆使して、敵の妨害タイルを隣接マージで浄化しながら戦うわけです。
- プラグイン(レリック)による物理法則の書き換え:例えば「Z軸(奥・手前)方向にスライドしてマージしたときだけダメージ1.5倍」「盤面中央
(1,1,1)に存在するタイルの数値を毎ターン2倍にする」「特定数値(64以上)を作るとシールドを貼る」といったプラグインを最大5枠までビルド構築できます。
02. 画面分割レイアウトと「3層Zスライステーブル(Z=0 / Z=1 / Z=2)」による死角ゼロ化
このローグライトプロトタイプを試作する際、UI設計で最も重視したのが「戦闘状況(上部)と3Dパズル操作(下部)の視線移動を最小化し、かつ3×3×3の内部死角を完全にゼロにすること」でした。
『2048×3D』本編ではX-RayモードとLayer Slicerで死角を解消しましたが、1手のミスでHPが尽きるローグライトRPGでは、ボタンを押して切り替える手間すら惜しい場面があります。そこで『Aethel-Net』では、下部左側の3D WebGLキューブのすぐ右隣に、手前層(Z = 0)・中間層(Z = 1)・奥層(Z = 2)の3枚の3×3断面図を常時並べてリアルタイム同期表示する「3層Zスライス・インスペクタ」を配置しました。
これにより、左側の3Dキューブで立体的なスライド方向とアニメーションを直感的に掴みつつ、右側に目をやるだけで27マスすべての数値と状態異常を1ミリ秒の死角もなく把握できるようになったわけです。この「3Dビューと2D断面インスペクタのハイブリッド表示」で得られた知見は、『2048×3D』本編のインタラクティブ練習場(/practice)における6方向比較インスペクタUIにもそのままフィードバックされています。
03. 7層DAGルート分岐・MEM経済と「38,064通りのプラグイン×6方向網羅テスト」
ローグライトとしてのリプレイ性を支えるため、ステージ進行には7階層・15ノードからなる有向非巡回グラフ(DAG:Directed Acyclic Graph)マップ生成アルゴリズムを実装しました。プレイヤーはCOMBAT(通常戦)・ELITE(強敵+高レア報酬)・EVENT(ランダムイベント)・SHOP(MEM通貨によるプラグイン購入・削除・HP回復)・REST(修復またはプラグイン強化)・BOSS(階層ボス)のルートを選択しながら最深部を目指します。
ここで開発者として徹底したのが、「プラグインの組み合わせによってパズルがフリーズしたり、NaNダメージが出たりしないか」の自動検証です。ローグライトは多様なシナジーが魅力ですが、掛け算や配列操作の順序が少し狂うだけで簡単にバグります。そこでNode.jsの自動検証スイート(全68テストケース)を構築し、全プラグイン・全敵タイプ・ランダム盤面状態に対して6方向すべての移動を網羅実行する計38,064通りのファジング検証(エラー0件・勝率バランス計測)をパスさせています。
04. ブラウザ完結型セキュリティの研究:Web Crypto API(ECDH P-256 + AES-256-GCM)とURLフラグメント隔離
そしてもうひとつ、当ラボで並行して研究開発を進めているのが、サーバーに平文データを一切預けないクライアント完結型暗号化アプリケーション『SecureNote(Spy Note Prototype)』のセキュリティ設計です。
Webアプリで機密メモやゲームのセーブデータを共有・保存するとき、サーバー側のデータベースにそのまま保存してしまうと、万が一サーバーが侵害された際に情報漏洩リスクが生じます。そこでブラウザネイティブのWeb Crypto API(window.crypto.subtle)だけを使い、以下のゼロ知識(Zero-Knowledge)暗号化パイプラインを設計しました。
| 暗号プリミティブ・機構 | 採用アルゴリズム・仕様 | セキュリティ上の役割 |
|---|---|---|
| 鍵合意(Key Agreement) | ECDH(楕円曲線ディフィー・ヘルマン / P-256) |
送信者と受信者の公開鍵・秘密鍵ペアから、通信経路上に鍵を流すことなく共通の共有シークレットを導出する。 |
| 鍵導出(Key Derivation) | HKDF-SHA256 / PBKDF2(600,000回反復) |
共有シークレットやパスフレーズにランダムソルトを掛け合わせ、256ビットの強力な共通鍵を生成する。 |
| 認証付き暗号(AEAD) | AES-256-GCM(96-bit ランダムIV + 128-bit 認証タグ) |
本文を暗号化するとともに、1ビットでも改ざんされた場合は復号時に即座に検知して拒否する。 |
| 鍵配送の隔離 | URL # フラグメント(Hash Fragment) |
RFC 3986仕様により、URLの#以降はHTTPリクエストとしてサーバーへ絶対に送信されない性質を利用し、復号鍵をブラウザ内だけに封じ込める。 |
この「ブラウザが標準で備えているAPIを正しく組み合わせれば、外部ライブラリ0個でも堅牢で高速なアプリケーションが作れる」というエンジニアリング哲学こそが、『2048×3D』のCanvas2Dテクスチャ生成、Web Audioシンセサイザー、そしてローカルストレージのフォールバック設計すべてに通底している背骨なわけです。
さて、全10回にわたってお届けしてきた『2048×3D』技術&攻略ディープダイブ連載、ここまでお付き合いいただき本当にありがとうございました!コードの隅々まで意図を込めて作ったゲームですので、この記事で解説した仕様やテクニックを武器に、3×3×3の8192達成やランキング上位へ挑戦してもらえたら嬉しいわけです。それでは、リーダーボードの上位で対戦お願いします!
2048×3D の全モード・練習場で立体パズルを極める
CLASSIC・SPEEDRUN・HARD・PARTYの4モードと局面練習ツールで、3次元空間の思考力を鍛えよう。