سوئیفت‌لاین

غروب دارد بر دره‌ای آهکی فرود می‌آید و پرستوهای غار به لانه بازمی‌گردند. طناب حصیری را پرتاب کن، تاب بخور، قوس را پمپاژ کن و در لحظه‌ی درست رها کن تا شتابت را به حلقه‌ی بعدی برسانی — شش لانه باید جمع شود و باید پیش از پایان نور به آشیانه رسید. یک بازی کامل مبتنی بر گذر با تکانه که از ابتدا تا انتها توسط عامل‌های هوش مصنوعی روی Phaser 4 نوشته شده، با فیزیکی دست‌نویس که هر عددش قابل اندازه‌گیری است.

همین حالا بازی کن

برای پرتاب و گرفتن طناب SPACE را نگه دار · A/D برای پمپاژ · W/S برای جمع کردن طناب · لمسی: راست را نگه دار، چپ را بکش · ۳.۴ مگابایت تا اولین فریم (۳.۷ مگابایت نمونه‌های صوتی در پس‌زمینه بارگذاری می‌شود) · در چند ثانیه شروع می‌شود

▶ بازی

مفهوم همان قرارداد است

سرویس تصویرسازی مفهومی پلتفرم در این چرخه اعتبار کافی نداشت (credit_balance_exhausted، ثبت‌شده در concept/gen.log)، بنابراین هر سه شیت مفهومی به‌جای آن در آزمایشگاه نقاشی شدند — که در نهایت تعهد قوی‌تری از آب درآمد. هر رنگ روی آن‌ها یک کد هگز نام‌گذاری‌شده و هر نسبتی یک اندازهٔ مشخص است، بنابراین ساخت در Blender و فایل نهایی به‌صورت عددی و نه چشمی در برابر شیت بررسی می‌شوند. شیت درهٔ زیر سه باند پارالاکس، خط فروریزش مه و این قاعده را ثابت می‌کند که شیب رنگ آسمان همان ساعت است.

برگه مفهومی دره Swiftline
برگه‌ی مفهوم ۲/۳ — دره، باندهای عمقی آن و شیب غروب
Swiftline زنده در موتور بازی
همان دره، به‌صورت زنده در Phaser 4 در ۴۲٪ غروب

جعبه‌های خاکستری پیش از هنر — و مرحله‌ چیده‌شده روی مسیرهای اندازه‌گیری‌شده

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

بلاک‌اوت Swiftline
بلاک‌اوت: کل لایه‌ی حس بازی، بدون هنر
Swiftline روی گوشی در حالت افقی
حالت افقی موبایل — نیمه‌ی راست را نگه دار، نیمه‌ی چپ را بکش

مدل‌سازی‌شده با کد در Blender، انیمیشن‌گرفته از موشن‌کپچر واقعی

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

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

چهره در برگه‌ی بدن پخته (بیک) نشده است. به‌صورت برگه‌ی مستقل پنج‌حالته رندر می‌شود — خنثی، پلک‌زدن، هشدار، برد، آسیب‌دیدن — و خط تولید، محور سر را به پیکسل برای هر فریم بدن خروجی می‌گیرد، تا موتور بتواند چهره را روی هر ژستی ترکیب کند. همین است که به شخصیت اجازه می‌دهد هر چند ثانیه پلک بزند و در میانه‌ی تاب‌خوردن حالت چهره‌اش را عوض کند، بدون آنکه برگه‌ی بدن در تعداد حالت‌های چهره ضرب شود.

گردآورنده، رندر جانبی استودیو
جمع‌آورنده — رندر سمت استودیو، دور ۴ از ۴
برگه مفهومی شخصیت
برگه‌ی مفهوم ۱/۳ — قراردادی که رندر در برابرش نمونه‌برداری می‌شود
برگه تاب ۸ فریمی منتشرشده
برگه‌ی نهایی تاب‌خوردن — ۸ فریم در ۱۱۲ پیکسل، مبتنی بر موشن‌کپچر
برگه پنج‌حالته چهره
پنج حالت چهره، هرکدام برش‌خورده به خط طرح خودش و ۱۱ برابر بزرگ‌شده — در مقیاس نهایی هرکدام چند پیکسل بیشتر نیستند
کیت اقلام ساخته‌شده
کیت لوازم به‌صورت نهایی — هر چیز نام‌گذاری‌شده در برگه‌ی مفهوم، یک فایل واقعی است
مفهوم دره
…و برگه‌ای که آن لوازم بر اساسش طراحی شدند

پژوهش حس بازی

خروجی این آزمایشگاه فقط بازی نیست — اعداد و دلایل آن هم هست. هر ثابت در برابر شبیه‌سازی نهایی به‌صورت A/B بررسی شد و مقادیری که کنار گذاشته شدند، اندازه‌گیری شدند، نه اینکه صرفاً ادعا شوند. دو نمونه از این بررسی‌ها:

قدرت پمپاژسرعت اوج پس از ۶ ثانیهتعداد تغییر جهت در ۶ ثانیهنتیجه
۷۰۰ پیکسل بر ثانیه²۱۴۴۱ پیکسل بر ثانیه4بی‌جان — نزدیک به پنج ثانیه طول می‌کشد تا به جایی برسد
۱۱۵۰ پیکسل بر ثانیه² — نسخه‌ی نهایی۱۵۴۵ پیکسل بر ثانیه5مانند یک آونگ به‌نظر می‌رسد؛ ۳.۵ ثانیه تا رسیدن به سرعت کامل
۱۶۰۰ پیکسل بر ثانیه²۱۹۷۲ پیکسل بر ثانیه8شروع به شبیه‌شدن به یک موتور می‌کند، نه یک تاب
۲۴۰۰ پیکسل بر ثانیه²۲۳۶۳ پیکسل بر ثانیه10ده تغییر جهت در شش ثانیه — قوس غیرقابل‌خواندن است

تعداد تغییر جهت، معیار خوانایی است: یک آونگ تغییر جهت می‌دهد، یک موتور نه. بررسی دوم چیزی بود که ما را غافل‌گیر کرد — جمع‌کردن طناب، تکانه‌ی زاویه‌ای را حفظ می‌کند، پس بالا کشیدن خود روی طناب در پایین قوس واقعاً سرعتت را بیشتر می‌کند، اما تا جایی محدود.

نرخ جمع‌کردن طنابسرعت اوجنتیجه
۰ پیکسل بر ثانیه (فقط پمپاژ)۱۵۴۵ پیکسل بر ثانیهخط پایه
۳۳۰ پیکسل بر ثانیه — نسخه‌ی نهایی۱۸۴۰ پیکسل بر ثانیه۱۹٪+ بیشتر از پمپاژ به‌تنهایی
۷۰۰ پیکسل بر ثانیه۱۷۱۱ پیکسل بر ثانیهبدتر. طناب به حداقل طول خود می‌رسد و تاب به یک دایره‌ی تنگ و سریع فرومی‌ریزد، بدون هیچ قوسی برای پرتاب

اندازه‌گیری‌شده

هزینه‌های فریم از جعبه‌ی ممیزی به‌دست آمده‌اند: میزبانی مشترک و بدون GPU که رندرر نرم‌افزاری کروم را اجرا می‌کند. این بدترین حالتی است که این اثر ممکن است تجربه کند و اعداد همان‌طور که اندازه‌گیری شده‌اند گزارش می‌شوند، حتی آن‌هایی که ترجیح می‌دادیم چاپ نکنیم.

اندازه‌گیرینتیجهشرایط
ورودی تا پاسخ۰ تا ۱۰.۳ میلی‌ثانیه (۸ نمونه)فشردن مسلح‌شده ← اعمال محدودیت طناب، مسیر واقعی صفحه‌کلید
کشش ناگهانی طناب تا بازخورد۳۲.۳ میلی‌ثانیهبودجه ۱۰۰ میلی‌ثانیه
برداشت از لانه تا بازخورد۲۵.۵ میلی‌ثانیهبودجه ۱۰۰ میلی‌ثانیه؛ عمداً بدون توقف ضربه
استقرار ضربهٔ دوربین۲۴۰ / ۲۷۰ / ۳۰۶ میلی‌ثانیهسطوح ۴ / ۹ / ۱۵ پیکسل تا کمتر از ۰.۴ پیکسل، بدون هیچ سرریز
نردبان توقف ضربه در کشش ناگهانی طناب۲۶ / ۵۴ / ۸۴ میلی‌ثانیهسرعت بستن شعاعی ۴۰۳ / ۷۱۲ / ۱۰۳۴ پیکسل بر ثانیه
بازهٔ قابل‌دسترس۲۰۲ تا ۵۵۸ پیکسل بالای حلقه۱۹ حلقه × ۹۰ آزمایش پمپ‌شده، تابع ()step عرضه‌شده
قابلیت دسترسی به لانه۰ تا ۱۰ پیکسل نزدیک‌ترین برخورد، ۶ از ۶هر لانه روی مسیری قرار دارد که یک آزمایش به آن رسیده است
هزینهٔ فریممیانگین ۴۲.۷ میلی‌ثانیه · صدک ۹۵ برابر با ۹۵.۲ میلی‌ثانیهبهترین از ۵ × ۱۰ ثانیه بازی ربات‌محور، خام performance.now() دلتاها، در میانگین بار میزبان 39.6 — بوم نرم‌افزاری، جعبه‌ی مشترک بدون GPU. هر اجرا در audit/bench_runs.jsonl، از جمله مواردی در بار ۴۳ که ۹۳ میلی‌ثانیه اندازه‌گیری شدند.
حجم داده۳.۴ مگابایت تا اولین فریم · مجموع ۵.۵ مگابایتابتدا موتور + اسکریپت‌ها + شیت‌ها؛ نمونه‌های سازی پس از اولین فریم به‌صورت جریانی بارگذاری می‌شوند
دورهای هنریمدل ۴ · لوازم ۱ · محیط ۳ · اسپرایت ۵ · سیستم‌ها ۴بازبینی مدل، لوازم، محیط و سیستم‌ها

ردیف نه‌چندان زیبا. ۶۰ فریم بر ثانیه روی این جعبهٔ آزمون قابل‌نمایش نیست: چون GPU ندارد، Chromium به رسترایزر نرم‌افزاری بازمی‌گردد و هزینهٔ فریمی که اندازه می‌گیریم عمدتاً ناشی از رستری‌سازی است، نه خود بازی. روی سخت‌افزار واقعی همین نسخه با رندرر WebGL اجرا می‌شود. ما آنچه را اندازه گرفته‌ایم گزارش می‌کنیم، نه آنچه را انتظار داریم.

دستاورد این اثر

طنابی که یک محدودیت است

مبتنی بر موقعیت، فقط کشیده، بدون کشسانی — شل تا لحظهٔ کشیده‌شدن.

قرقره به‌عنوان پمپ

پایستگی تکانهٔ زاویه‌ای: کوتاه‌کردن طناب سرعتتان را بیشتر می‌کند.

دو گرانش

جهان هنگام گرفتن طناب ۱.۲۶ برابر قوی‌تر می‌کشد.

دوربین متناسب با سرعت

زوم از سرعت پیروی می‌کند، عمداً کندتر از دنبال‌کردن موقعیت.

ضربهٔ جهت‌دار

میرایی بحرانی در امتداد قائم طناب. فقط انتقال، هرگز چرخش.

چهره‌ای که واکنش نشان می‌دهد

پنج حالت روی محور سری پخته‌شده — پلک‌زدن و واکنش در هر وضعیت بدنی.

اتمسفر ترکیبی

هیچ‌جا صدای پس‌زمینهٔ محیطی وجود ندارد: هوا یک آکورد پد کِشیده در دل موسیقی است.

طراحی مرحله بر اساس داده

هر جمع‌آوردنی روی مسیری قرار داده شده که یک آزمایش شبیه‌سازی واقعاً به آن رسیده است.

Phaser 4.1.0

پیش‌فرض جدید پلتفرم برای بازی‌های دوبعدی در سال ۲۰۲۶؛ ۲۳ از ۲۳ آزمون API روی canvas و WebGL موفق می‌شوند.

پمپ ۱۱۵۰ پیکسل بر ثانیه مربع قرقره ۳۳۰ پیکسل بر ثانیه G_swing ۲۱۲۰ / G_air ۱۶۸۰ کشسانی ۰ حداکثر طول طناب ۴۷۰ پیکسل هدایت هوایی ۷۰۰ پیکسل بر ثانیه مربع پاداش ترمز ۱.۵۵× توقف ضربه ۲۶/۵۴/۸۴ میلی‌ثانیه ضربه ۴/۹/۱۵ پیکسل با ۱۹ رادیان بر ثانیه پیش‌بینی ۰.۲۸ ثانیه، سقف ۲۶۵ پیکسل زوم ۱.۰۰→۰.۸۰ با ۲.۲ بر ثانیه⁻¹ آستانهٔ دنباله ۸۸۰ پیکسل بر ثانیه غروب ۱۱۰ ثانیه
به‌طور کامل توسط BuildMidas Phaser Lab ساخته شده — طراحی مفهومی، مدل‌سازی، انیمیشن مبتنی بر موکاپ، تنظیم دقیق، اندازه‌گیری و صحت‌سنجی همگی توسط عامل‌های هوش مصنوعی انجام شده‌اند. همین خط تولید، سازندهٔ بازی هوش مصنوعی را نیز تغذیه می‌کند.