ہر کسی کے پاس وہ فولڈر ہوتا ہے۔ وہ فولڈر جو ادھورے ٹیوریلز، متروکہ سائیڈ پروجیکٹس، اور ایسی README فائلوں سے بھرا ہوتا ہے جو اپنی صلاحیت سے زیادہ وعدے کرتی ہیں۔ یہ اچھے ارادوں کا ایک قبرستان ہے، اور اس سے نکلنے کا واحد راستہ کچھ ایسا لانچ کرنا ہے — کچھ بھی — جو حقیقت میں کام کرے۔

مکمل کرنے کی وہی تڑپ LIAR کی تخلیق کا سبب بنی، جو ایک ایسا براؤزر گیم ہے جو اتنا چھوٹا اور اتنا مشکل ہے کہ ایک واحد 28KB کی HTML فائل میں سما جاتا ہے۔ کوئی فریم ورکس نہیں۔ کوئی امیج فائلز نہیں۔ کوئی ساؤنڈ ایسٹس نہیں۔ صرف خالص HTML5 Canvas، Web Audio API، اور ایک سخت مزاج۔

اینٹی ٹیوریل

زیادہ تر سیکھنے کے منصوبے اس لیے ختم ہو جاتے ہیں کیونکہ وہ ضرورت سے زیادہ بڑھ جاتے ہیں۔ آپ ایک کینوس ٹیوریل سے شروع کرتے ہیں، ایک موومنٹ اسکرپٹ شامل کرتے ہیں، پھر فیصلہ کرتے ہیں کہ آپ کو ایک ٹائل ایڈیٹر کی ضرورت ہے، پھر ایک entity component system، اور پھر ایک Webpack config جسے کمپائل ہونے میں گیارہ سیکنڈ لگتے ہیں۔ چھ ہفتوں بعد آپ کے پاس ایک بلڈ پائپ لائن تو ہوتی ہے لیکن گیم نہیں ہوتی۔

LIAR اس جال سے انکار کرتا ہے۔ یہ ایک ری ایکشن گیم ہے۔ ایک بٹن آپ کو TAP، HOLD، یا DON'T کرنے کا کہتا ہے۔ ٹائمر ختم ہونے سے پہلے آپ کو عمل کرنا ہوتا ہے۔ ابتدائی راؤنڈز اعتماد قائم کرتے ہیں۔ ٹیکسٹ کہتا ہے TAP، تو آپ ٹیپ کرتے ہیں۔ ٹیکسٹ کہتا ہے HOLD، تو آپ اپنی انگلی دبا کر رکھتے ہیں۔ یہ سادہ، تال بند، اور تقریباً مراقبے جیسا ہے۔

پھر چھٹا راؤنڈ آتا ہے۔

دھوکہ دہی کے میکانزم

چھٹے راؤنڈ کے آس پاس، گیم جھوٹ بولنا شروع کر دیتا ہے۔ اسکرین پر ایک کمانڈ چمکتی ہے — شاید ایک پرتشدد، سرخ، کانپتا ہوا TAP — اور وہ ہر ریفلیکس جو آپ نے وارم اپ کے دوران بنایا تھا، آپ کو بٹن دبانے پر مجبور کرتا ہے۔ اگر آپ ایسا کرتے ہیں، تو آپ ہار جاتے ہیں۔ وہ سرخ لرزش کوئی خرابی (glitch) نہیں ہے۔ یہ ایک اشارہ ہے۔ ایک ایماندار جھوٹا آپ کو ایک سراغ دیتا ہے، اور یہ گیم آپ کو بالکل وہی دیتا ہے: دھوکہ دہی کی ایک بصری زبان (visual grammar)۔

یہ چال اس لیے کام کرتی ہے کیونکہ بنیاد ایماندار ہے۔ ابتدائی راؤنڈز آپ کو سکھاتے ہیں کہ رنگ اور حرکت کا ایک مطلب ہوتا ہے۔ جب پیلیٹ اچانک بدل جاتی ہے اور ٹیکسٹ کانپنے لگتا ہے، تو گیم دھوکہ نہیں دے رہا ہوتا۔ یہ اشارہ دے رہا ہوتا ہے۔ معلومات آپ کے پاس تھیں۔ یا تو آپ نے اسے پڑھا یا نہیں پڑھا۔

جب آپ ناکام ہوتے ہیں، تو گیم آپ کی توہین کرتا ہے۔ وہ چبھن جان بوجھ کر رکھی گئی ہے۔ ایک ایسے مائیکرو گیم میں جس میں کوئی لیڈر بورڈ نہیں ہے اور نہ ہی کوئی مستقل ترقی (persistent progression)، تو ذلت ہی دوبارہ کھیلنے کی ترغیب (replayability) کا ذریعہ ہے۔ یہ فیڈ بیک لوپ کو مکمل کرتا ہے۔ آپ لیگ (lag) کی وجہ سے یا ہٹ باکس (hitbox) کے درست نہ ہونے کی وجہ سے نہیں ہارتے۔ آپ اس لیے ہارتے ہیں کیونکہ آپ نے ایک کانپتے ہوئے سرخ لفظ پر بھروسہ کیا، اور گیم اس بات کو یقینی بناتا ہے کہ آپ اس غلطی کا احساس کرتے رہیں۔

28KB کا اصل مطلب کیا ہے

ایک واحد 28KB کی HTML فائل کے اندر بنانے کا فیصلہ محض ایک نئی چیز نہیں ہے۔ یہ ایک ڈیزائن کی پابندی ہے جو مشکل فیصلے کرنے پر مجبور کرتی ہے۔ چھپنے کے لیے میگا بائٹس کی اسپرائٹ شیٹس (sprite sheets) موجود نہیں ہیں۔ ٹرگر کرنے کے لیے کوئی آڈیو فائلز نہیں۔ جو کچھ بھی نظر آتا ہے وہ HTML5 Canvas پر فریم بہ فریم بنایا گیا ہے۔ جو کچھ بھی سنائی دیتا ہے وہ Web Audio oscillators سے آتا ہے۔

اگر آپ نے براہ راست Web Audio API پر کام نہیں کیا ہے، تو اس کا مطلب یہ ہے۔ ایک پہلے سے ریکارڈ شدہ WAV یا MP3 لوڈ کرنے کے بجائے، کوڈ ایک AudioContext تخلیق کرتا ہے، ایک oscillator node منسلک کرتا ہے، ایک ویو فارم (waveform) منتخب کرتا ہے — sine، square، sawtooth — اور ایک فریکوئنسی سیٹ کرتا ہے۔ درست ان پٹ کے لیے ایک مختصر بیپ، اور ناکامی کے لیے ایک تیز آواز۔ وہ آوازیں براؤزر کے ذریعے ریئل ٹائم میں تیار کی جاتی ہیں۔ ان کا فائل سائز میں کوئی خرچ نہیں ہوتا اور یہ کوئی بیرونی نیٹ ورک ریکویسٹ بھی نہیں مانگتے۔

یہی منطق بصریات (visuals) پر بھی لاگو ہوتی ہے۔ Canvas آپ کو ایک فوری ڈرائنگ سطح فراہم کرتا ہے۔ آپ مستطیل (rectangle) کو صاف کرتے ہیں۔ آپ ٹیکسٹ بھرتے ہیں۔ آپ لرزش کے اثر (shake effect) کے لیے ٹرانسفارم یا شیڈو بلر سیٹ کرتے ہیں۔ وہاں کوئی virtual DOM diffing نہیں ہے، کوئی React reconciliation نہیں ہے، اور ڈی بگ کرنے کے لیے کوئی dependency array نہیں ہے۔ براؤزر کوڈ چلاتا ہے، اور پکسلز نمودار ہو جاتے ہیں۔ اس قدر مرکوز گیم کے لیے، یہ براہ راست ہونا ایک خوبی ہے، کوئی حد نہیں۔

پے لوڈ (payload) کو 28KB تک رکھنے کا مطلب یہ بھی ہے کہ گیم موبائل براؤزر پر تقریباً فوری طور پر لوڈ ہو جاتا ہے، یہاں تک کہ کمزور کنکشن پر بھی۔ اسے ہوسٹ کرنے میں تقریباً کچھ بھی خرچ نہیں ہوتا۔ پوری ایپلی کیشن زیادہ تر ویب سائٹ کے فیک کونز (favicons) سے بھی چھوٹی ہے۔ یہ اس وقت اہمیت رکھتا ہے جب آپ اسے کسی شیئر شدہ لنک کے ذریعے تقسیم کر رہے ہوں یا کسی فورم پر ایمبیڈ کر رہے ہوں۔ انسٹالیشن کی کوئی رکاوٹ نہیں ہے۔ آپ URL پر جاتے ہیں، اور جھوٹ تیار ہے۔

منصفانہ دھوکہ دہی

جھوٹ بولنے کے میکانزم پر حقیقی وقت صرف کرنے سے گیم ڈیزائن کے بارے میں ایک لطیف حقیقت سامنے آتی ہے۔ ناانصافی صرف تب ہی دلچسپ ہوتی ہے جب وہ سمجھ میں آنے والی ہو۔ ایک بے قاعدہ جال (random trap) جو کھلاڑی کو بغیر کسی وارننگ کے مار دیتا ہے، وہ برا ڈیزائن ہے۔ ایک جال جو تھرتھراتا ہے، رنگ بدلتا ہے، اور قائم شدہ بصری تال (visual rhythm) کو توڑتا ہے، وہ ایک ایسی پہیلی ہے جسے اچانک حملے کی شکل دی گئی ہے۔

سرخ کانپتا ہوا ٹیکسٹ کئی مقاصد پورا کرتا ہے۔ یہ ان عادات کو ختم کر دیتا ہے جو کھلاڑیوں نے پہلے پانچ راؤنڈز میں پیدا کی ہوتی ہیں۔ یہ ایک جذباتی موڑ لاتا ہے — شک، ہچکچاہٹ، گھبراہٹ — اس چیز میں جو پہلے صرف ریفلیکس کا ٹیسٹ تھا۔ اور سب سے اہم بات یہ ہے کہ یہ ناکامی کو آپ کی اپنی ناکامی محسوس کرواتا ہے۔ جب آپ اس سرخ کمانڈ کو ٹیپ کرتے ہیں اور توہین ظاہر ہوتی ہے، تو آپ جانتے ہیں کہ غلطی آپ کی ہے۔ گیم نے آپ کو اشارہ دیا تھا۔ آپ اسے پڑھنے میں ناکام رہے۔

This is the difference between a cheap shot and a fair fight. LIAR wants to punch you in the face, but it puts its weight behind the swing first.

Shipping Over Polishing

The game is rough. The author will tell you that themselves. It is their first finished game, and simplicity was the price of completion. That honesty is refreshing in an ecosystem where developers often blog about systems that never see production. LIAR exists at a live URL. You can play it right now. You can view the source in a single file without untangling a monorepo.

The developer wants to know two things from anyone brave enough to try it. First, how long do you survive? Second, when the first lie hits in round six, does it feel fair, or does it feel cheap? Those are the right questions to ask. They treat the lie not as a bug, but as a mechanic that needs tuning.

If there is interest, they have offered to write a deeper guide covering the Canvas drawing loop, the logic behind the Web Audio oscillators, and exactly how the lying mechanic is structured in code. Given how rare it is to see a full game inside one HTML file, that guide would be genuinely useful to anyone stuck in tutorial purgatory.

The Real Takeaway

You do not need a game engine to build a game. You do not need a content delivery network for assets, or a design document twenty pages long, or permission from a framework maintainer. You need a boundary — here, 28KB and a single file — and a reason to finish. Constraints force clarity. A shaking red word is more memorable than a thousand imported sprites when the mechanic underneath is solid.

Play LIAR for yourself at https://playliar.netlify.app/.
You can read the original developer breakdown and source context at https://dev.to/shabbir_sesaifee_8fdc587/i-built-a-game-that-lies-to-you-in-a-single-28kb-html-file-no-framework-no-assets-4hnh.