प्रत्येकाकडे असा एक फोल्डर असतो. ज्यामध्ये अर्धवट राहिलेले ट्युटोरियल्स, सोडून दिलेले साईड प्रोजेक्ट्स आणि केवळ आश्वासने देणाऱ्या README फाइल्सचा ढीग असतो. तो चांगल्या हेतूंचा एक स्मशानभूमी आहे, आणि त्यातून बाहेर पडण्याचा एकमेव मार्ग म्हणजे काहीतरी — अगदी काहीही — प्रत्यक्षरित्या लाँच करणे जे खरोखर काम करते.
पूर्ण करण्याची ती ओढच LIAR च्या निर्मितीमागे कारणीभूत ठरली, जो एक ब्राउझर गेम आहे जो इतका लहान आणि इतका कठोर आहे की तो एका सिंगल २८KB च्या HTML फाईलमध्ये मावतो. कोणतेही frameworks नाहीत. इमेज फाइल्स नाहीत. साउंड असेट्स नाहीत. फक्त शुद्ध HTML5 Canvas, Web Audio API आणि एक कठोर स्वभाव.
अँटी-ट्युटोरियल
बहुतेक शिकण्याचे प्रकल्प अपयशी ठरतात कारण ते खूप मोठे आणि गुंतागुंतीचे होत जातात. तुम्ही कॅनव्हास ट्युटोरियलने सुरुवात करता, त्यात मूव्हमेंट स्क्रिप्ट जोडता, मग तुम्हाला टाईल एडिटरची गरज आहे असे ठरवता, मग एन्टिटी कंपोनंट सिस्टम, आणि मग एक Webpack कॉन्फिग ज्याला कंपाईल व्हायला अकरा सेकंद लागतात. सहा आठवड्यांनंतर तुमच्याकडे एक build pipeline असते पण गेम नसतो.
LIAR त्या जाळ्यात अडकत नाही. हा एक रिॲक्शन गेम आहे. एक बटण तुम्हाला TAP, HOLD किंवा DON'T करायला सांगते. टाइमर संपण्यापूर्वी तुम्ही कृती करायची असते. सुरुवातीचे फेरे विश्वास निर्माण करतात. मजकूर म्हणतो TAP, तुम्ही टॅप करता. मजकूर म्हणतो HOLD, तुम्ही तुमचे बोट दाबून ठेवता. हे सोपे, लयबद्ध आणि जवळजवळ ध्यानस्थ (meditative) आहे.
मग सहावी फेरी येते.
फसवणुकीची यंत्रणा
सहाव्या फेरीच्या आसपास, गेम खोटं बोलायला लागतो. स्क्रीनवर एक कमांड चमकते — कदाचित एक हिंसक, लाल, थरथरणारा TAP — आणि वॉर्म-अप दरम्यान तुम्ही विकसित केलेला प्रत्येक रिफ्लेक्स तुम्हाला बटण दाबण्यासाठी सांगतो. जर तुम्ही तसे केले, तर तुम्ही हरता. तो लाल थरथरणारा रंग ग्लिच नाही. तो एक संकेत आहे. एक प्रामाणिक खोटारडा तुम्हाला एक संकेत देतो, आणि हा गेम तुम्हाला अगदी तेच देतो: फसवणुकीचे एक दृश्य व्याकरण (visual grammar).
ही युक्ती काम करते कारण त्याचा पाया प्रामाणिक आहे. सुरुवातीचे फेरे तुम्हाला शिकवतात की रंग आणि हालचाल अर्थपूर्ण असतात. जेव्हा रंगांची मांडणी (palette) अचानक बदलते आणि मजकूर थरथरतो, तेव्हा गेम फसवणूक करत नसतो. तो संकेत देत असतो. तुमच्याकडे माहिती होती. तुम्ही ती वाचली किंवा नाही, हे तुमच्यावर अवलंबून होते.
जेव्हा तुम्ही अपयशी ठरता, तेव्हा गेम तुमचा अपमान करतो. तो टोचणारा अनुभव हेतुपुरस्सर असतो. कोणतेही leaderboard आणि सततची प्रगती (persistent progression) नसलेल्या मायक्रो-गेममध्ये, अपमान ही पुन्हा पुन्हा खेळण्याची (replayability) प्रेरणा असते. तो फीडबॅक लूप पूर्ण करतो. तुम्ही लॅगमुळे किंवा हिटबॉक्स चुकीचा असल्यामुळे हरत नाही. तुम्ही एका थरथरणाऱ्या लाल शब्दावर विश्वास ठेवल्यामुळे हरता, आणि गेम तुम्हाला ती चूक लक्षात ठेवायला भाग पाडतो.
२८KB चा नेमका अर्थ काय?
एका सिंगल २८KB च्या HTML फाईलमध्ये गेम बनवण्याचा निर्णय केवळ एक गंमत नाही. हे एक डिझाइन बंधन (constraint) आहे जे तुम्हाला कठीण निर्णय घेण्यास भाग पाडते. मागे लपण्यासाठी तुमच्याकडे मेगाबाइट्सच्या स्प्राईट शीट्स नाहीत. ट्रिगर करण्यासाठी ऑडिओ फाइल्स नाहीत. जे काही दृश्य आहे ते HTML5 Canvas वर फ्रेम-बाय-फ्रेम काढले जाते. जे काही ऐकू येते ते Web Audio ऑसिलेटर्समधून येते.
जर तुम्ही थेट Web Audio API सोबत काम केले नसेल, तर त्यात काय असते ते येथे दिले आहे. आधीच रेकॉर्ड केलेली WAV किंवा MP3 लोड करण्याऐवजी, कोड एक AudioContext तयार करतो, एक ऑसिलेटर नोड जोडतो, एक वेव्हफॉर्म — sine, square, sawtooth — निवडतो आणि फ्रिक्वेन्सी सेट करतो. योग्य इनपुटसाठी एक छोटा बीप, आणि चुकीच्या इनपुटसाठी एक कर्कश आवाज. हे टोन ब्राउझरद्वारे रिअल टाइममध्ये संगणित केले जातात. त्यांचा फाईल साईजमध्ये कोणताही खर्च येत नाही आणि त्यासाठी कोणतेही बाह्य नेटवर्क रिक्वेस्ट्स लागत नाहीत.
हीच तर्कशास्त्र व्हिज्युअल्सनाही लागू होते. Canvas तुम्हाला एक immediate-mode drawing surface देते. तुम्ही रेक्टँगल क्लिअर करता. मजकूर भरता. थरथरणे (shake effect) साठी तुम्ही ट्रान्सफॉर्म किंवा शॅडो ब्लर सेट करता. येथे कोणतेही virtual DOM diffing, React reconciliation किंवा debug करण्यासाठी dependency array नाही. ब्राउझर कोड चालवतो आणि पिक्सेल्स दिसू लागतात. इतक्या केंद्रित गेमसाठी, ही थेटता एक वैशिष्ट्य आहे, मर्यादा नाही.
पेलोड २८KB पर्यंत मर्यादित ठेवण्याचा अर्थ असाही आहे की गेम मोबाईल ब्राउझरवर अगदी त्वरित लोड होतो, अगदी अस्थिर कनेक्शनवरही. होस्ट करण्यासाठी याचा खर्च नगण्य आहे. संपूर्ण ॲप्लिकेशन बहुतेक वेबसाइट फॅविकॉन्सपेक्षाही लहान आहे. जर तुम्ही शेअर केलेल्या लिंकद्वारे किंवा फोरमवर गेम वितरित करत असाल, तर हे महत्त्वाचे ठरते. यामध्ये इन्स्टॉल करण्याचा कोणताही अडथळा नाही. तुम्ही URL ला भेट देता आणि खोटारडा गेम तयार असतो.
न्याय्य फसवणूक
फसवणुकीच्या यंत्रणेवर वेळ खर्च केल्यावर गेम डिझाइनबद्दल एक सूक्ष्म सत्य समोर येते. अन्याय तेव्हाच मजेशीर असतो जेव्हा तो समजण्यासारखा असतो. खेळाडूला पूर्वसूचना न देता मारणारा एखादा रँडम साप (trap) हे खराब डिझाइन आहे. पण जो साप थरथरतो, रंग बदलतो आणि स्थापित दृश्य लय (visual rhythm) तोडतो, तो एका दबावाच्या स्वरूपात मांडलेला कोडे (puzzle) असतो.
लाल थरथरणारा मजकूर अनेक उद्देश पूर्ण करतो. तो खेळाडूंनी पहिल्या ते पाचव्या फेरीमध्ये विकसित केलेल्या सवयीच्या प्रतिसादाला (habitual response) बाजूला सारतो. तो आधीच्या रिफ्लेक्स टेस्टमध्ये एक भावनिक चढ-उतार — संशय, द्विधा मनस्थिती, भीती — आणतो. आणि सर्वात महत्त्वाचे म्हणजे, तो अपयशाची जबाबदारी तुमच्यावर टाकतो. जेव्हा तुम्ही त्या लाल कमांडवर टॅप करता आणि अपमानजनक संदेश दिसतो, तेव्हा तुम्हाला समजते की चूक तुमचीच आहे. गेमने तुम्हाला संकेत दिला होता, पण तुम्ही तो वाचण्यात अपयशी ठरलात.
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.
