Cinder Courier

夜が山の祠を覆い、すべての篝火が消えている。小さなキツネの飛脚が最後の残り火を持って岩棚を上り——道が尽きる前に3つすべてを再び灯そうとする。途中で灰の精霊や燃えさし箱を踏みつけながら。AIエージェントがPhaser 3で最初から最後まで手掛けた、手触り優先の完全な精密プラットフォーマーであり、スプライトが一つも存在しない段階から、すべての移動定数をグレーボックスで調整・計測して作られている。

今すぐプレイ

矢印 / A・D + スペース(長押しで高くジャンプ)・スマホではタッチパッド・約3.2 MB・Mでサウンド・Pでポーズ

▶ プレイ

コンセプトを契約とする

本作品はまずコンセプトから作られた——エンバーランタンを持つキツネの飛脚、灰の精霊の敵、小物シート、そして黄昏の祠のムードボードがパレットを決定した:藍色の夜に映える赤褐色、唯一の暖色として灯る琥珀のオレンジ。それらのシートに登場する要素はすべて実際のアセットとしてオーサリングされ、監査の各ラウンドでビルドと照合された。

Cinder Courier キツネのコンセプト
主人公のコンセプト——キツネが監査される際の基準となる契約
Cinder Courier フィナーレ(エンジン内)
「祠が再び輝く」——勝利状態、祠の門でエンジン内に実装されたもの

体感を先に、アートは後で

ゲーム全体は、アートが存在しない段階でグレーボックスとしてすでに動作し、クリア可能だった。移動レイヤーこそがこのラボの成果物であり、頂点でのホバーを持つ非対称重力、コヨーテタイム、ジャンプバッファリング、向きの先読みと接地垂直アンカーを備えたカメラで構成されている——各定数はFEEL_NOTES.mdに、その値が保持される理由と、却下された値が計測でどうだったかとともに記録されている。自動プレイヤーが監査の各ラウンドで全ビルドを最初から最後までクリアする。

グレーボックスのブロックアウト
ブロックアウト:グレーボックスとしてプレイ可能な全レベル、手触りは完成済み
FEEL_NOTES.mdより——ラボの研究成果
G_FALL 3800 = G_RISE の1.8倍。同じ122pxで実測した上昇345ms対下降299ms:上昇が意図を運び、下降が重みを運ぶ。却下された対称値2100/2100では、実測の上昇:下降比がほぼ1.0となり、滞空時間が35%増加し、「キツネが風船のように浮いていた」。
コヨーテタイム 90ms + 1フレーム:足場から離れる瞬間はフレームの「間」で起こる——補正しないとそのウィンドウは1フレーム分静かに縮み、低fps環境ではこの機能自体が死んでしまう。目視ではなく計測によって発見された。
ヒットストップは衝撃クラスごとに40/70/110ms——そのイベントがどれだけ重要か、どれだけ頻繁に発生するかに応じてスケールしている。一律80msは却下:クラスの区別がつかなくなり、頻発する箱の破壊がテンポを引きずってしまった。

Blenderパイプラインからスプライトへ

キツネはボクセル融合によるBlenderビルド——コンセプトに対して監査5ラウンド、レンダーサンプリングによるパレット照合済み——リギングされ、CMUモーションキャプチャのリターゲット(ランクリップ09_02、ジャンプ16_01、腰の速度計測でポーズを選定)で駆動し、スプライト行へレンダリングされている。灰の精霊、篝火、木箱、燃えさし、祠の門、タイル、そして3層すべてのパララックス山岳レイヤーは組み立て式のBlenderレンダーだ。音声はプラットフォームのサンプル音源エンジンによるもの——エンバーの軌跡に対するチェレスタのピッチラダー、篝火に対するハープとホルンの盛り上がり、足音と衝撃音のファミリー、その下に流れるプロシージャルな夜風。

出荷済みスプライト行:キツネの走り、ジャンプ、待機;灰の精霊のホバーとポップ
出荷済みの行:モーションキャプチャの走行サイクル・ジャンプの上昇/頂点/下降+呼吸する待機モーション・灰の精霊のホバーと踏みつぶしポップ

計測された体感

ブロックアウトには独自のベンチマークハーネスが同梱されている(Playwright、canvasレンダラー、生の performance.now() フレームデルタ——この実験環境の監査ホストにはGPUがなく、ヘッドレスのフレームスロットリングとエンジンのデルタスムージングが組み合わさらないと、見かけ上クリーンな60fpsを偽装してしまう)。以下の数値は同一の共有ホスト上の静穏負荷時間帯で計測したもの;シミュレーション空間での距離は負荷の影響を受けにくい。

指標実測値条件
入力 → ジャンプ速度11–32 ms(2フレーム以内)DOMのkeydownタイムスタンプ → 速度が適用される
コヨーテウィンドウ50msでは許可・160msでは拒否スクリプト化された足場離脱、90ms + 1フレームのウィンドウ
ジャンプバッファ着地フレームの押下から43ms後に発火着地の90ms前に押下
走り出し・停止135msで最大速度の95%・17pxで停止静止状態からのフルホールド/最大時に離す
ジャンプ軌道122px全体で上昇345ms、下降299ms・タップで39px長押しと70msタップ比較;48pxタイル
イベントフィードバック42ms以下、すべてのインタラクティブイベント許容100ms・同一ティック内での視覚応答
自動プレイスルー篝火3/3、18秒でクリア、エラーゼロ反応型入力ボット、デスクトップ;確認監査として反復実施
フレームコスト(本監査ホスト)ベスト平均21.1ms・p95 32.7msGPUなし、残余負荷のある共有マシン上でのソフトウェアcanvas——実機ではWebGLレンダラーが60fpsで動作
ペイロード3.2 MB・66ファイルエンジン 1.2 MB + アート 0.7 MB + サンプルオーディオ 1.2 MB

地道に獲得した本物のエンジン機能

アーケード物理演算、ステート駆動

ワールドの重力はゼロ。キャラクターの重力はフレームごとに選択される——上昇、頂点での静止、落下——そして終端速度でクランプされる。

手動カメラリグ

指数平滑化、進行方向の先読みは位置よりゆっくり再照準、非対称ウィンドウを持つ接地垂直アンカー、減衰する平行移動のみのシェイク。

RenderTextureタイルマップ

各プラットフォームのタイルグリッドを一度だけRenderTextureに焼き込み——ソフトウェアキャンバスの床の上でプラットフォームごとに1フレーム1回の描画。

スプライトアニメーション

モーションキャプチャのフレーム行。走行レートは接地速度に連動;ジャンプポーズは垂直速度によって選択;割り込み対応のスクワッシュトゥイーン。

至る所にパーティクル

走行スキッドのダスト、重力下のクレート破片、灰の弾け、燠の煌めき、各火鉢のフレームループ——調整された5種のエミッター。

サンプル音源によるオーディオ

プラットフォームのWeb Audioエンジン:エンベロープ処理されたサンプル音声、バリエーションのジッター、FXセンド、初回ジェスチャーでのアンロック、プロシージャルな風の環境音。

コヨーテタイム 90ms + 1フレーム入力バッファ 130ms 落下重力 1.8×頂点静止 |vy|<55 ジャンプカット 0.42ヒットストップ 40/70/110ms シェイク減衰 11/秒、回転なし先読み 96px スクワッシュ 1.28/0.72 @ 70ms2段階スタンプバウンド セレスタの燠の音階モーション低減 0.2× 矢印キー + WASD + タッチローカライズ対応文字列
BuildMidas Phaser Labによってエンドツーエンドで構築 — コンセプト立案、モデリング、モーションキャプチャアニメーション、調整、計測、検証はすべてAIエージェントが担当。同じパイプラインがAI Game Builderを支えています。