সবারই এমন একটি ফোল্ডার থাকে। যেখানে অর্ধেক করা টিউটোরিয়াল, পরিত্যক্ত সাইড প্রজেক্ট এবং README ফাইল ঠাসা থাকে যা আসলে যা দেওয়ার কথা তার চেয়ে বেশি প্রতিশ্রুতি দেয়। এটি হলো ভালো ইচ্ছার একটি কবরস্থান, আর এখান থেকে বের হওয়ার একমাত্র উপায় হলো এমন কিছু রিলিজ করা—যাই হোক না কেন—যা আসলে কাজ করে।

শেষ করার সেই তীব্র আকাঙ্ক্ষা থেকেই LIAR-এর জন্ম, একটি ব্রাউজার গেম যা এতটাই ছোট এবং কঠোর যে এটি একটি মাত্র ২৮ কেবি (28KB) HTML ফাইলের মধ্যে এঁটে যায়। কোনো ফ্রেমওয়ার্ক নেই। কোনো ইমেজ ফাইল নেই। কোনো সাউন্ড অ্যাসেট নেই। শুধু খাঁটি HTML5 Canvas, Web Audio API এবং একগুচ্ছ জেদ।

অ্যান্টি-টিউটোরিয়াল

বেশিরভাগ শেখার প্রজেক্ট মারা যায় কারণ সেগুলো অতিরিক্ত বড় হয়ে যায়। আপনি একটি ক্যানভাস টিউটোরিয়াল দিয়ে শুরু করেন, একটি মুভমেন্ট স্ক্রিপ্ট যোগ করেন, তারপর সিদ্ধান্ত নেন যে আপনার একটি টাইল এডিটর প্রয়োজন, তারপর একটি এনটিটি কম্পোনেন্ট সিস্টেম, তারপর একটি Webpack কনফিগ যা কম্পাইল হতে এগারো সেকেন্ড সময় নেয়। ছয় সপ্তাহ পরে আপনার কাছে একটি বিল্ড পাইপলাইন থাকে কিন্তু কোনো গেম থাকে না।

LIAR সেই ফাঁদটি এড়িয়ে চলে। এটি একটি রিঅ্যাকশন গেম। একটি বাটন আপনাকে TAP, HOLD, অথবা DON'T করতে বলে। টাইমার শেষ হওয়ার আগে আপনাকে কাজ করতে হবে। শুরুর রাউন্ডগুলো বিশ্বাস স্থাপন করে। টেক্সট বলছে TAP, আপনি ট্যাপ করলেন। টেক্সট বলছে HOLD, আপনি আপনার আঙুল চেপে ধরলেন। এটি সহজ, ছন্দময়, প্রায় ধ্যানমগ্ন।

তারপর ষষ্ঠ রাউন্ডটি আসে।

বিশ্বাসঘাতকতার মেকানিক্স

ষষ্ঠ রাউন্ডের দিকে গেমটি মিথ্যা বলা শুরু করে। স্ক্রিনে একটি কমান্ড ফ্ল্যাশ করে—হয়তো একটি হিংস্র, লাল, কাঁপতে থাকা TAP—এবং ওয়ার্ম-আপের সময় আপনি যে রিফ্লেক্সগুলো তৈরি করেছিলেন, সেগুলো আপনাকে বাটন চাপতে চিৎকার করে বলছে। আপনি যদি চাপেন, তবে আপনি হেরে যাবেন। লাল রঙের সেই কাঁপুনি কোনো গ্লিচ নয়। এটি একটি সংকেত। একজন সৎ মিথ্যাবাদী আপনাকে একটি ক্লু দেয়, আর এই গেমটি আপনাকে ঠিক সেটিই দেয়: প্রতারণার একটি ভিজ্যুয়াল গ্রামার।

ট্রিকটি কাজ করে কারণ এর ভিত্তিটি সৎ। শুরুর রাউন্ডগুলো আপনাকে শেখায় যে রঙ এবং গতি অর্থ বহন করে। যখন কালার প্যালেট হঠাৎ বদলে যায় এবং টেক্সট কাঁপতে থাকে, তখন গেমটি চিটিং করছে না। এটি সংকেত দিচ্ছে। আপনার কাছে তথ্য ছিল। আপনি হয় সেটি পড়েছেন, অথবা পড়েননি।

আপনি যখন ব্যর্থ হন, গেমটি আপনাকে অপমান করে। সেই আঘাতটি উদ্দেশ্যপ্রণোদিত। কোনো লিডারবোর্ড বা স্থায়ী প্রগতি নেই এমন একটি মাইক্রো-গেমে, অপমানই হলো পুনরায় খেলার অনুপ্রেরণা। এটি ফিডব্যাক লুপটি সম্পন্ন করে। আপনি ল্যাগ বা হিটবক্সের সমস্যার কারণে হারেন না। আপনি হারেন কারণ আপনি একটি কাঁপতে থাকা লাল শব্দের ওপর বিশ্বাস করেছিলেন, আর গেমটি নিশ্চিত করে যে আপনি সেই ভুলটি নিয়ে কিছুক্ষণ বসে থাকবেন।

২৮ কেবি (28KB) আসলে কী বোঝায়

একটি মাত্র ২৮ কেবি HTML ফাইলের মধ্যে তৈরি করার সিদ্ধান্তটি কেবল একটি নতুনত্ব নয়। এটি একটি ডিজাইন কনস্ট্রেইন্ট যা কঠিন সিদ্ধান্ত নিতে বাধ্য করে। পেছনে লুকানোর মতো মেগাবাইট সমপরিমাণ স্প্রাইট শিট নেই। ট্রিগার করার মতো কোনো অডিও ফাইল নেই। যা কিছু দৃশ্যমান তা HTML5 Canvas-এ ফ্রেম-বাই-ফ্রেম আঁকা হয়। যা কিছু শোনা যায় তা আসে Web Audio অসিলেটর থেকে।

আপনি যদি সরাসরি Web Audio API নিয়ে কাজ না করে থাকেন, তবে এটি আসলে কী তা এখানে দেওয়া হলো। কোনো আগে থেকে রেকর্ড করা WAV বা MP3 লোড করার পরিবর্তে, কোডটি একটি AudioContext তৈরি করে, একটি অসিলেটর নোড যুক্ত করে, একটি ওয়েভফর্ম নির্বাচন করে—sine, square, sawtooth—এবং একটি ফ্রিকোয়েন্সি সেট করে। সঠিক ইনপুটের জন্য একটি ছোট বিপ (beep), এবং ব্যর্থতার জন্য একটি কর্কশ বাজার (buzz)। সেই টোনগুলো ব্রাউজার রিয়েল টাইমে গণনা করে। এগুলোর জন্য ফাইলের সাইজ বাড়তে নেই এবং কোনো এক্সটার্নাল নেটওয়ার্ক রিকোয়েস্টও করতে হয় না।

একই যুক্তি ভিজ্যুয়ালের ক্ষেত্রেও প্রযোজ্য। Canvas আপনাকে একটি ইমিডিয়েট-মোড ড্রয়িং সারফেস দেয়। আপনি একটি রেকট্যাঙ্গেল ক্লিয়ার করেন। টেক্সট ফিল করেন। শেক ইফেক্টের জন্য একটি ট্রান্সফর্ম বা শ্যাডো ব্লার সেট করেন। সেখানে কোনো ভার্চুয়াল DOM ডিফিং নেই, কোনো React রিকনসিলিয়েশন নেই, ডিবাগ করার জন্য কোনো ডিপেন্ডেন্সি অ্যারে নেই। ব্রাউজার কোডটি চালায়, এবং পিক্সেলগুলো উপস্থিত হয়। এই ধরনের ফোকাসড গেমের জন্য, সেই সরাসরিতা একটি ফিচার, সীমাবদ্ধতা নয়।

পে-লোড ২৮ কেবি-তে রাখা মানে গেমটি একটি মোবাইল ব্রাউজারে প্রায় তাৎক্ষণিকভাবে লোড হয়, এমনকি দুর্বল কানেকশনেও। এটি হোস্ট করতে কার্যত কিছুই খরচ হয় না। পুরো অ্যাপ্লিকেশনটি বেশিরভাগ ওয়েবসাইটের ফ্যাভিকন (favicon)-এর চেয়েও ছোট। আপনি যদি কোনো শেয়ার্ড লিঙ্ক বা ফোরামে এটি বিতরণ করেন, তবে এটি অত্যন্ত গুরুত্বপূর্ণ। এখানে ইনস্টল করার কোনো ঝামেলা নেই। আপনি URL-এ ভিজিট করবেন, আর মিথ্যাটি প্রস্তুত।

ন্যায্য প্রতারণা

মিথ্যা বলার মেকানিকটির পেছনে প্রকৃত সময় ব্যয় করা গেম ডিজাইনের একটি সূক্ষ্ম সত্য প্রকাশ করে। অন্যায্যতা তখনই মজার হয় যখন তা বোঝা যায়। কোনো সতর্কতা ছাড়াই খেলোয়াড়কে মেরে ফেলে এমন একটি র‍্যান্ডম ট্র্যাপ হলো খারাপ ডিজাইন। কিন্তু একটি ট্র্যাপ যা কাঁপে, রঙ পরিবর্তন করে এবং প্রতিষ্ঠিত ভিজ্যুয়াল ছন্দ ভেঙে দেয়, তা হলো একটি অ্যাম্বুশ বা অতর্কিত হামলার ছদ্মবেশে থাকা একটি পাজল।

লাল রঙের কাঁপতে থাকা টেক্সটটি একাধিক উদ্দেশ্যে কাজ করে। এটি প্রথম থেকে পঞ্চম রাউন্ড পর্যন্ত খেলোয়াড়দের তৈরি করা অভ্যাসগত প্রতিক্রিয়াকে ওভাররাইড করে। এটি একটি ইমোশনাল বিট তৈরি করে—সন্দেহ, দ্বিধা, আতঙ্ক—যা আগে ছিল কেবল একটি রিফ্লেক্স টেস্ট। এবং সবচেয়ে গুরুত্বপূর্ণভাবে, এটি ব্যর্থতার দায় নিজের মনে করতে সাহায্য করে। যখন আপনি সেই লাল কমান্ডে ট্যাপ করেন এবং অপমানটি প্রদর্শিত হয়, তখন আপনি জানেন যে দোষটি আপনার। গেমটি আপনাকে সংকেত দিয়েছিল। আপনি সেটি পড়তে ব্যর্থ হয়েছেন।

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.