غروب دارد بر درهای آهکی فرود میآید و پرستوهای غار به لانه بازمیگردند. طناب حصیری را پرتاب کن، تاب بخور، قوس را پمپاژ کن و در لحظهی درست رها کن تا شتابت را به حلقهی بعدی برسانی — شش لانه باید جمع شود و باید پیش از پایان نور به آشیانه رسید. یک بازی کامل مبتنی بر گذر با تکانه که از ابتدا تا انتها توسط عاملهای هوش مصنوعی روی Phaser 4 نوشته شده، با فیزیکی دستنویس که هر عددش قابل اندازهگیری است.
برای پرتاب و گرفتن طناب SPACE را نگه دار · A/D برای پمپاژ · W/S برای جمع کردن طناب · لمسی: راست را نگه دار، چپ را بکش · ۳.۴ مگابایت تا اولین فریم (۳.۷ مگابایت نمونههای صوتی در پسزمینه بارگذاری میشود) · در چند ثانیه شروع میشود
سرویس تصویرسازی مفهومی پلتفرم در این چرخه اعتبار کافی نداشت (credit_balance_exhausted، ثبتشده در concept/gen.log)، بنابراین هر سه شیت مفهومی بهجای آن در آزمایشگاه نقاشی شدند — که در نهایت تعهد قویتری از آب درآمد. هر رنگ روی آنها یک کد هگز نامگذاریشده و هر نسبتی یک اندازهٔ مشخص است، بنابراین ساخت در Blender و فایل نهایی بهصورت عددی و نه چشمی در برابر شیت بررسی میشوند. شیت درهٔ زیر سه باند پارالاکس، خط فروریزش مه و این قاعده را ثابت میکند که شیب رنگ آسمان همان ساعت است.


کل دره پیش از وجود هیچ اثر هنری، بهصورت جعبههای خاکستری اجرا شد و توسط بازیکنی خودکار پیموده شد. لایهٔ حسوحال در همانجا تنظیم شد: محدودیت طناب، پمپ، قرقره، دو گرانش، دوربین متناسب با سرعت. سپس یک کاوشگر قابلیتدسترسی، نسخهٔ عرضهشدهٔ
step() مستقیماً — هزاران آزمایش شارژ-و-رهاسازی نوسانی بدون رندر و بدون ساعت واقعی — و گزارش داد که یک نوسانگر شارژشده ۲۰۲ تا ۵۵۸ پیکسل بالاتر از حلقهی خودش برمیخیزد و تا ۲۳۵۳ پیکسل به جلو حمل میکند. هر آشیانه و هر لبهی خار در این مرحله روی نقطهای قرار دارد که یکی از آن آزمایشها واقعاً به آن رسیده است؛ نزدیکترین فاصله برای هر شش مورد ۰ تا ۱۰ پیکسل است. آشیانهها در این اثر با چشم قرار داده نشدهاند.


جمعآورنده مدلی است که با کد ساخته شده — بدون مجسمهسازی دستی، بدون فروشگاه دارایی. چرخهی تابخوردن از موشنکپچر است، اما نه از یک کلیپ واحد. کتابخانهی برگزیدهی استودیو اصلاً حرکت آویزانشدن نداشت، پس بهجای حدس زدن شمارهی سوژهها، خودِ فهرست توصیفی آرشیو کامل CMU خوانده شد — که سوژهی شمارهی ۴۳ را یافت، «زمین بازی: گرفتن میله، تابخوردن بدن». پس از بازهدفگیری و اندازهگیری فریمبهفریم (ارتفاع مچ نسبت به ارتفاع سر، عمودیت تنه)، آن کلیپ فقط هشت فریم از ۱۸۱ فریم آویزان قابل استفاده دارد، و هشت فریم مجاور در ۱۲۰ فریم بر ثانیه همان تصویر هستند: چرخهای که از آنها نمونهبرداری شود، بهدرستی از آزمون تفاوت فریم مجاور مردود میشود.
پس این چرخه ترکیبی است. زنجیرهی بازو در حالت گرفتن سربالا ثابت نگه داشته شده و پاها و ستون فقرات با یک کلیپ حرکتی (CMU 02_01) هدایت میشوند، درحالیکه منحنیهای حرکتی بازو از خروجی نهایی حذف شدهاند — چون استخوانی که کیفریم دارد، در هر تغییر فریم دوباره از اکشنش ارزیابی میشود و بهطور خاموش، وضعیت تنظیمشدهی دستی را بازنویسی میکند. بازوها روی طناب قفلشده، پاها بهصورت قیچیوار جلو-عقب حرکت میکنند و روی آن، تاب و بالا-پایینرفتن رانها بهصورت دستی طراحی شده — که دقیقاً همان چیزی است که تابخوردنِ روی طناب باید بهنظر برسد. برگهی نهایی از آزمون تفاوت فریم مجاور در بازهی ۶.۱۷ تا ۹.۷۰ در برابر آستانهی ۴.۰ عبور میکند — ابتدا در ۳.۸۱ مردود شد و راهحل افزودن حرکت گمشده بود، نه پایینآوردن آستانه.
چهره در برگهی بدن پخته (بیک) نشده است. بهصورت برگهی مستقل پنجحالته رندر میشود — خنثی، پلکزدن، هشدار، برد، آسیبدیدن — و خط تولید، محور سر را به پیکسل برای هر فریم بدن خروجی میگیرد، تا موتور بتواند چهره را روی هر ژستی ترکیب کند. همین است که به شخصیت اجازه میدهد هر چند ثانیه پلک بزند و در میانهی تابخوردن حالت چهرهاش را عوض کند، بدون آنکه برگهی بدن در تعداد حالتهای چهره ضرب شود.






خروجی این آزمایشگاه فقط بازی نیست — اعداد و دلایل آن هم هست. هر ثابت در برابر شبیهسازی نهایی بهصورت A/B بررسی شد و مقادیری که کنار گذاشته شدند، اندازهگیری شدند، نه اینکه صرفاً ادعا شوند. دو نمونه از این بررسیها:
| قدرت پمپاژ | سرعت اوج پس از ۶ ثانیه | تعداد تغییر جهت در ۶ ثانیه | نتیجه |
|---|---|---|---|
| ۷۰۰ پیکسل بر ثانیه² | ۱۴۴۱ پیکسل بر ثانیه | 4 | بیجان — نزدیک به پنج ثانیه طول میکشد تا به جایی برسد |
| ۱۱۵۰ پیکسل بر ثانیه² — نسخهی نهایی | ۱۵۴۵ پیکسل بر ثانیه | 5 | مانند یک آونگ بهنظر میرسد؛ ۳.۵ ثانیه تا رسیدن به سرعت کامل |
| ۱۶۰۰ پیکسل بر ثانیه² | ۱۹۷۲ پیکسل بر ثانیه | 8 | شروع به شبیهشدن به یک موتور میکند، نه یک تاب |
| ۲۴۰۰ پیکسل بر ثانیه² | ۲۳۶۳ پیکسل بر ثانیه | 10 | ده تغییر جهت در شش ثانیه — قوس غیرقابلخواندن است |
تعداد تغییر جهت، معیار خوانایی است: یک آونگ تغییر جهت میدهد، یک موتور نه. بررسی دوم چیزی بود که ما را غافلگیر کرد — جمعکردن طناب، تکانهی زاویهای را حفظ میکند، پس بالا کشیدن خود روی طناب در پایین قوس واقعاً سرعتت را بیشتر میکند، اما تا جایی محدود.
| نرخ جمعکردن طناب | سرعت اوج | نتیجه |
|---|---|---|
| ۰ پیکسل بر ثانیه (فقط پمپاژ) | ۱۵۴۵ پیکسل بر ثانیه | خط پایه |
| ۳۳۰ پیکسل بر ثانیه — نسخهی نهایی | ۱۸۴۰ پیکسل بر ثانیه | ۱۹٪+ بیشتر از پمپاژ بهتنهایی |
| ۷۰۰ پیکسل بر ثانیه | ۱۷۱۱ پیکسل بر ثانیه | بدتر. طناب به حداقل طول خود میرسد و تاب به یک دایرهی تنگ و سریع فرومیریزد، بدون هیچ قوسی برای پرتاب |
هزینههای فریم از جعبهی ممیزی بهدست آمدهاند: میزبانی مشترک و بدون GPU که رندرر نرمافزاری کروم را اجرا میکند. این بدترین حالتی است که این اثر ممکن است تجربه کند و اعداد همانطور که اندازهگیری شدهاند گزارش میشوند، حتی آنهایی که ترجیح میدادیم چاپ نکنیم.
| اندازهگیری | نتیجه | شرایط |
|---|---|---|
| ورودی تا پاسخ | ۰ تا ۱۰.۳ میلیثانیه (۸ نمونه) | فشردن مسلحشده ← اعمال محدودیت طناب، مسیر واقعی صفحهکلید |
| کشش ناگهانی طناب تا بازخورد | ۳۲.۳ میلیثانیه | بودجه ۱۰۰ میلیثانیه |
| برداشت از لانه تا بازخورد | ۲۵.۵ میلیثانیه | بودجه ۱۰۰ میلیثانیه؛ عمداً بدون توقف ضربه |
| استقرار ضربهٔ دوربین | ۲۴۰ / ۲۷۰ / ۳۰۶ میلیثانیه | سطوح ۴ / ۹ / ۱۵ پیکسل تا کمتر از ۰.۴ پیکسل، بدون هیچ سرریز |
| نردبان توقف ضربه در کشش ناگهانی طناب | ۲۶ / ۵۴ / ۸۴ میلیثانیه | سرعت بستن شعاعی ۴۰۳ / ۷۱۲ / ۱۰۳۴ پیکسل بر ثانیه |
| بازهٔ قابلدسترس | ۲۰۲ تا ۵۵۸ پیکسل بالای حلقه | ۱۹ حلقه × ۹۰ آزمایش پمپشده، تابع ()step عرضهشده |
| قابلیت دسترسی به لانه | ۰ تا ۱۰ پیکسل نزدیکترین برخورد، ۶ از ۶ | هر لانه روی مسیری قرار دارد که یک آزمایش به آن رسیده است |
| هزینهٔ فریم | میانگین ۴۲.۷ میلیثانیه · صدک ۹۵ برابر با ۹۵.۲ میلیثانیه | بهترین از ۵ × ۱۰ ثانیه بازی رباتمحور، خام performance.now() دلتاها، در میانگین بار میزبان 39.6 — بوم نرمافزاری، جعبهی مشترک بدون GPU. هر اجرا در audit/bench_runs.jsonl، از جمله مواردی در بار ۴۳ که ۹۳ میلیثانیه اندازهگیری شدند. |
| حجم داده | ۳.۴ مگابایت تا اولین فریم · مجموع ۵.۵ مگابایت | ابتدا موتور + اسکریپتها + شیتها؛ نمونههای سازی پس از اولین فریم بهصورت جریانی بارگذاری میشوند |
| دورهای هنری | مدل ۴ · لوازم ۱ · محیط ۳ · اسپرایت ۵ · سیستمها ۴ | بازبینی مدل، لوازم، محیط و سیستمها |
ردیف نهچندان زیبا. ۶۰ فریم بر ثانیه روی این جعبهٔ آزمون قابلنمایش نیست: چون GPU ندارد، Chromium به رسترایزر نرمافزاری بازمیگردد و هزینهٔ فریمی که اندازه میگیریم عمدتاً ناشی از رستریسازی است، نه خود بازی. روی سختافزار واقعی همین نسخه با رندرر WebGL اجرا میشود. ما آنچه را اندازه گرفتهایم گزارش میکنیم، نه آنچه را انتظار داریم.
مبتنی بر موقعیت، فقط کشیده، بدون کشسانی — شل تا لحظهٔ کشیدهشدن.
پایستگی تکانهٔ زاویهای: کوتاهکردن طناب سرعتتان را بیشتر میکند.
جهان هنگام گرفتن طناب ۱.۲۶ برابر قویتر میکشد.
زوم از سرعت پیروی میکند، عمداً کندتر از دنبالکردن موقعیت.
میرایی بحرانی در امتداد قائم طناب. فقط انتقال، هرگز چرخش.
پنج حالت روی محور سری پختهشده — پلکزدن و واکنش در هر وضعیت بدنی.
هیچجا صدای پسزمینهٔ محیطی وجود ندارد: هوا یک آکورد پد کِشیده در دل موسیقی است.
هر جمعآوردنی روی مسیری قرار داده شده که یک آزمایش شبیهسازی واقعاً به آن رسیده است.
پیشفرض جدید پلتفرم برای بازیهای دوبعدی در سال ۲۰۲۶؛ ۲۳ از ۲۳ آزمون API روی canvas و WebGL موفق میشوند.